Constant Buffer

이승덱·2021년 7월 27일
0

Graphics&DirectX

목록 보기
6/37

Constant Buffer

  • 상수 버퍼(Constant buffer)는 정점 및 픽셀 셰이더에서 사용될 상수를 모아 놓은 버퍼이다.
  • 상수 버퍼 사용을 위해 cpp 코드 영역에 상수 버퍼 타입의 구조체를 정의하고 셰이더에도 동일한 포맷으로 상수 버퍼 구조체를 정의해야 한다.
  • 시스템 메모리에서 구조체 변수 생성 및 값 설정 후 정점 혹은 픽셀 셰이더에 Set 시킨다.
  • 값 설정 및 set은 보통 매 프레임 실행되는 Render() 함수에 적용한다.
    상수 버퍼를 사용하는 이유는 셰이더에서 매번 사용되는 상수,
    하지만 cpp 파일에서 전달해주어야 한다고 가정할 때,
    개별적으로 하나하나 값을 전달해 주는 것은 대역폭(bandwidth)이 
    크고 부담이 많이 된다고 한다.
    따라서 하나의 구조체로 묶어 보내도록 하기 위해 constant buffer라는 개념을 사용한다고 한다.
    
D3D12_INPUT_ELEMENT_DESC desc[] =
{
	{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
	{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
	{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0 , 28, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },

}; // cpp의 상수 버퍼 타입 구조체

struct VS_IN
{
 float3 pos : POSITION;  // float 3개
 float4 color : COLOR;   // float 4개
 float2 uv : TEXCOORD;
}; // hlsli의 상수 버퍼
profile
공부 기록용 블로그입니다

0개의 댓글