Skip to content

Commit

Permalink
Add Dynamic State Lifetime examples (#274)
Browse files Browse the repository at this point in the history
  • Loading branch information
spencer-lunarg authored Oct 17, 2024
1 parent 22305f1 commit 027f972
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
43 changes: 43 additions & 0 deletions chapters/dynamic_state.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,49 @@ Vulkan is a tool, so as with most things, and there is no single answer for this

Some implementations might have a performance loss using some certain `VkDynamicState` state over a static value, but dynamic states might prevent an application from having to create many permutations of pipeline objects which might be a bigger desire for the application.

[[dynamic-state-lifetime]]
== Dynamic state lifetime

The spec talks about how there is a link:https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#dynamic-state-lifetime[dynamic state lifetime]. The following best describes it in some examples:

[source,cpp]
----
// example 1 - valid
vkCmdSetViewport()
vkCmdBindPipeline() // static state
vkCmdDraw()
// example 2 - valid
vkCmdBindPipeline() // static state
vkCmdSetViewport()
vkCmdBindPipeline() // dynamic state
vkCmdDraw()
// example 3 - invalid (VUID-vkCmdDraw-None-07831)
vkCmdBindPipeline() // static state
vkCmdBindPipeline() // dynamic state
vkCmdDraw()
// example 4 - invalid (VUID-vkCmdDraw-None-08608)
vkCmdBindPipeline() // dynamic state
vkCmdBindPipeline() // static state
vkCmdSetViewport()
vkCmdDraw()
// example 5 - invalid (VUID-vkCmdDraw-None-07831)
vkCmdSetViewport()
vkCmdBindPipeline() // static state
vkCmdBindPipeline() // dynamic state
vkCmdDraw()
// example 6 - invalid (VUID-vkCmdDraw-None-07831)
vkCmdSetViewport()
vkCmdBindPipeline() // static state
vkCmdDraw()
vkCmdBindPipeline() // dynamic state
vkCmdDraw()
----

[[states-that-are-dynamic]]
== What states are dynamic

Expand Down
44 changes: 44 additions & 0 deletions lang/jp/chapters/dynamic_state.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,50 @@ Vulkan はツールなので、他のものと同様に、唯一の答えはあ

実装によっては、`VkDynamicState` を使用すると、静的な値を使用するよりもパフォーマンスが低下する場合があります。しかし、動的な状態にすることで、パイプラインオブジェクトのバリエーションを大量に作成する必要がなくなります。アプリケーションによっては、これが有用かもしれません。

[[dynamic-state-lifetime]]
== 動的な状態の寿命

仕様書では、link:https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#dynamic-state-lifetime[動的な状態の寿命]について言及している。以下、いくつかの例を挙げて説明する:


[source,cpp]
----
// 例1 - 有効
vkCmdSetViewport()
vkCmdBindPipeline() //静的な状態
vkCmdDraw()
// 例2 - 有効
vkCmdBindPipeline() // 静的な状態
vkCmdSetViewport()
vkCmdBindPipeline() // 動的な状態
vkCmdDraw()
// 例3 - 無効 (VUID-vkCmdDraw-None-07831)
vkCmdBindPipeline() // 静的な状態
vkCmdBindPipeline() // 動的な状態
vkCmdDraw()
// 例4 - 無効 (VUID-vkCmdDraw-None-08608)
vkCmdBindPipeline() // 動的な状態
vkCmdBindPipeline() // 静的な状態
vkCmdSetViewport()
vkCmdDraw()
// 例5 - 無効 (VUID-vkCmdDraw-None-07831)
vkCmdSetViewport()
vkCmdBindPipeline() // 静的な状態
vkCmdBindPipeline() // 動的な状態
vkCmdDraw()
// 例6 - 無効 (VUID-vkCmdDraw-None-07831)
vkCmdSetViewport()
vkCmdBindPipeline() // 静的な状態
vkCmdDraw()
vkCmdBindPipeline() // 動的な状態
vkCmdDraw()
----

[[states-that-are-dynamic]]
== 動的な状態とは

Expand Down

0 comments on commit 027f972

Please sign in to comment.