11/*
2- * Copyright 2019-2024 Diligent Graphics LLC
2+ * Copyright 2019-2025 Diligent Graphics LLC
33 * Copyright 2015-2019 Egor Yusov
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,8 +51,12 @@ class VulkanCommandBuffer
5151 const VkImageSubresourceRange& Subresource)
5252 {
5353 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
54- VERIFY (m_State.RenderPass == VK_NULL_HANDLE, " vkCmdClearColorImage() must be called outside of render pass (17.1)" );
55- VERIFY (Subresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT, " The aspectMask of all image subresource ranges must only include VK_IMAGE_ASPECT_COLOR_BIT (17.1)" );
54+ VERIFY (m_State.RenderPass == VK_NULL_HANDLE,
55+ " vkCmdClearColorImage() must be called outside of render pass "
56+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdClearColorImage-renderpass)" );
57+ VERIFY (Subresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT,
58+ " The aspectMask of all image subresource ranges must only include VK_IMAGE_ASPECT_COLOR_BIT "
59+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdClearColorImage-aspectMask-02498)" );
5660
5761 FlushBarriers ();
5862 vkCmdClearColorImage (
@@ -69,11 +73,14 @@ class VulkanCommandBuffer
6973 const VkImageSubresourceRange& Subresource)
7074 {
7175 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
72- VERIFY (m_State.RenderPass == VK_NULL_HANDLE, " vkCmdClearDepthStencilImage() must be called outside of render pass (17.1)" );
76+ VERIFY (m_State.RenderPass == VK_NULL_HANDLE,
77+ " vkCmdClearDepthStencilImage() must be called outside of render pass "
78+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdClearDepthStencilImage-renderpass)" );
7379 // clang-format off
7480 VERIFY ((Subresource.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) != 0 &&
7581 (Subresource.aspectMask & ~(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) == 0 ,
76- " The aspectMask of all image subresource ranges must only include VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT(17.1)" );
82+ " The aspectMask of all image subresource ranges must only include VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT "
83+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdClearDepthStencilImage-aspectMask-02824)" );
7784 // clang-format on
7885
7986 FlushBarriers ();
@@ -89,7 +96,9 @@ class VulkanCommandBuffer
8996 __forceinline void ClearAttachment (const VkClearAttachment& Attachment, const VkClearRect& ClearRect)
9097 {
9198 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
92- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdClearAttachments() must be called inside render pass (17.2)" );
99+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
100+ " vkCmdClearAttachments() must be called inside render pass "
101+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdClearAttachments-renderpass)" );
93102
94103 vkCmdClearAttachments (
95104 m_VkCmdBuffer,
@@ -104,7 +113,9 @@ class VulkanCommandBuffer
104113 __forceinline void Draw (uint32_t VertexCount, uint32_t InstanceCount, uint32_t FirstVertex, uint32_t FirstInstance)
105114 {
106115 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
107- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDraw() must be called inside render pass (19.3)" );
116+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
117+ " vkCmdDraw() must be called inside render pass "
118+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDraw-renderpass)" );
108119 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
109120
110121 vkCmdDraw (m_VkCmdBuffer, VertexCount, InstanceCount, FirstVertex, FirstInstance);
@@ -113,7 +124,9 @@ class VulkanCommandBuffer
113124 __forceinline void DrawIndexed (uint32_t IndexCount, uint32_t InstanceCount, uint32_t FirstIndex, int32_t VertexOffset, uint32_t FirstInstance)
114125 {
115126 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
116- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndexed() must be called inside render pass (19.3)" );
127+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
128+ " vkCmdDrawIndexed() must be called inside render pass "
129+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDrawIndexed-renderpass)" );
117130 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
118131 VERIFY (m_State.IndexBuffer != VK_NULL_HANDLE, " No index buffer bound" );
119132
@@ -123,7 +136,9 @@ class VulkanCommandBuffer
123136 __forceinline void DrawIndirect (VkBuffer Buffer, VkDeviceSize Offset, uint32_t DrawCount, uint32_t Stride)
124137 {
125138 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
126- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndirect() must be called inside render pass (19.3)" );
139+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
140+ " vkCmdDrawIndirect() must be called inside render pass "
141+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDrawIndirect-renderpass)" );
127142 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
128143
129144 vkCmdDrawIndirect (m_VkCmdBuffer, Buffer, Offset, DrawCount, Stride);
@@ -132,7 +147,9 @@ class VulkanCommandBuffer
132147 __forceinline void DrawIndexedIndirect (VkBuffer Buffer, VkDeviceSize Offset, uint32_t DrawCount, uint32_t Stride)
133148 {
134149 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
135- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndirect() must be called inside render pass (19.3)" );
150+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
151+ " vkCmdDrawIndexedIndirect() must be called inside render pass "
152+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDrawIndexedIndirect-renderpass)" );
136153 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
137154 VERIFY (m_State.IndexBuffer != VK_NULL_HANDLE, " No index buffer bound" );
138155
@@ -143,7 +160,9 @@ class VulkanCommandBuffer
143160 {
144161#if DILIGENT_USE_VOLK
145162 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
146- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndirectCountKHR() must be called inside render pass (19.3)" );
163+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
164+ " vkCmdDrawIndirectCountKHR() must be called inside render pass "
165+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDrawIndirectCount-renderpass)" );
147166 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
148167
149168 vkCmdDrawIndirectCountKHR (m_VkCmdBuffer, Buffer, Offset, CountBuffer, CountBufferOffset, MaxDrawCount, Stride);
@@ -156,7 +175,9 @@ class VulkanCommandBuffer
156175 {
157176#if DILIGENT_USE_VOLK
158177 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
159- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndirect() must be called inside render pass (19.3)" );
178+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE,
179+ " vkCmdDrawIndexedIndirectCountKHR() must be called inside render pass "
180+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDrawIndexedIndirectCount-renderpass)" );
160181 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
161182 VERIFY (m_State.IndexBuffer != VK_NULL_HANDLE, " No index buffer bound" );
162183
@@ -212,7 +233,7 @@ class VulkanCommandBuffer
212233 {
213234#if DILIGENT_USE_VOLK
214235 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
215- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDraw () must be called inside render pass (19.3) " );
236+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawMultiEXT () must be called inside render pass" );
216237 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
217238
218239 vkCmdDrawMultiEXT (m_VkCmdBuffer, DrawCount, pVertexInfo, InstanceCount, FirstInstance, sizeof (VkMultiDrawInfoEXT));
@@ -228,7 +249,7 @@ class VulkanCommandBuffer
228249 {
229250#if DILIGENT_USE_VOLK
230251 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
231- VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawIndexed () must be called inside render pass (19.3) " );
252+ VERIFY (m_State.RenderPass != VK_NULL_HANDLE, " vkCmdDrawMultiIndexedEXT () must be called inside render pass" );
232253 VERIFY (m_State.GraphicsPipeline != VK_NULL_HANDLE, " No graphics pipeline bound" );
233254 VERIFY (m_State.IndexBuffer != VK_NULL_HANDLE, " No index buffer bound" );
234255
@@ -244,7 +265,9 @@ class VulkanCommandBuffer
244265 __forceinline void Dispatch (uint32_t GroupCountX, uint32_t GroupCountY, uint32_t GroupCountZ)
245266 {
246267 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
247- VERIFY (m_State.RenderPass == VK_NULL_HANDLE, " vkCmdDispatch() must be called outside of render pass (27)" );
268+ VERIFY (m_State.RenderPass == VK_NULL_HANDLE,
269+ " vkCmdDispatch() must be called outside of render pass "
270+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDispatch-renderpass)" );
248271 VERIFY (m_State.ComputePipeline != VK_NULL_HANDLE, " No compute pipeline bound" );
249272
250273 FlushBarriers ();
@@ -254,7 +277,9 @@ class VulkanCommandBuffer
254277 __forceinline void DispatchIndirect (VkBuffer Buffer, VkDeviceSize Offset)
255278 {
256279 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
257- VERIFY (m_State.RenderPass == VK_NULL_HANDLE, " vkCmdDispatchIndirect() must be called outside of render pass (27)" );
280+ VERIFY (m_State.RenderPass == VK_NULL_HANDLE,
281+ " vkCmdDispatchIndirect() must be called outside of render pass "
282+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdDispatchIndirect-renderpass)" );
258283 VERIFY (m_State.ComputePipeline != VK_NULL_HANDLE, " No compute pipeline bound" );
259284
260285 FlushBarriers ();
@@ -316,7 +341,8 @@ class VulkanCommandBuffer
316341 LOG_ERROR_MESSAGE (" Ending render pass while there are outstanding queries that have been started inside the pass, "
317342 " but have not been ended. Vulkan requires that a query must either begin and end inside the same "
318343 " subpass of a render pass instance, or must both begin and end outside of a render pass "
319- " instance (i.e. contain entire render pass instances). (17.2)" );
344+ " instance (i.e. contain entire render pass instances). "
345+ " (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdEndRenderPass-None-07004)" );
320346 }
321347 }
322348
@@ -562,7 +588,8 @@ class VulkanCommandBuffer
562588 }
563589
564590 // A query must either begin and end inside the same subpass of a render pass instance, or must both
565- // begin and end outside a render pass instance (i.e. contain entire render pass instances) (17.2).
591+ // begin and end outside a render pass instance (i.e. contain entire render pass instances)
592+ // (https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VUID-vkCmdEndRenderPass-None-07004).
566593
567594 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
568595 vkCmdBeginQuery (m_VkCmdBuffer, queryPool, query, flags);
@@ -623,7 +650,7 @@ class VulkanCommandBuffer
623650 VERIFY_EXPR (m_VkCmdBuffer != VK_NULL_HANDLE);
624651 if (m_State.RenderPass != VK_NULL_HANDLE)
625652 {
626- // Copy query results must be performed outside of render pass (17.2) .
653+ // Copy query results must be performed outside of render pass.
627654 EndRenderPass ();
628655 }
629656 FlushBarriers ();
0 commit comments