728x90

D3D11_TEXTURE2D_DESC 구조체

2차원 텍스처에 대한 정보를 서술하는 구조체

 

 멤버 변수

 설명 

 Width

 2차원 텍스처의 가로 크기 ( 텍셀 단위 )

 Height

 2차원 텍스처의 세로 크기 ( 텍셀 단위 )

 MipLevels

 최대 밉맵 레벨

 다중 샘플링 텍스처는 1을 사용하며 0을 사용하면 가능한 최대 밉맵 레벨을 설정한다.

 ArraySize

 텍스처 배열의 텍스처 개수

 Format

 텍스처의 텍셀 데이터 형식

 SampleDesc

 다중 샘플링 정보를 나타내는 구조체

 Usage

 텍스처를 어떻게 읽고 쓸 것인지를 나타내는 D3D11_USAGE 열거형 상수

 보통 D3D11_USAGE_DEFAULT 를 사용한다

 BindFlags

 텍스처를 파이프라인 단계에 어떻게 연결할 것인가를 나타내는 D3D11_BIND_FLAG 열거형 상수

 CPUAccessFlags

 허용되는 CPU 접근 권한을 나타내는 D3D11_CPU_ACCESS_FLAG 열거형 상수

 0을 사용하면 CPU가 이 텍스처에 접근할 필요가 없다는 의미

 MiscFlags

 D3D11_RESOURCE_MISC_FLAG 열거형 상수

 보통 0을 사용한다.

 


ID3D11Device::CreateTexture2D() 함수

2차원 텍스처 리소스를 생성하는 함수

2차원 텍스처 리소스는 여러 개의 2차원 서브 리소스를 포함 할 수 있다.

서브 리소스의 개수는 D3D11_TEXTURE2D_DESC 구조체에서 설정 가능하며 하나의 리소스에 있는 모든 텍스처의 크기, 데이터 형식, 밉맵 레벨은 같아야 한다.



 매개 변수

 설명 

 pDesc

 D3D11_TEXTURE2D_DESC 구조체에 대한 포인터

 pInitailData

 서브 리소스를 서술하는 D3D11_SUBRESOURCE_DATA 구조체에 대한 배열

 텍스처를 텍셀 데이터로 초기화하기 위해서는 이 구조체로 텍스처 데이터를 지정해야 한다.

 NULL을 지정하면 서브 리소스를 나중에 지정하겠다는 의미이다.

 텍스처가 D3D11_USAGE_IMMUTABLE을 사용하여 생성하였다면 이 값에 NULL을 사용할 수 없다.

 다중 샘플링되는 리소스는 생성 중에 초기화할 수 없기 때문에 이 값은 반드시 NULL이 되어야 한다.

 ppTexture2D

 생성된 텍스처에 대한 인터페이스에 대한 포인터

 이 값을 NULL로 설정하면 입력 매개 변수의 유효성을 검사할 수 있다. 이 경우 S_FALSE가 반환되면 유효하다는 의미이다

 


D3D11_SUBRESOURCE_DATA 구조체

리소스의 서브 리소스를 초기화하는 구조체

 

 멤버 변수

 설명 

 pSysMem

 초기화 데이터에 대한 포인터

 SysMemPitch

 텍스처의 특정 줄의 시작에서 다음 줄의 시작까지의 바이트 수

 이 값은 2차원, 3차원 텍스처 데이터를 초기화할 때 사용하고 다른 리소스에서는 의미가 없다.

 SysMemSlicePitch

 특정 깊이 레벨의 시작에서 다음 깊이 레벨까지의 바이트 수

 이 값은 3차원 텍스처를 초기화할 때 사용하고 다른 리소스에서는 의미가 없다.

 


D3DX11CreateTextureFromFile() 함수

파일로부터 텍스처 리소스를 생성하기 위한 함수

 

 매개 변수

 설명 

 pDevice

 디바이스 인터페이스에 대한 포인터

 pSrcFile

 파일의 이름

 pLoadInfo

 파일에서 텍스처 데이터를 어떻게 읽을 것인가를 지정하는 D3DX11_IMAGE_LOAD_INFO 구조체

 이 구조체를 설정하면 내용에 맞게 텍스처를 로드하며 NULL을 설정하면 텍스처 파일에서 텍스처 데이터의 특성을 읽어서 로드한다.

 pPump

 스레드 펌프 인터페이스 ( ID3DX11ThreadPump)에 대한 포인터

 스레드 펌프는 어떤 작업을 비동기적으로 수행하기 위해 사용된다.

 스레드 펌프를 설정하면 텍스처 파일을 읽기 위해 이 함수가 별도의 스레드를 통해 비동기적으로 수행된다.

 NULL을 지정하면 동기적으로 실행된다.

 스레드 펌프는 D3DX11CreateThreadPump() 함수로 생성한다.

 ppTexture

 생성된 텍스처 리소스( ID3D11Resource )에 대한 포인터의 수조

 pHResult

 함수 반환값을 저장할 변수의 주소

 스레드 펌프를 사용하지 않으면 NULL을 지정한다. 

 스레드 펌프를 사용하면 이 메모리 주소는 함수 호출이 비동기적으로 완료될 때까지 유효해야 한다

 


