Finish off transform feedback implementation

This commit is contained in:
Billy Laws
2022-10-09 14:07:00 +01:00
parent 36fd885b49
commit b72720e8db
5 changed files with 25 additions and 15 deletions

View File

@ -272,9 +272,11 @@ namespace skyline::gpu::interconnect::maxwell3d {
u32 vertexOffset;
u32 firstInstance;
bool indexed;
bool transformFeedbackEnable;
};
auto *drawParams{ctx.executor.allocator->EmplaceUntracked<DrawParams>(DrawParams{stateUpdater,
count, first, instanceCount, vertexOffset, firstInstance, indexed})};
count, first, instanceCount, vertexOffset, firstInstance, indexed,
ctx.gpu.traits.supportsTransformFeedback ? transformFeedbackEnable : false})};
const auto &surfaceClip{clearEngineRegisters.surfaceClip};
vk::Rect2D scissor{
@ -285,11 +287,16 @@ namespace skyline::gpu::interconnect::maxwell3d {
ctx.executor.AddSubpass([drawParams](vk::raii::CommandBuffer &commandBuffer, const std::shared_ptr<FenceCycle> &, GPU &gpu, vk::RenderPass, u32) {
drawParams->stateUpdater.RecordAll(gpu, commandBuffer);
if (drawParams->transformFeedbackEnable)
commandBuffer.beginTransformFeedbackEXT(0, {}, {});
if (drawParams->indexed)
commandBuffer.drawIndexed(drawParams->count, drawParams->instanceCount, drawParams->first, static_cast<i32>(drawParams->vertexOffset), drawParams->firstInstance);
else
commandBuffer.draw(drawParams->count, drawParams->instanceCount, drawParams->first, drawParams->firstInstance);
if (drawParams->transformFeedbackEnable)
commandBuffer.endTransformFeedbackEXT(0, {}, {});
}, scissor, {}, activeState.GetColorAttachments(), activeState.GetDepthAttachment(), !ctx.gpu.traits.quirks.relaxedRenderPassCompatibility);
constantBuffers.ResetQuickBind();

View File

@ -84,6 +84,6 @@ namespace skyline::gpu::interconnect::maxwell3d {
void Clear(engine::ClearSurface &clearSurface);
void Draw(engine::DrawTopology topology, bool indexed, u32 count, u32 first, u32 instanceCount, u32 vertexOffset, u32 firstInstance);
void Draw(engine::DrawTopology topology, bool transformFeedbackEnable, bool indexed, u32 count, u32 first, u32 instanceCount, u32 vertexOffset, u32 firstInstance);
};
}