mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-28 10:05:29 +03:00
Revert "Implement support for GPU-side constant buffer updating"
This reverts commit d79635772f
.
This commit is contained in:
parent
7bf3580031
commit
5c3559e888
@ -45,7 +45,7 @@ namespace skyline::gpu {
|
||||
}
|
||||
|
||||
void Buffer::MarkGpuDirty() {
|
||||
if (dirtyState == DirtyState::GpuDirty || !guest) {
|
||||
if (dirtyState == DirtyState::GpuDirty || !guest)
|
||||
return;
|
||||
gpu.state.nce->RetrapRegions(*trapHandle, false);
|
||||
dirtyState = DirtyState::GpuDirty;
|
||||
@ -145,10 +145,10 @@ namespace skyline::gpu {
|
||||
std::memcpy(data.data(), backing.data() + offset, data.size());
|
||||
}
|
||||
|
||||
void Buffer::Write(span<u8> data, vk::DeviceSize offset, bool skipCleanHostWrite) {
|
||||
void Buffer::Write(span<u8> data, vk::DeviceSize offset) {
|
||||
if (dirtyState == DirtyState::CpuDirty || dirtyState == DirtyState::Clean)
|
||||
std::memcpy(mirror.data() + offset, data.data(), data.size());
|
||||
if ((!skipCleanHostWrite && dirtyState == DirtyState::Clean) || dirtyState == DirtyState::GpuDirty)
|
||||
if (dirtyState == DirtyState::GpuDirty || dirtyState == DirtyState::Clean)
|
||||
std::memcpy(backing.data() + offset, data.data(), data.size());
|
||||
}
|
||||
|
||||
@ -234,7 +234,7 @@ namespace skyline::gpu {
|
||||
bufferDelegate->buffer->Read(data, offset + bufferDelegate->view->offset);
|
||||
}
|
||||
|
||||
void BufferView::Write(span<u8> data, vk::DeviceSize offset, bool skipCleanHostWrite) const {
|
||||
bufferDelegate->buffer->Write(data, offset + bufferDelegate->view->offset, skipCleanHostWrite);
|
||||
void BufferView::Write(span<u8> data, vk::DeviceSize offset) const {
|
||||
bufferDelegate->buffer->Write(data, offset + bufferDelegate->view->offset);
|
||||
}
|
||||
}
|
||||
|
@ -171,9 +171,8 @@ namespace skyline::gpu {
|
||||
|
||||
/**
|
||||
* @brief Writes data at the specified offset in the buffer
|
||||
* @param skipCleanHostWrite Skip writing to the host buffer if it's clean, assumes the buffer data will be synchronised externally
|
||||
*/
|
||||
void Write(span<u8> data, vk::DeviceSize offset, bool skipCleanHostWrite = false);
|
||||
void Write(span<u8> data, vk::DeviceSize offset);
|
||||
|
||||
/**
|
||||
* @return A cached or newly created view into this buffer with the supplied attributes
|
||||
@ -251,8 +250,7 @@ namespace skyline::gpu {
|
||||
/**
|
||||
* @brief Writes data at the specified offset in the view
|
||||
* @note The view **must** be locked prior to calling this
|
||||
* @param skipCleanHostWrite Skip writing to the host buffer if it's clean, assumes the buffer data will be synchronised externally
|
||||
*/
|
||||
void Write(span<u8> data, vk::DeviceSize offset, bool skipCleanHostWrite = false) const;
|
||||
void Write(span<u8> data, vk::DeviceSize offset) const;
|
||||
};
|
||||
}
|
||||
|
@ -631,7 +631,7 @@ namespace skyline::gpu::interconnect {
|
||||
template<typename T>
|
||||
void Write(span<T> buf, size_t offset) {
|
||||
std::scoped_lock lock{view};
|
||||
view.Write(buf.template cast<u8>(), offset, true);
|
||||
view.Write(buf.template cast<u8>(), offset);
|
||||
}
|
||||
};
|
||||
ConstantBuffer constantBufferSelector; //!< The constant buffer selector is used to bind a constant buffer to a stage or update data in it
|
||||
@ -700,11 +700,6 @@ namespace skyline::gpu::interconnect {
|
||||
if (!view) {
|
||||
auto mappings{channelCtx.asCtx->gmmu.TranslateRange(constantBufferSelector.iova, constantBufferSelector.size)};
|
||||
view = gpu.buffer.FindOrCreate(mappings.front(), executor.cycle);
|
||||
{
|
||||
std::scoped_lock lock{*view};
|
||||
view->bufferDelegate->buffer->SynchronizeHost(false);
|
||||
}
|
||||
|
||||
constantBufferCache.Insert(constantBufferSelector.size, constantBufferSelector.iova, *view);
|
||||
}
|
||||
|
||||
@ -715,11 +710,6 @@ namespace skyline::gpu::interconnect {
|
||||
void ConstantBufferUpdate(std::vector<u32> data, u32 offset) {
|
||||
auto constantBuffer{GetConstantBufferSelector().value()};
|
||||
constantBuffer.Write<u32>(data, offset);
|
||||
|
||||
executor.AddOutsideRpCommand([constantBufferView = constantBuffer.view, data = std::move(data), offset](vk::raii::CommandBuffer &commandBuffer, const std::shared_ptr<FenceCycle> &cycle, GPU &) {
|
||||
std::scoped_lock lock{constantBufferView};
|
||||
commandBuffer.updateBuffer<u32>(constantBufferView->buffer->GetBacking(), constantBufferView->view->offset + offset, vk::ArrayProxy(static_cast<u32>(data.size()), data.data()));
|
||||
});
|
||||
}
|
||||
|
||||
/* Shader Program */
|
||||
|
Loading…
Reference in New Issue
Block a user