Module resources

Source
Expand description

Vulkan Resources

(以下メモ)

§バッファの作成

BufferDescで作成する

let buffer = BufferDesc::new(4 * 4 * 3, BufferUsage::VERTEX_BUFFER.transfer_dest()).crete(&device)?;

newからcreateまでにメソッドチェーンを用いて以下のようなバッファの詳細を指定できる。

§イメージの作成

ImageDescで作成する

let image = ImageDesc::new(&Extent2D(128, 128), VK_FORMAT_R8G8B8A8_UNORM, ImageUsage::SAMPLED.color_attachment(), ImageLayout::General)
	.create(&device)?;

ImageDesc::newの第一引数に

  • Extent1Dを指定すると1Dテクスチャ
  • Extent2Dを指定すると2Dテクスチャ
  • Extent3Dを指定すると3Dテクスチャ

を生成するようになる。 newからcreateまでにメソッドチェーンを用いて以下のようなイメージの詳細を指定できる。

  • sample_counts: イメージの要素ごとのサンプル数を2^nの値(1, 2, 4, 8, 16, 32, 64)で指定する。デフォルトは1。 以下の条件を一つでも満たす場合は1を設定する必要がある。
    • 最適タイリング(VK_IMAGE_TILING_OPTIMAL)が使われていない(use_linear_tilingを併用する場合)
    • 2Dテクスチャではない(newの第一引数がExtent2Dでない場合)
    • キューブテクスチャである(flagsImageFlags::CUBE_COMPATIBLEを指定している場合)
    • 指定したフォーマットがカラーアタッチメントもしくは深度/ステンシルアタッチメントとしての利用に対応していない場合
      • RGBAフォーマットやDSフォーマットを指定している分には気にする必要はない
  • use_linear_tiling: イメージデータのメモリ上での配列を線形に強制する(デフォルトではデバイス最適な並びを使うようになっている)
    • ディスクから読み込んだピクセルデータなどをmapして流し込む場合はこれが必要
  • array_layers: 配列イメージの要素数を指定する。デフォルトは1(配列ではない)
  • mip_levels: ミップマップの最大縮小レベルを指定する。デフォルトは1(ミップマップを使用しない)
  • sharing_queue_families: 複数のキューでアイテムを共有する際に、共有したいキューファミリの番号を指定する。デフォルトは空(占有)
  • flags: ImageFlagsを指定する。デフォルトでは“なし“

§BufferUsageの種類

BufferUsageはメソッドチェーンを利用してビットフラグを指定する。メソッド名は定数名をすべて小文字にしたもの。

BufferUsage::VERTEX_BUFFER.transfer_dest()

§入力/利用形態系

  • VERTEX_BUFFER: 頂点バッファ として頂点入力時に使用できる
  • INDEX_BUFFER: インデックスバッファ として頂点入力時に使用できる
  • UNIFORM_BUFFER: 定数バッファ としてデスクリプタ入力時に使用できる
  • STORAGE_BUFFER: ストレージバッファ としてデスクリプタ入力時に使用できる
    • 定数バッファより大容量
  • UNIFORM_TEXEL_BUFFER: 1Dのイメージアイテムとして適用可能な定数バッファとしてデスクリプタ入力時に使用できる
  • STORAGE_TEXEL_BUFFER: 1Dのイメージアイテムとして適用可能なストレージバッファとしてデスクリプタ入力時に使用できる
  • INDIRECT_BUFFER: 間接実行コマンドの 引数バッファ として使用できる

§転送系

  • TRANSFER_SRC: 転送コマンドでソースアイテムとして指定可能であることを示す
  • TRANSFER_DEST: 転送コマンドで対象アイテムとして指定可能であることを示す
    • このバッファに対してクリア、値埋めコマンドを適用したい場合もこれを指定する必要がある

§ImageUsageの種類

ImageUsageもメソッドチェーンを利用してビットフラグを指定する。

ImageUsage::SAMPLED.color_attachment()

