블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,844
Today11
Yesterday82

'usage'에 해당되는 글 1건

  1. 2010.07.03 Resource (자원)

Resource (자원)

Study/Directx 10 / 2010.07.03 13:31

dx10에서의 자원은 버퍼텍스쳐의 두가지 타입이 있다.
msdn을 참고해 보면 아래와 같다.

ID3D10Resource Interface

A resource interface provides common actions on all resources.

IUnknown
   ID3D10DeviceChild
      ID3D10Resource

즉, 모든 자원에 대한 공통 기능은 ID3D10Resource 인터페이스로 구현된다는 것을 알 수 있다.
이 인터페이스를 상속받아구현된 인터페이스들로는 ID3DBuffer, ID3D10TextureXD, ID3D10TextureCuber가 있다.
자원은 비디오 메모리에 존재하게 된다.
자원의 생성시에는 Usage와 CPUAcessFlags를 설정할 수 있다.

Usage
CPU와 GPU가 각각 자원을 읽기와 쓰기 관점에서 어떻게 접근하는지.

CPUAccessFlags
자원에 대한 CPU의 접근 권한을 명시.

리소스를 생성하고 나서 사용하기 위해서는 뷰를 만들고 바인딩을 시켜야 한다.
모든 데이터는 각 스테이지가 적절히 해석할 수 있는 형태로 스테이지에게 제공해야 한다.
뷰가 바로 이런 일을 해주는 녀석이다.
뷰는 스테이지가 인식할 수 있도록 데이터를 포장한다.
렌더타겟뷰, 깊이스텐실뷰, 세이더 자원뷰가 이들이다.
각 뷰의 인터페이스는 아래와 같다.

render target view - ID3D10RenderTargetView              CreateRenderTargetView
depth stencil view - ID3D10DepthStencilView                CreateDepthStencilView
shader resource view - ID3D10ShaderResourceView    CreateShaderResourceView

렌더타겟뷰와 깊이스텐실뷰는 OMSetRenderTargets을 사용하여 출력병합기(om) 스테이지에 바인딩 하고
세이더 자원뷰는 (vs/gs/ps)SetShaderResources함수를 호출하여 정점세이더, 기하세이더, 픽셀세이더 스테이지에 바인딩
된다.

뷰 바인딩은 자원이 텍스쳐인 경우 사용되며 자원이 버퍼인 경우에는 다음과 같은 함수가 사용된다.
정점버퍼 바인딩       - IASetVertexBuffers
인덱스버퍼 바인딩    - IASetIndexBuffers
상수버퍼 바인딩       - SetConstantBuffers

dx10에서는 자원을 생성할 때 자원이 시스템 메모리나 비디오 메모리 등의 어떤 종류의 메모리에 존재하도록 할지를 설정하지 않는다.
단지 Usage만 지정하고 자원이 존재하는 메모리 풀은 내부적으로 장치의 메모리 관리자가 결정한다.
Usage는 자원의 생성시에 지정할 수 있다.

ex)
D3D10_TEXTURE2D_DESC tex2dDesc;
 tex2dDesc.Width    = desc_.width_;
 tex2dDesc.Height   = desc_.height_;
 tex2dDesc.MipLevels   = 1;
 tex2dDesc.ArraySize   = 1;
 tex2dDesc.Format   = deviceSetting->d3d10_.autoDepthStencilFormat_; 
 tex2dDesc.BindFlags   = D3D10_BIND_DEPTH_STENCIL;
 tex2dDesc.CPUAccessFlags = 0;
 tex2dDesc.MiscFlags   = 0;
 tex2dDesc.SampleDesc  = deviceSetting->d3d10_.sd_.SampleDesc;
 tex2dDesc.Usage    = D3D10_USAGE_DEFAULT;

자원은 CPU 또는 GPU가 접근할 수 있다.
CPU가 자원을 접근하기 위해서는 Map함수를 사용하고 GPU가 자원을 접근하기 위해서는
CopySubresourcRegion, CopyResource, UpdateSubresource함수를 사용한다.
접근은 많이 허용될수록 성능이 떨어진다는 것을 유의해야 한다.

위의 예에서는 D3D10_USAGE_DEFAULT를 지정하였다.
이 외에도 Uage에 대한 옵션을 알아보자면 아래와 같다.
D3D10_USAGE_DEFAULT : GPU가 자원의 읽기 및 쓰기를 할 수 있도록 한다.
D3D10_USAGE_IMMUTABLE : GPU의 READ ONLY, CPU는 접근불가.
D3D10_USAGE_DYNAMIC : GPU의 READ ONLY, CPU의 WRITE ONLY
                                       이 옵션은 CPU가 매 프레임을 그릴 때에 자원을 매번 수정하는 동적자원일 경우 적합.
D3D10_USAGE_STAGING : GPU의 데이터를 CPU로 보내는 경우 사용.

Usage의 지정에 있어서 고려해야 할 것은 자원이 갱신되는 정도이다.
. 생성이후 불변인 경우  - IMMUTBLE로 지정.
. 갱신 정도가 프레임당 1번 미만인 경우 - DEFAULT 지정.
. 매 프레임당 한번이상 갱신되는 경우. - DYNAMIC로 지정.
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함