Skip to content

Commit 027f972

Browse files
Add Dynamic State Lifetime examples (#274)
1 parent 22305f1 commit 027f972

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

chapters/dynamic_state.adoc

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,49 @@ Vulkan is a tool, so as with most things, and there is no single answer for this
8484

8585
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.
8686

87+
[[dynamic-state-lifetime]]
88+
== Dynamic state lifetime
89+
90+
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:
91+
92+
[source,cpp]
93+
----
94+
// example 1 - valid
95+
vkCmdSetViewport()
96+
vkCmdBindPipeline() // static state
97+
vkCmdDraw()
98+
99+
// example 2 - valid
100+
vkCmdBindPipeline() // static state
101+
vkCmdSetViewport()
102+
vkCmdBindPipeline() // dynamic state
103+
vkCmdDraw()
104+
105+
// example 3 - invalid (VUID-vkCmdDraw-None-07831)
106+
vkCmdBindPipeline() // static state
107+
vkCmdBindPipeline() // dynamic state
108+
vkCmdDraw()
109+
110+
// example 4 - invalid (VUID-vkCmdDraw-None-08608)
111+
vkCmdBindPipeline() // dynamic state
112+
vkCmdBindPipeline() // static state
113+
vkCmdSetViewport()
114+
vkCmdDraw()
115+
116+
// example 5 - invalid (VUID-vkCmdDraw-None-07831)
117+
vkCmdSetViewport()
118+
vkCmdBindPipeline() // static state
119+
vkCmdBindPipeline() // dynamic state
120+
vkCmdDraw()
121+
122+
// example 6 - invalid (VUID-vkCmdDraw-None-07831)
123+
vkCmdSetViewport()
124+
vkCmdBindPipeline() // static state
125+
vkCmdDraw()
126+
vkCmdBindPipeline() // dynamic state
127+
vkCmdDraw()
128+
----
129+
87130
[[states-that-are-dynamic]]
88131
== What states are dynamic
89132

lang/jp/chapters/dynamic_state.adoc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,50 @@ Vulkan はツールなので、他のものと同様に、唯一の答えはあ
8383

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

86+
[[dynamic-state-lifetime]]
87+
== 動的な状態の寿命
88+
89+
仕様書では、link:https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#dynamic-state-lifetime[動的な状態の寿命]について言及している。以下、いくつかの例を挙げて説明する:
90+
91+
92+
[source,cpp]
93+
----
94+
// 例1 - 有効
95+
vkCmdSetViewport()
96+
vkCmdBindPipeline() //静的な状態
97+
vkCmdDraw()
98+
99+
// 例2 - 有効
100+
vkCmdBindPipeline() // 静的な状態
101+
vkCmdSetViewport()
102+
vkCmdBindPipeline() // 動的な状態
103+
vkCmdDraw()
104+
105+
// 例3 - 無効 (VUID-vkCmdDraw-None-07831)
106+
vkCmdBindPipeline() // 静的な状態
107+
vkCmdBindPipeline() // 動的な状態
108+
vkCmdDraw()
109+
110+
// 例4 - 無効 (VUID-vkCmdDraw-None-08608)
111+
vkCmdBindPipeline() // 動的な状態
112+
vkCmdBindPipeline() // 静的な状態
113+
vkCmdSetViewport()
114+
vkCmdDraw()
115+
116+
// 例5 - 無効 (VUID-vkCmdDraw-None-07831)
117+
vkCmdSetViewport()
118+
vkCmdBindPipeline() // 静的な状態
119+
vkCmdBindPipeline() // 動的な状態
120+
vkCmdDraw()
121+
122+
// 例6 - 無効 (VUID-vkCmdDraw-None-07831)
123+
vkCmdSetViewport()
124+
vkCmdBindPipeline() // 静的な状態
125+
vkCmdDraw()
126+
vkCmdBindPipeline() // 動的な状態
127+
vkCmdDraw()
128+
----
129+
86130
[[states-that-are-dynamic]]
87131
== 動的な状態とは
88132

0 commit comments

Comments
 (0)