Browse Source

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

camillelavey-patch-1
CamilleLaVey 3 weeks ago
committed by crueter
parent
commit
b4ea751a2c
  1. 17
      src/video_core/renderer_vulkan/vk_rasterizer.cpp
  2. 4
      src/video_core/vulkan_common/vulkan_device.h

17
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@ -354,11 +354,18 @@ void RasterizerVulkan::DrawIndirect() {
const auto& buffer = indirect_buffer.first;
const auto& offset = indirect_buffer.second;
if (params.is_byte_count) {
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));
});
if (!device.IsExtTransformFeedbackSupported()) {
scheduler.Record([buffer_obj = buffer->Handle(), offset,
stride = params.stride](vk::CommandBuffer cmdbuf) {
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;
}
if (params.include_count) {

4
src/video_core/vulkan_common/vulkan_device.h

@ -542,12 +542,10 @@ public:
return extensions.transform_feedback;
}
/// Returns true if the device supports VK_EXT_transform_feedback.
bool AreTransformFeedbackGeometryStreamsSupported() const {
return features.transform_feedback.geometryStreams;
}
/// Returns true if transform feedback preserves provoking vertex.
bool IsTransformFeedbackProvokingVertexPreserved() const {
return features.provoking_vertex.transformFeedbackPreservesProvokingVertex;
}
@ -714,7 +712,7 @@ public:
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 {
return has_broken_compute;
}

Loading…
Cancel
Save