Post Lists

2019년 8월 1일 목요일

Vulkan Tutorial (5)

https://vulkan-tutorial.com/Texture_mapping/Images

Introduction
~
우리의 어플리케이션에 텍스쳐를 추가하는 것은 다음의 스텝을 포함할 것이다:

  •  device memory에 의해 지원되는 image object 생성하기.
  • 한 image file로부터 pixels로 그것을 채우기
  • 한 image sampler 생성하기
  • texture의 colors를 sample하기 위해 combined image sampler  추가

~ Vulkan은 또한 너가 VkBuffer에서 한 이미지로 pixels을 copy하는 것을 허용하고, 이것에 대한 그 API는 실제로 어떤 하드웨어에서는 더 빠르다. 우리는 처음에 이 버퍼를 만들 것이고, 그것을 pixel values로 채울 것이고, 그러고나서 그 pixels을 복사할 image를 생성할 것이다. 한 image를 생성하는 것은 buffers를 생성하는 것과 매우 다르지 않다. 그것은 memory requirements를 query하고, device memory를 할당하고, 그것을 bind하는 것을 포함한다. 이전에 우리가 보았던 것 처럼.

~ Images는 그 pixels이 메모리에서 어떻게 구성되는지에 영향을 미치는 different layout을 가지고 있을 수 있다. 그래픽스 하드웨어가 작동하는 방식에 의해, 간다히 그 pixels을 row마다 저장하는 것은 최상의 성능을 이끌어 내지 않을지도 모른다. images에 대해 어떤 연산을 수행할 때, 너는 그것들이 그 연산에서 최적의 사용의 layout을 가지도록 해야만 한다. 우리는 실제로 이미 render pass를 명시할 떄 이러한 layouts의 몇가지를 보았다:
  • VK_IMAGE_LAYOUT_PRESENT_SRC_KHR : presentation을 위한 optimal
  • VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : fragment shader로부터 colors를 writing하기위한 attachment로서 Optimal
  • VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL : vkCmdCopyImageToBuffer같은, transfer 연산에서 source로서 Optimal
  • VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL : vkCmdCopyBufferToImage같은 transfer operation에서 destination으로서 Optimal
  • VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : shader로부터 sampling하기 위한 Optimal
한 이미지의 layout을 변환하는 가장 공통된 방법들 중 하나는 pipeline barrier이다. Pipeline barriers는 주로, 한 이미지가 read되기 전에 쓰여지도록 보장하는 것 같은 resources에 대한 접근을 동기화하는데 사용되지만, 그것들은 또한 layouts을 변환하는데 사용될 수 있다. Barriers는 추가적으로 VK_SHARING_MODE_EXCLUSIVE를 사용할 때 queue family ownership을 transfer하는데 사용될 수 있다.

댓글 없음:

댓글 쓰기