vulkan_common: fix indirect draw with count
This commit is contained in:
parent
fda0e7e989
commit
fa8581e900
|
@ -65,6 +65,7 @@
|
||||||
EXTENSION(EXT, SHADER_VIEWPORT_INDEX_LAYER, shader_viewport_index_layer) \
|
EXTENSION(EXT, SHADER_VIEWPORT_INDEX_LAYER, shader_viewport_index_layer) \
|
||||||
EXTENSION(EXT, TOOLING_INFO, tooling_info) \
|
EXTENSION(EXT, TOOLING_INFO, tooling_info) \
|
||||||
EXTENSION(EXT, VERTEX_ATTRIBUTE_DIVISOR, vertex_attribute_divisor) \
|
EXTENSION(EXT, VERTEX_ATTRIBUTE_DIVISOR, vertex_attribute_divisor) \
|
||||||
|
EXTENSION(KHR, DRAW_INDIRECT_COUNT, draw_indirect_count) \
|
||||||
EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \
|
EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \
|
||||||
EXTENSION(KHR, EXTERNAL_MEMORY_FD, external_memory_fd) \
|
EXTENSION(KHR, EXTERNAL_MEMORY_FD, external_memory_fd) \
|
||||||
EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \
|
EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \
|
||||||
|
|
|
@ -96,8 +96,8 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
|
||||||
X(vkCmdDrawIndexed);
|
X(vkCmdDrawIndexed);
|
||||||
X(vkCmdDrawIndirect);
|
X(vkCmdDrawIndirect);
|
||||||
X(vkCmdDrawIndexedIndirect);
|
X(vkCmdDrawIndexedIndirect);
|
||||||
X(vkCmdDrawIndirectCountKHR);
|
X(vkCmdDrawIndirectCount);
|
||||||
X(vkCmdDrawIndexedIndirectCountKHR);
|
X(vkCmdDrawIndexedIndirectCount);
|
||||||
X(vkCmdEndQuery);
|
X(vkCmdEndQuery);
|
||||||
X(vkCmdEndRenderPass);
|
X(vkCmdEndRenderPass);
|
||||||
X(vkCmdEndTransformFeedbackEXT);
|
X(vkCmdEndTransformFeedbackEXT);
|
||||||
|
@ -221,6 +221,12 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
|
||||||
if (!dld.vkResetQueryPool) {
|
if (!dld.vkResetQueryPool) {
|
||||||
Proc(dld.vkResetQueryPool, dld, "vkResetQueryPoolEXT", device);
|
Proc(dld.vkResetQueryPool, dld, "vkResetQueryPoolEXT", device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support for draw indirect with count is optional in Vulkan 1.2
|
||||||
|
if (!dld.vkCmdDrawIndirectCount) {
|
||||||
|
Proc(dld.vkCmdDrawIndirectCount, dld, "vkCmdDrawIndirectCountKHR", device);
|
||||||
|
Proc(dld.vkCmdDrawIndexedIndirectCount, dld, "vkCmdDrawIndexedIndirectCountKHR", device);
|
||||||
|
}
|
||||||
#undef X
|
#undef X
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -215,8 +215,8 @@ struct DeviceDispatch : InstanceDispatch {
|
||||||
PFN_vkCmdDrawIndexed vkCmdDrawIndexed{};
|
PFN_vkCmdDrawIndexed vkCmdDrawIndexed{};
|
||||||
PFN_vkCmdDrawIndirect vkCmdDrawIndirect{};
|
PFN_vkCmdDrawIndirect vkCmdDrawIndirect{};
|
||||||
PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect{};
|
PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect{};
|
||||||
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR{};
|
PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount{};
|
||||||
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR{};
|
PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount{};
|
||||||
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT{};
|
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT{};
|
||||||
PFN_vkCmdEndQuery vkCmdEndQuery{};
|
PFN_vkCmdEndQuery vkCmdEndQuery{};
|
||||||
PFN_vkCmdEndRenderPass vkCmdEndRenderPass{};
|
PFN_vkCmdEndRenderPass vkCmdEndRenderPass{};
|
||||||
|
@ -1065,15 +1065,15 @@ public:
|
||||||
|
|
||||||
void DrawIndirectCount(VkBuffer src_buffer, VkDeviceSize src_offset, VkBuffer count_buffer,
|
void DrawIndirectCount(VkBuffer src_buffer, VkDeviceSize src_offset, VkBuffer count_buffer,
|
||||||
VkDeviceSize count_offset, u32 draw_count, u32 stride) const noexcept {
|
VkDeviceSize count_offset, u32 draw_count, u32 stride) const noexcept {
|
||||||
dld->vkCmdDrawIndirectCountKHR(handle, src_buffer, src_offset, count_buffer, count_offset,
|
dld->vkCmdDrawIndirectCount(handle, src_buffer, src_offset, count_buffer, count_offset,
|
||||||
draw_count, stride);
|
draw_count, stride);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawIndexedIndirectCount(VkBuffer src_buffer, VkDeviceSize src_offset,
|
void DrawIndexedIndirectCount(VkBuffer src_buffer, VkDeviceSize src_offset,
|
||||||
VkBuffer count_buffer, VkDeviceSize count_offset, u32 draw_count,
|
VkBuffer count_buffer, VkDeviceSize count_offset, u32 draw_count,
|
||||||
u32 stride) const noexcept {
|
u32 stride) const noexcept {
|
||||||
dld->vkCmdDrawIndexedIndirectCountKHR(handle, src_buffer, src_offset, count_buffer,
|
dld->vkCmdDrawIndexedIndirectCount(handle, src_buffer, src_offset, count_buffer,
|
||||||
count_offset, draw_count, stride);
|
count_offset, draw_count, stride);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearAttachments(Span<VkClearAttachment> attachments,
|
void ClearAttachments(Span<VkClearAttachment> attachments,
|
||||||
|
|
Reference in New Issue