[DX11_#2]D3D Buffer( 2 / 2 )

DirectX 11 2009.10.13 22:08 Posted by simon882

3) Constant Buffer

Dx10에서 생긴 ‘Constant Buffer’‘Shader’를 사용할 때 비효율적이고 지속적인 업데이트로 인해 성능을 떨어트리는 현상을 극복하기 위해 도입 되었습니다. 이를 이용해 API와 하드웨어가 상수를 효율적으로 조작해, 귀중한 GPU bandwidth CPU의 사용량을 최소화 할 수 있습니다.


 

Shader Constant들을 일괄적으로 관리해 shader constant data 를 관리하기 위해서 발생하는 bandwidth overhead 를 줄여 줍니다.

예전에는 constant 를 등록할 때 4개의 component 를 가진 상수를 등록하는게 기본이었습니다. float4  costanat 설정의 최소 단위였습니다. 하지만 이제는 float 하나만 등록하는 것이 가능합니다.

 

Shader-constant buffer의 생성은 이전 글에서 언급 했던 것처럼 ‘D3D11_BUFFER_DESC’ BindFlagsD3D11_BIND_CONSTANT_BUFFER’설정하면 됩니다.

 

// Define the constant data used to communicate with shaders.
struct VS_CONSTANT_BUFFER
{
    D3DXMATRIX mWorldViewProj;                              

    D3DXVECTOR4 vSomeVectorThatMayBeNeededByASpecificShader;

    float fSomeFloatThatMayBeNeededByASpecificShader;

    float fTime;                                           

    float fSomeFloatThatMayBeNeededByASpecificShader2;

    float fSomeFloatThatMayBeNeededByASpecificShader3;

};

 

D3D11_BUFFER_DESC BufDesc;

BufDesc.ByteWidth = sizeof( VS_CONSTANT_BUFFER );

BufDesc.BindFlags = D3D10_BIND_CONSTANT_BUFFER

 

그러나 Index, Vertex Buffer는 다른 ‘D3D11_BIND_CONSTANT_BUFFER’의 열거형 변수들과 함께 ‘or연산으로 사용할 수 있으나 D3D11_BIND_CONSTANT_BUFFER’는 다른 flag와 함께 사용 할 수 없습니다.

 

Shader-constant buffer 파이프라인에 bind할 때 아래 중 한 개를 사용합니다.

ID3D11DeviceContext::GSSetConstantBuffers,

ð  ‘Geometry shader pipeline state’ 설정.

ID3D11DeviceContext::PSSetConstantBuffers,

ð  ‘Pixel shader pipeline state’ 설정.

ID3D11DeviceContext::VSSetConstantBuffers

ð  ‘Vertex shader pipeline state’ 설정.

쉐이더가 Shader-constant buffer를 읽게 하기 위해, 고유의 HLSL함수를 사용합니다.

 

 실질적으로 DX10에서 DX11로 넘어오며 바뀐 점을 딱히 찾지는 못하고, Dx Help파일을 번역하고 검색한 내용을 약간 첨부한 정도가 되었습니다.

 추후에 더 알게 되는 것이 있으면 추가하도록 하겠습니다.


신고

'DirectX 11' 카테고리의 다른 글

[JumpToDX11-5] 새로운 시대를 여는 DirectX11...  (6) 2009.11.02
[DX11_#3]기본적인 설정  (0) 2009.10.22
[DX11_#2]D3D Buffer( 2 / 2 )  (0) 2009.10.13
[DX11_#1]D3D Buffer( 1 / 2 )  (0) 2009.09.22
[JumpToDX11-4] ID3D11View  (0) 2009.09.07
[JumpToDX11-3] Feature Level  (0) 2009.08.31