> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CreatePlacedResource

> ID3D12Device::CreatePlacedResource는 XBOX Direct3D 12에서 특정 힙에 배치된 경량 리소스를 생성합니다. 가장 빠르게 생성되는 리소스 유형입니다.

특정 힙에 배치된 리소스를 만듭니다. 배치된 리소스는 사용 가능한 리소스 객체 중 가장 가벼우며, 만들고 파괴하는 것이 가장 빠릅니다.

애플리케이션은 힙 영역에서 여러 Direct3D 배치된 리소스 및 예약된 리소스를 겹쳐서 비디오 메모리를 재사용할 수 있습니다. 단순한 메모리 재사용 모델([설명](#remarks)에 설명됨)은 언제든지 어떤 겹치는 리소스가 유효한지 명확히 하기 위해 존재합니다. 그래픽 도구 지원을 극대화하기 위해, 단순 모델에서는 데이터 상속이 지원되지 않으며, 세분화된 타일 및 하위 리소스 무효화도 지원되지 않습니다. 전체 겹치는 리소스 무효화만 발생합니다.

## 구문

```cpp theme={null}
HRESULT CreatePlacedResource(
    ID3D12Heap  pHeap,
    UINT64 HeapOffset,
    const D3D12_RESOURCE_DESC  pDesc,
    D3D12_RESOURCE_STATES InitialState,
    const D3D12_CLEAR_VALUE  pOptimizedClearValue,
    const IID & riid,
    void  ppvResource
)
```

### 매개 변수

*pHeap*<br />형식: ID3D12Heap \*

리소스가 배치되는 힙을 나타내는 **ID3D12Heap** 인터페이스에 대한 포인터입니다.

*HeapOffset*<br />형식: UINT64

리소스의 오프셋(바이트 단위)입니다. \_HeapOffset\_은 리소스의 정렬 크기의 배수여야 하며, \_HeapOffset\_에 리소스 크기를 더한 값은 힙 크기보다 작거나 같아야 합니다. 텍스처 리소스의 크기를 이해하려면 [**GetResourceAllocationInfo**](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_getresourceallocationinfo_public)를 사용해야 합니다.

*pDesc*<br />형식: const D3D12\_RESOURCE\_DESC \*

리소스를 설명하는 **D3D12\_RESOURCE\_DESC** 구조체에 대한 포인터입니다.

*InitialState*<br />형식: D3D12\_RESOURCE\_STATES

**D3D12\_RESOURCE\_STATES** 열거형 상수의 비트 OR 조합으로 표현되는 리소스의 초기 상태입니다.

**D3D12\_HEAP\_TYPE\_UPLOAD** 힙과 함께 리소스를 만들 때 \_InitialState\_는 **D3D12\_RESOURCE\_STATE\_GENERIC\_READ**여야 합니다. **D3D12\_HEAP\_TYPE\_READBACK** 힙과 함께 리소스를 만들 때 \_InitialState\_는 **D3D12\_RESOURCE\_STATE\_COPY\_DEST**여야 합니다.

*pOptimizedClearValue*<br />형식: const D3D12\_CLEAR\_VALUE \*

지우기 색상의 기본값을 설명하는 **D3D12\_CLEAR\_VALUE**를 지정합니다.

\_pOptimizedClearValue\_는 지우기 작업이 가장 최적화되는 값을 지정합니다. 생성된 리소스가 **D3D12\_RESOURCE\_FLAG\_ALLOW\_RENDER\_TARGET** 또는 **D3D12\_RESOURCE\_FLAG\_ALLOW\_DEPTH\_STENCIL** 플래그가 있는 텍스처인 경우, 애플리케이션은 지우기 작업이 가장 자주 호출될 값을 선택해야 합니다.

지우기 작업은 다른 값으로 호출할 수 있지만, 이러한 작업은 리소스 생성에 전달된 값과 일치하는 경우만큼 효율적이지 않습니다.

**D3D12\_RESOURCE\_DIMENSION\_BUFFER**와 함께 사용될 때 \_pOptimizedClearValue\_는 NULL이어야 합니다.

*riid*<br />형식: const IID &

리소스 인터페이스의 전역 고유 식별자(**GUID**)입니다. 이것은 입력 매개 변수입니다.

리소스에 대한 인터페이스의 **REFIID** 또는 **GUID**는 `__uuidof` 매크로를 사용하여 얻을 수 있습니다. 예를 들어, `__uuidof(ID3D12Resource)`는 리소스에 대한 인터페이스의 **GUID**를 가져옵니다. **riid**는 가장 일반적으로 [**ID3D12Resource**](/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs)의 GUID이지만, 모든 인터페이스의 **GUID**일 수 있습니다. 리소스 객체가 이 **GUID**에 대한 인터페이스를 지원하지 않으면 생성이 **E\_NOINTERFACE**로 실패합니다.

*ppvResource*<br />형식: void \*\*

리소스에 대한 포인터를 받는 메모리 블록에 대한 포인터입니다. \_ppvResource\_는 기능 테스트를 활성화하려면 NULL일 수 있습니다. \_ppvResource\_가 NULL인 경우 객체가 생성되지 않으며, *pResourceDesc* 및 기타 매개 변수가 유효하면 S\_FALSE가 반환됩니다.

### 반환 값

형식: HRESULT

리소스를 만들 메모리가 부족한 경우 이 메서드는 **E\_OUTOFMEMORY**를 반환합니다. 다른 가능한 반환 값은 [Direct3D 12 반환 코드](https://learn.microsoft.com/en-us/windows/win32/direct3d12/d3d12-graphics-reference-returnvalues)를 참조하세요.

## 설명

**CreatePlacedResource**는 예약된 리소스를 힙 내의 오프셋에 완전히 매핑하는 것과 유사하지만, 힙과 연결된 가상 주소 공간도 재사용될 수 있습니다.

배치된 리소스는 커밋된 리소스보다 만들고 파괴하는 것이 더 가볍습니다. 이는 이러한 작업 중에 힙이 생성되거나 파괴되지 않기 때문입니다. 또한, 배치된 리소스는 리소스 생성 및 파괴보다 훨씬 가벼운 메모리 재사용 기법을 가능하게 합니다. 즉, 별칭 지정과 별칭 지정 배리어를 통한 재사용입니다. 여러 배치된 리소스가 동일한 힙에서 동시에 서로 겹칠 수 있지만, 한 번에 하나의 겹치는 리소스만 사용할 수 있습니다.

배치된 리소스 사용 시맨틱에는 단순 모델과 고급 모델의 두 가지가 있습니다. 앱에 고급 모델이 필요하다는 것을 확인할 때까지는 단순 모델을 선택하는 것이 좋습니다(다양한 GPU 생태계에서 그래픽 도구 지원을 극대화합니다).

### 단순 모델

이 모델에서는 배치된 리소스를 활성 또는 비활성이라는 두 가지 상태 중 하나에 있는 것으로 간주할 수 있습니다. GPU가 비활성 리소스에서 읽거나 쓰는 것은 유효하지 않습니다. 배치된 리소스는 비활성 상태로 생성됩니다.

명령 목록에서 별칭 지정 배리어로 리소스를 활성화하려면, 애플리케이션은 [**D3D12\_RESOURCE\_ALIASING\_BARRIER::pResourceAfter**](/reference/graphics/d3d12/structs/d3d12_resource_aliasing_barrier_public)에서 리소스를 전달해야 합니다. 활성화 중에 **pResourceBefore**는 NULL로 남길 수 있습니다. 활성화된 리소스와 물리적 메모리를 공유하는 모든 리소스는 이제 비활성 상태가 되며, 여기에는 겹치는 배치된 리소스 및 예약된 리소스가 포함됩니다.

효율성을 최대화하려면 별칭 지정 배리어를 그룹화하여 함께 제출해야 합니다.

활성화 후 렌더 타깃 또는 뎁스 스텐실 플래그가 있는 리소스는 추가로 초기화되어야 합니다. 아래 필수 리소스 초기화에 대한 참고 사항을 참조하세요.

#### 필수 리소스 초기화에 대한 참고 사항

특정 리소스 유형은 여전히 초기화가 필요합니다. 렌더 타깃 또는 뎁스 스텐실 플래그가 있는 리소스는 지우기 작업 또는 전체 하위 리소스 복사 모음으로 초기화되어야 합니다. 두 개의 별칭 지정된 리소스 간의 전환을 나타내기 위해 별칭 지정 배리어를 사용한 경우 초기화는 별칭 지정 배리어 이후에 이루어져야 합니다. 이 초기화는 단순 모델에서 리소스가 활성화되었을 때도 여전히 필요합니다.

렌더 타깃 또는 뎁스 스텐실 플래그가 있는 배치된 리소스 및 예약된 리소스는 다른 작업이 지원되기 전에 다음 작업 중 하나로 초기화되어야 합니다.

* *Clear* 작업; 예: [ClearRenderTargetView](/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/methods/id3d12graphicscommandlist_clearrendertargetview_xs) 또는 [ClearDepthStencilView](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_cleardepthstencilview_public).
* [DiscardResource](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_discardresource_public) 작업.
* *Copy* 작업; 예: [CopyBufferRegion](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copybufferregion_public), [CopyTextureRegion](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytextureregion_public) 또는 [CopyResource](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-copyresource).

애플리케이션은 수정된 텍셀 수를 최소화하는 가장 명시적인 작업을 선호해야 합니다. 다음 예를 고려하세요.

* 픽셀 가시성을 해결하기 위해 뎁스 버퍼를 사용하는 경우 일반적으로 각 뎁스 텍셀이 1.0 또는 0으로 시작해야 합니다. 따라서 *Clear* 작업은 별칭 지정된 뎁스 버퍼 초기화에 가장 효율적인 옵션이어야 합니다.
* 애플리케이션은 톤 매핑의 대상으로 별칭 지정된 렌더 타깃을 사용할 수 있습니다. 애플리케이션이 톤 매핑 중에 모든 픽셀을 렌더링하므로 [DiscardResource](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_discardresource_public)가 초기화에 가장 효율적인 옵션이어야 합니다.

### 고급 모델

이 모델에서는 활성/비활성 상태 추상화를 무시할 수 있습니다. 대신 이러한 하위 수준 규칙을 준수해야 합니다.

* 두 액세스가 동일한 [ExecuteCommandLists](/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_executecommandlists) 호출 내에 있는 한, 동일한 물리적 메모리에 대한 두 개의 서로 다른 GPU 리소스 액세스 사이에 별칭 지정 배리어가 있어야 합니다.
* 특정 유형의 별칭 지정된 리소스에 대한 첫 번째 렌더링 작업은 단순 모델과 마찬가지로 여전히 초기화여야 합니다.

초기화 작업은 전체 하위 리소스 또는 64KB 세분성으로 이루어져야 합니다. 전체 하위 리소스 초기화는 모든 리소스 유형에서 지원됩니다. 64KB 오프셋에서 정렬된 64KB 초기화 세분성은 64KB\_UNDEFINED\_SWIZZLE 또는 64KB\_STANDARD\_SWIZZLE 텍스처 레이아웃([D3D12\_TEXTURE\_LAYOUT](/reference/graphics/d3d12_x/enums/d3d12_texture_layout) 참조)이 있는 버퍼 및 텍스처에서 지원됩니다.

### 별칭 지정 배리어에 대한 참고 사항

별칭 지정 배리어는 \_pResourceAfter\_와 *pResourceBefore* 모두에 대해 NULL을 설정할 수 있습니다. [**ExecuteCommandLists**](/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_executecommandlists)의 메모리 일관성 정의와 별칭 지정 배리어는 동일하므로, 두 액세스가 서로 다른 두 **ExecuteCommandLists** 호출에 있을 때 동일한 물리적 메모리에 대한 두 별칭 지정된 액세스에는 별칭 지정 배리어가 필요하지 않습니다.

D3D12 고급 사용 모델의 경우, [**ExecuteCommandLists**](/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_executecommandlists)의 동기화 정의는 별칭 지정 배리어와 동일합니다. 따라서 애플리케이션은 물리적 메모리를 재사용하는 사이에 별칭 지정 배리어를 삽입하거나, 물리적 메모리의 두 별칭 지정된 사용이 **ExecuteCommandLists**에 대한 두 개의 개별 호출에서 발생하도록 보장할 수 있습니다.

비활성화 양은 리소스 속성에 따라 다릅니다. 정의되지 않은 메모리 레이아웃이 있는 텍스처는 전체 텍스처가 원자적으로 비활성화되어야 하므로 최악의 경우입니다. 레이아웃이 정의된 두 개의 겹치는 리소스의 경우, 비활성화는 리소스의 겹치는 정렬된 영역만 초래할 수 있습니다. 데이터 상속조차 잘 정의될 수 있습니다. 자세한 내용은 [메모리 별칭 지정 및 데이터 상속](https://learn.microsoft.com/en-us/windows/win32/direct3d12/memory-aliasing-and-data-inheritance)을 참조하세요.

## 요구 사항

**헤더:** d3d12\_xs.h 또는 d3d12\_x.h<br />**라이브러리:** d3d12\_xs.lib 또는 d3d12\_x.lib<br />**지원 플랫폼**: XBOX Series 콘솔 및 XBOX One 제품군

## 함께 보기

[CreateCommittedResource](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createcommittedresource_public)

[CreateReservedResource](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createreservedresource_public)

[ID3D12Device](/reference/graphics/d3d12_x/interfaces/id3d12device/id3d12device)

[공유 힙](https://learn.microsoft.com/en-us/windows/win32/direct3d12/shared-heaps)


## Related topics

- [CreatePlacedResource2 (XBOX Series 콘솔)](/ko/reference/graphics/d3d12/interfaces/id3d12device10/methods/id3d12device10_createplacedresource2_public.md)
- [CreateReservedResource](/ko/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createreservedresource_public.md)
- [CreateCommittedResource](/ko/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createcommittedresource_public.md)
- [CreateReservedResource2 (XBOX Series 콘솔)](/ko/reference/graphics/d3d12/interfaces/id3d12device10/methods/id3d12device10_createreservedresource2_public.md)
- [CreateReservedResource1 (XBOX Series 콘솔)](/ko/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