D3DX11CreateShaderResourceViewFromFile() 함수

파일로부터 쉐이더 리소스 뷰를 생성하기 위해 사용된다.

 


 

 매개 변수

 설명 

 pDevice

 디바이스 인터페이스에 대한 포인터

 pSrcFile

 파일의 이름

 pLoadInfo 

 파일에서 텍스처 데이터를 어떻게 읽을 것인가를 지정하는 D3DX11_IMAGE_LOAD_INFO 구조체

 이 구조체를 설정하면 내용에 맞게 텍스처를 로드하며 NULL을 설정하면 텍스처 파일에서 텍스처 데이터의 특성을 읽어서 로드한다

 pPump

 스레드 펌프 인터페이스 ( ID3DX11ThreadPump)에 대한 포인터

 스레드 펌프는 어떤 작업을 비동기적으로 수행하기 위해 사용된다.

 스레드 펌프를 설정하면 텍스처 파일을 읽기 위해 이 함수가 별도의 스레드를 통해 비동기적으로 수행된다.

 NULL을 지정하면 동기적으로 실행된다.

 스레드 펌프는 D3DX11CreateThreadPump() 함수로 생성한다.

 ppShaderResourceView

 쉐이더 리소스 뷰 인터페이스 ( ID3D11ShaderResourceView )에 대한 포인터의 주소

 pHResult

 함수 반환값을 저장할 변수의 주소

 스레드 펌프를 사용하지 않으면 NULL을 지정한다. 

 스레드 펌프를 사용하면 이 메모리 주소는 함수 호출이 비동기적으로 완료될 때까지 유효해야 한다

 


D3DX11_IMAGE_LOAD_INFO 구조체

파일에서 텍스처를 로드하는 함수가 텍스처를 어떻게 로드할 것인가를 설정하기 위해 사용되는 구조체

 

 멤버 변수

 설명 

 Width

 생성할 텍스처의 가로 크기

 파일에서 로드할 텍스처의 가로 크기가 이 값보다 크거나 작으면 텍스처의 크기가 이 값에 맞도록 변환된다.

 Height

 생성할 텍스처의 세로 크기

 파일에서 로드할 텍스처의 세로 크기가 이 값보다 크거나 작으면 텍스처의 크기가 이 값에 맞도록 변환된다.

 Depth

 텍스처의 깊이

 볼륨 텍스처에만 적용된다

 FirstMipLevel

 텍스처의 가장 큰 해상도의 밉맵 레벨

 이 값이 0보다 크면 텍스처가 로드된 후에 FirstMipLevel은 밉맵 레벨 0으로 매핑된다.

 MipLevels

 텍스처의 최대 밉맵 레벨 

 0 또는 D3DX11_DEFAULT 을 지정하면 최대 밉맵을 가진 텍스처가 생성된다.

 Usage

 텍스처 리소스에 적용될 D3D11_USAGE 열거형 상수

 BindFlags

 텍스처 리소스에 적용될 D3D11_BIND_FLAG 열거형 상수

 CPUAccessFlags

 이 텍스처에 대한 CPU 접근 권한을 나타내는 D3D11CPU_ACCESS_FLAG 열거형 상수

 D3D11_CPU_ACCESS_WRITE 또는 D3D11_CPU_ACCESS_READ를 사용한다.

 가능하면 CPU가 이 텍스처에 접근할 수 없도록 0을 사용한다.

 MiscFlags

 텍스처 리소스에 대한 추가적인 특성을 설정하는 D3D11_RESOURCE_MISC_FLAG 열거형 상수

 Format

 텍스처의 데이터 형식을 나타내는 DXGI_FORMAT 열거형 상수

 Filter

 텍스처에 적용할 필터를 지정하기 위한 D3DX11_FILTER_FLAG 열거형 상수

 MipFilter

 텍스처 밉맵에 적용할 필터를 지정하기 위한 D3DX11_FILTER_FLAG 열거형 상수

 D3D11_FILTER_NONE, D3DX11_FILTER_POINT, D3DX11_FILTER_LINEAR, D3DX11_FILTER_TRIANGLE 을 사용할 수 있다

 pSrcInfo

 원래 이미지에 대한 정보를 나타내는 D3DX11_IMAGE_INFO 구조체

 D3DX11GetImageInfoFromFIle(), D3DX11GetImageInfoFromMemory(), D3DX11GetImageInfoFromResource() 함수 중 하나를 사용하여 D3DX11_IMAGE_INFO 구조체의 정보를 얻는다.

 

D3DX11_IMAGE_LOAD_INFO 구조체는 사용하지 않을 멤버 변수는 설정하지 않는다. 또한 ZeroMemory 함수를 사용하지 않는다.


ID3D11DeviceContext::UpdateSubresource() 함수