§シェーダ入力系

  • SAMPLED: シェーダによってサンプル可能であることを示す
    • シェーダで テクスチャ として使用できるようにする場合はこれ
  • INPUT_ATTACHMENT: シェーダによって入力アタッチメントとしての扱いを受けることができる
    • シェーダで入力アタッチメントとして指定したい場合(中間バッファなど)はこれ
  • STORAGE: シェーダのイメージ入力として使用可能であることを示す
    • SAMPLEDとの違いは、こちらはサンプラーによるサンプリングを使用できない

§出力系

  • COLOR_ATTACHMENT: crate::framebuffer::Framebufferの出力(カラーもしくはマルチサンプル解決)アイテムとして利用可能であることを示す
    • 要するに、 コマンドで描画した結果を受け取る ことができる
    • プロシージャルテクスチャの作成やオフスクリーンレンダリングの出力として使いたい場合はこれ
  • DEPTH_STENCIL_ATTACHMENT: crate::framebuffer::Framebufferでの深度/ステンシルバッファとして利用可能であることを示す
    • オフスクリーンレンダリングなどで深度バッファが必要な場合はこれ

§転送系

  • TRANSFER_SRC: 転送コマンドでソースアイテムとして指定可能であることを示す
    • このテクスチャが何らかのコピー元になる場合はこれ
  • TRANSFER_DEST: 転送コマンドで対象アイテムとして指定可能であることを示す
    • このテクスチャが何らかのコピー先になる場合はこれ
    • このテクスチャに対してクリア、値埋めコマンドを適用したい場合はこれ

§その他

  • TRANSIENT_ATTACHMENT: 色、深度/ステンシル、マルチサンプル解決、および入力アイテムとして指定可能であることを示す
    • テクスチャがVK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BITが指定されたDeviceMemoryにバインドされることを想定している
    • パス間の中間バッファなどで、一時的に確保される必要があるバッファに指定するとメモリ使用量が少なくて済むかもしれない?

Structs§

AspectMask
Bitmask specifying which aspects of an image are included in a view
BindBufferMemoryInfoVK_KHR_bind_memory2
BindImageMemoryInfoVK_KHR_bind_memory2
BufferCreateInfo
Builder structure specifying the parameters of a newly created buffer object
BufferMemoryRequirementsInfo2VK_KHR_get_memory_requirements2
BufferObject
Opaque handle to a buffer object(constructed via [BufferDesc])
BufferUsage
Bitmask specifying allowed usage of a buffer
BufferViewCreateInfo
BufferViewObject
Opaque handle to a buffer view object
DeviceMemoryObject
ImageCreateInfo
ImageFlags
Bitmask specifying additional parameters of an image
ImageMemoryRequirementsInfo2VK_KHR_get_memory_requirements2
ImageObject
Opaque handle to a image object(constructed via ImageDesc)
ImageSparseMemoryRequirementsInfo2VK_KHR_get_memory_requirements2
ImageUsageFlags
Bitmask specifying intended usage of an image.
ImageViewBuilder
ImageViewCreateInfo
ImageViewObject
Opaque handle to a image view object
LayoutTransition
Represents the transition between image layouts.
MappedMemory
Specifies the block of mapped memory in a DeviceMemory
MappedMemoryRange
Structure specifying a mapped memory range.
MemoryAllocateInfo
Structure containing parameters of a memory allocation
MemoryDedicatedAllocateInfoVK_KHR_dedicated_allocation
Specify a dedicated memory allocation resource
SamplerCreateInfo
SamplerObject
SwapchainImage
Opaque handle to a image object, backed by Swapchain.

Enums§

AddressingMode
Specify behavior of sampling with texture coordinates outside an image
BorderColor
Specify border color used for texture lookups
BufferSparseBinding
Bitset specifying additional parameters of a buffer
FilterMode
Specify filter used for texture lookups
ImageLayout
Layouts of image and image subresources
MipmapFilterMode
Specify mipmap mode used for texture lookups

Traits§

Buffer
BufferView
ConcreteDeviceImageView
DeviceChildImage
DeviceMemory
DeviceMemoryMut
Image
ImageChild
ImageChildMut
ImageSize
Image Dimension by corresponding extent type
ImageView
MemoryBound
Common operations for memory bound objects
Sampler

Type Aliases§

ImageSubresource
ImageSubresourceLayers
ImageSubresourceRange