0
0
mirror of https://github.com/Ishan09811/pine.git synced 2025-04-24 08:55:10 +00:00

Revert "active_state: optimise `Refresh` to use buffer sequencing to avoid …" (#59)

This reverts commit 3a52c988eb7e31c4233ca70d1ac303b538a76677.
This commit is contained in:
Ishan09811 2025-01-16 16:37:08 +05:30 committed by GitHub
parent 38c0d28c81
commit dfa6aab36a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 8 additions and 50 deletions

View File

@ -146,12 +146,10 @@ namespace skyline::gpu::interconnect::maxwell3d {
indexType = ConvertIndexType(engine->indexBuffer.indexSize);
if (quadConversion) {
if (quadConversion)
megaBufferBinding = GenerateQuadConversionIndexBuffer(ctx, engine->indexBuffer.indexSize, *view, firstIndex, elementCount);
quadBufferSequence.SetSequence(quadBufferSequence.GenerateBufferBindingHash(megaBufferBinding));
} else {
else
megaBufferBinding = view->TryMegaBuffer(ctx.executor.cycle, ctx.gpu.megaBufferAllocator, ctx.executor.executionTag);
}
if (megaBufferBinding)
builder.SetIndexBuffer(megaBufferBinding, indexType);
@ -163,22 +161,17 @@ namespace skyline::gpu::interconnect::maxwell3d {
if (*view)
view->GetBuffer()->PopulateReadBarrier(vk::PipelineStageFlagBits::eVertexInput, srcStageMask, dstStageMask);
if (didEstimateSize != estimateSize ||
(elementCount + firstIndex > usedElementCount + usedFirstIndex) ||
quadConversion != usedQuadConversion) {
if (didEstimateSize != estimateSize || (elementCount + firstIndex > usedElementCount + usedFirstIndex) || quadConversion != usedQuadConversion)
return true;
}
// TODO: optimise this to use buffer sequencing to avoid needing to regenerate the quad buffer every time. We can't use as it is rn though because sequences aren't globally unique and may conflict after buffer recreation
if (usedQuadConversion) {
if (!quadBufferSequence.IsValid() || quadBufferSequence.HasChanged()) {
megaBufferBinding = GenerateQuadConversionIndexBuffer(ctx, engine->indexBuffer.indexSize, *view, firstIndex, elementCount);
quadBufferSequence.Update();
quadBufferSequence.SetSequence(quadBufferSequence.GenerateBufferBindingHash(megaBufferBinding));
}
megaBufferBinding = GenerateQuadConversionIndexBuffer(ctx, engine->indexBuffer.indexSize, *view, firstIndex, elementCount);
builder.SetIndexBuffer(megaBufferBinding, indexType);
} else if (megaBufferBinding) {
auto newMegaBufferBinding = view->TryMegaBuffer(ctx.executor.cycle, ctx.gpu.megaBufferAllocator, ctx.executor.executionTag);
if (newMegaBufferBinding != megaBufferBinding) {
if (auto newMegaBufferBinding{view->TryMegaBuffer(ctx.executor.cycle, ctx.gpu.megaBufferAllocator, ctx.executor.executionTag)};
newMegaBufferBinding != megaBufferBinding) {
megaBufferBinding = newMegaBufferBinding;
if (megaBufferBinding)
builder.SetIndexBuffer(megaBufferBinding, indexType);

View File

@ -6,7 +6,6 @@
#include <gpu/buffer_manager.h>
#include "common.h"
#include "pipeline_state.h"
#include "buffer_sequence_tracker.h"
namespace skyline::gpu::interconnect::maxwell3d {
class VertexBufferState : dirty::RefreshableManualDirty, dirty::CachedManualDirty {
@ -52,7 +51,6 @@ namespace skyline::gpu::interconnect::maxwell3d {
u32 usedElementCount{};
u32 usedFirstIndex{};
bool usedQuadConversion{};
BufferSequenceTracker quadBufferSequence;
public:
IndexBufferState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine);

View File

@ -1,33 +0,0 @@
#include <functional>
#include <gpu/buffer_manager.h>
class BufferSequenceTracker {
public:
BufferSequenceTracker() : currentSequence(0), lastKnownSequence(0) {}
bool IsValid() const {
return currentSequence > 0;
}
bool HasChanged() const {
return currentSequence != lastKnownSequence;
}
void Update() {
lastKnownSequence = currentSequence;
}
void SetSequence(size_t sequence) {
currentSequence = sequence;
}
size_t GenerateBufferBindingHash(const skyline::gpu::BufferBinding& binding) {
size_t bufferHash = std::hash<uint64_t>{}(reinterpret_cast<uint64_t>(static_cast<VkBuffer>(binding.buffer)));
size_t offsetHash = std::hash<vk::DeviceSize>{}(binding.offset);
return bufferHash ^ (offsetHash << 1);
}
private:
size_t currentSequence;
size_t lastKnownSequence;
};