[vulkan, rasterizer] Filling missing byte count handling when TFB is not available

This commit is contained in:
CamilleLaVey 2026-02-16 00:34:08 -04:00 committed by crueter
parent 7b84247964
commit b4ea751a2c
2 changed files with 13 additions and 8 deletions

View file

@ -354,11 +354,18 @@ void RasterizerVulkan::DrawIndirect() {
const auto& buffer = indirect_buffer.first; const auto& buffer = indirect_buffer.first;
const auto& offset = indirect_buffer.second; const auto& offset = indirect_buffer.second;
if (params.is_byte_count) { if (params.is_byte_count) {
scheduler.Record([buffer_obj = buffer->Handle(), offset, if (!device.IsExtTransformFeedbackSupported()) {
stride = params.stride](vk::CommandBuffer cmdbuf) { scheduler.Record([buffer_obj = buffer->Handle(), offset,
cmdbuf.DrawIndirectByteCountEXT(1, 0, buffer_obj, offset, 0, stride = params.stride](vk::CommandBuffer cmdbuf) {
static_cast<u32>(stride)); cmdbuf.DrawIndirect(buffer_obj, offset, 1, static_cast<u32>(stride));
}); });
} else {
scheduler.Record([buffer_obj = buffer->Handle(), offset,
stride = params.stride](vk::CommandBuffer cmdbuf) {
cmdbuf.DrawIndirectByteCountEXT(1, 0, buffer_obj, offset, 0,
static_cast<u32>(stride));
});
}
return; return;
} }
if (params.include_count) { if (params.include_count) {

View file

@ -542,12 +542,10 @@ public:
return extensions.transform_feedback; return extensions.transform_feedback;
} }
/// Returns true if the device supports VK_EXT_transform_feedback.
bool AreTransformFeedbackGeometryStreamsSupported() const { bool AreTransformFeedbackGeometryStreamsSupported() const {
return features.transform_feedback.geometryStreams; return features.transform_feedback.geometryStreams;
} }
/// Returns true if transform feedback preserves provoking vertex.
bool IsTransformFeedbackProvokingVertexPreserved() const { bool IsTransformFeedbackProvokingVertexPreserved() const {
return features.provoking_vertex.transformFeedbackPreservesProvokingVertex; return features.provoking_vertex.transformFeedbackPreservesProvokingVertex;
} }
@ -714,7 +712,7 @@ public:
return has_renderdoc || has_nsight_graphics || has_radeon_gpu_profiler; return has_renderdoc || has_nsight_graphics || has_radeon_gpu_profiler;
} }
/// @returns True if compute pipelines can cause crashing. /// Returns true if compute pipelines can cause crashing.
bool HasBrokenCompute() const { bool HasBrokenCompute() const {
return has_broken_compute; return has_broken_compute;
} }