Expand description
Vulkan Resources
(以下メモ)
§バッファの作成
BufferDescで作成する
ⓘ
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はResidencyとAliasedの両方を示す
sharing_queue_families: 複数のキューでアイテムを共有する際に、共有したいキューファミリの番号を指定する。デフォルトは空(占有)
§イメージの作成
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でない場合) - キューブテクスチャである(
flagsにImageFlags::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§
- Aspect
Mask - Bitmask specifying which aspects of an image are included in a view
- Bind
Buffer Memory Info - Bind
Image Memory Info - Buffer
Create Info - Builder structure specifying the parameters of a newly created buffer object
- Buffer
Memory Requirements Info2 - Buffer
Object - Opaque handle to a buffer object(constructed via [
BufferDesc]) - Buffer
Usage - Bitmask specifying allowed usage of a buffer
- Buffer
View Create Info - Buffer
View Object - Opaque handle to a buffer view object
- Device
Memory Object - Image
Create Info - Image
Flags - Bitmask specifying additional parameters of an image
- Image
Memory Requirements Info2 - Image
Object - Opaque handle to a image object(constructed via
ImageDesc) - Image
Sparse Memory Requirements Info2 - Image
Usage Flags - Bitmask specifying intended usage of an image.
- Image
View Builder - Image
View Create Info - Image
View Object - Opaque handle to a image view object
- Layout
Transition - Represents the transition between image layouts.
- Mapped
Memory - Specifies the block of mapped memory in a
DeviceMemory - Mapped
Memory Range - Structure specifying a mapped memory range.
- Memory
Allocate Info - Structure containing parameters of a memory allocation
- Memory
Dedicated Allocate Info - Specify a dedicated memory allocation resource
- Sampler
Create Info - Sampler
Object - Swapchain
Image - Opaque handle to a image object, backed by Swapchain.
Enums§
- Addressing
Mode - Specify behavior of sampling with texture coordinates outside an image
- Border
Color - Specify border color used for texture lookups
- Buffer
Sparse Binding - Bitset specifying additional parameters of a buffer
- Filter
Mode - Specify filter used for texture lookups
- Image
Layout - Layouts of image and image subresources
- Mipmap
Filter Mode - Specify mipmap mode used for texture lookups
Traits§
- Buffer
- Buffer
View - Concrete
Device Image View - Device
Child Image - Device
Memory - Device
Memory Mut - Image
- Image
Child - Image
Child Mut - Image
Size - Image Dimension by corresponding extent type
- Image
View - Memory
Bound - Common operations for memory bound objects
- Sampler