CPU가 시스템 메모리의 내용을 맵핑할 수 없는 메모리에 생성된 리소스로 복사한다.


 

 매개 변수

 설명 

 pDstResource

 복사할 목표 리소스에 대한 포인터

 리소스가 D3D11_USAGE_IMMUTABLE, 깊이/스텐실 버퍼, 다중 샘플링으로 생성되었다면 목표 리소스를 사용할 수 없다.

 DstSburesource

 목표 서브 리소스를 나타내는 인덱스

 인덱스는 D3D11CalcSubresource() 함수를 사용하여 계산한다.

 pDstBox

 목표 서브 리소스의 일부분을 나타내는 박스에 대한 포인터

 좌표 단위는 버퍼에는 바이트를 사용하고 텍스처에는 텍셀을 사용한다.

 이 값이 NULL이면 데이터를 목표 서브 리소스에 그대로 복사한다.

 소스의 크기는 목표의 크기와 같아야 한다.

 쉐이더 상수 버퍼의 일부분만 바꾸는 것은 허용되지 않아 쉐이더 상수 버퍼에는 이 값을 NULL로 설정한다

 pSrcData

 복사할 데이터를 나타내는 시스템 메모리의 포인터

 SrcRowPitch

 복사할 데이터의 한 줄의 바이트 크기

 SrcDepthPitch

 복사할 데이터의 깊이 슬라이스 하나의 크기

 


D3D11CalcSubresource() 멤버 함수

텍스처의 서브 리소스 인덱스를 계산하기 위해 사용된다.

버퍼는 구조화되지 않은 리소스이므로 서브 리소스가 하나이다. 따라서 버퍼에 대해서는 이 함수를 사용하지 않는다.

텍스처는 구조화된 리소스이다. 텍스처는 텍스처 배열의 크기와 밉맵 레벨의 개수를 따라 하나 이상의 서브 리소스를 가진다.

 

 매개 변수

 설명 

 MipSlice

 밉맵 레벨의 배열의 인덱스

 0은 첫 번째 밉맵 레벨을 나타낸다.

 ArraySlice

 텍스처의 배열에서 사용할 첫 번째 텍스처의 인덱스 

 MipLevels 

 사용할 밉맵 레벨의 개수

 


리소스의 제약

리소스는 제약이 존재한다.

 리소스

 제약 

 상수 버퍼의 원소 개수

 4096개 

 하나의 버퍼에서 텍셀의 개수

 227텍셀 

 Texture1D U 차원

 8192 

 Texture1DArray 차원

 512 배열 슬라이스 

 Texture2D U/V 차원

 8192 

 Texture2DArray 차원

 512 배열 슬라이스 

 Texture3D U/V/W 차원

 2048 

 TextureCube 차원

 8192 

 리소스 크기

 128MB 

 이방성(Anisotropic) 필터링(Maxanisotropy)

 16

 하드웨어에서 주소로 참조할 수 있는 리소스 차원

 차원마다 8192 

 IA 또는 VS/GS/PS 리소스 크기

 128MB 

 컨텍스트 하나의 리소스 뷰의 최대 개수

 220 

 버퍼 구조체의 크기

 2048 바이트 

 스트림 출력의 크기 

 227 텍셀 

 Draw() / DrawInstanced() 정점 카운트 (인스턴싱 포함 )

 232 

 DrawIndextd[Instanced])( ) 정점 카운트 ( 인스턴싱 포함 )

 232 

 GS 호출 출력 데이터( 요소의 개수 * 정점의 개수 )

 1024 

 컨텍스트 하나의 샘플러 객체의 전체 개수

 4096 

 파이프라인의 뷰 포트/시저 객체의 전체 개수

 16 

 정점마다 Clip/Cull 거리의 전체 개수

 8 

 컨텍스트마다 블렌드 객체의 전체 개수

 4096 

 컨텍스트마다 깊이/스텐실 객체의 전체 개수

 4096 

 컨텍스트마다 래스터라이저 상태 객체의 전체 개수

 4096 

 다중 샘플링 동안 픽셀당 최대 샘플 수

 32 

 쉐이더 리소스 정점의 원소 수 ( 4개의 32비트 요소 )

 16 

 정점 쉐이더에서 입력 레지스터 개수(4개의 32비트 요소)

 16 

 정점 쉐이더에서 출력 레지스터 개수(4개의 32비트 요소)

 16 

 기하 쉐이더에서 입력 레지스터 개수(4개의 32비트 요소)

 16 

 기하 쉐이더에서 출력 레지스터 개수(4개의 32비트 요소)

 32 

 픽셀 쉐이더에서 입력 레지스터 개수(4개의 32비트 요소)

 32 

 픽셀 쉐이더에서 출력 레지스터 개수(4개의 32비트 요소)

 8 

 픽셀 쉐이더에서 출력 깊이 레지스터 개수(1개의 32비트 요소)

 1 

 입력 조립기에서 인덱스 입력 리소스 슬롯의 개수

 1 

 입력 조립기에서 정점 입력 리소스 슬롯의 개수

 16 



출처 : http://blog.naver.com/ram1029123/220419267617

728x90

+ Recent posts