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:
parent
38c0d28c81
commit
dfa6aab36a
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user