Module bedrock::resources [] [src]

Vulkan Resources

(以下メモ)

バッファの作成

BufferDescで作成する

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

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

  • sparse_binding_opt: SparseBinding時の許可される挙動を指定する。デフォルトでは"なし"
    • [BufferSparseBinding::Bound]でSparseBindingによってメモリにバインドできることを示す
    • [BufferSparseBinding::Residency]で部分的にメモリにバインドできることを示す
    • [BufferSparseBinding::Aliased]で、バインド先のメモリ範囲が他のバッファに同時に使われる可能性を示す
    • [BufferSparseBinding::Both]はResidencyAliasedの両方を示す
  • sharing_queue_families: 複数のキューでアイテムを共有する際に、共有したいキューファミリの番号を指定する。デフォルトは空(占有)

イメージの作成

ImageDescで作成する

This example is not tested
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はメソッドチェーンを利用してビットフラグを指定する。メソッド名は定数名をすべて小文字にしたもの。

This example is not tested
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もメソッドチェーンを利用してビットフラグを指定する。

This example is not tested
ImageUsage::SAMPLED.color_attachment()

シェーダ入力系

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

出力系

  • COLOR_ATTACHMENT: [Framebuffer]の出力(カラーもしくはマルチサンプル解決)アイテムとして利用可能であることを示す
    • 要するに、 コマンドで描画した結果を受け取る ことができる
    • プロシージャルテクスチャの作成やオフスクリーンレンダリングの出力として使いたい場合はこれ
  • DEPTH_STENCIL_ATTACHMENT: [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

Buffer

Opaque handle to a buffer object(constructed via BufferDesc)

BufferDesc

Builder structure specifying the parameters of a newly created buffer object

BufferUsage

Bitmask specifying allowed usage of a buffer

BufferView

Opaque handle to a buffer view object

ComponentMapping

Structure specifying a color component mapping

DeviceMemory

Opaque handle to a device memory object

Image

Opaque handle to a image object(constructed via ImageDesc)

ImageDesc

Builder structure specifying the parameters of a newly created image object

ImageFlags

Bitmask specifying additional parameters of an image

ImageSubresourceRange

Structure specifying a image subresource range

ImageUsage

Bitmask specifying intended usage of an image

ImageView

Opaque handle to a image view object

MappedMemoryRange

Specifies the block of mapped memory in a DeviceMemory

Sampler

Opaque handle to a sampler object

SamplerBuilder

Builder object for constructing the sampler object

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

ComponentSwizzle

Specify how a component is swizzled

FilterMode

Specify filter used for texture lookups

ImageLayout

Layouts of image and image subresources

MipmapFilterMode

Specify mipmap mode used for texture lookups

Traits

ImageSize

Image Dimension by corresponding extent type