mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-29 14:35:29 +03:00
Implement constant buffer reading
This commit is contained in:
parent
afcfe8a7fa
commit
a9213debc7
@ -24,17 +24,22 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
view.PurgeCaches();
|
view.PurgeCaches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FlushHostCallback() {
|
||||||
|
// TODO: here we should trigger `Execute()`, however that doesn't currently work due to Read being called mid-draw and attached objects not handling this case
|
||||||
|
Logger::Warn("GPU dirty buffer reads for attached buffers are unimplemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConstantBuffer::Read(CommandExecutor &executor, span<u8> dstBuffer, size_t srcOffset) {
|
||||||
|
ContextLock lock{executor.tag, view};
|
||||||
|
view.Read(lock.IsFirstUsage(), FlushHostCallback, dstBuffer, srcOffset);
|
||||||
|
}
|
||||||
|
|
||||||
ConstantBuffers::ConstantBuffers(DirtyManager &manager, const ConstantBufferSelectorState::EngineRegisters &constantBufferSelectorRegisters) : selectorState{manager, constantBufferSelectorRegisters} {}
|
ConstantBuffers::ConstantBuffers(DirtyManager &manager, const ConstantBufferSelectorState::EngineRegisters &constantBufferSelectorRegisters) : selectorState{manager, constantBufferSelectorRegisters} {}
|
||||||
|
|
||||||
void ConstantBuffers::MarkAllDirty() {
|
void ConstantBuffers::MarkAllDirty() {
|
||||||
selectorState.MarkDirty(true);
|
selectorState.MarkDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FlushHostCallback() {
|
|
||||||
// TODO: here we should trigger `Execute()`, however that doesn't currently work due to Read being called mid-draw and attached objects not handling this case
|
|
||||||
Logger::Warn("GPU dirty buffer reads for attached buffers are unimplemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConstantBuffers::Load(InterconnectContext &ctx, span<u32> data, u32 offset) {
|
void ConstantBuffers::Load(InterconnectContext &ctx, span<u32> data, u32 offset) {
|
||||||
auto &view{*selectorState.UpdateGet(ctx).view};
|
auto &view{*selectorState.UpdateGet(ctx).view};
|
||||||
auto srcCpuBuf{data.cast<u8>()};
|
auto srcCpuBuf{data.cast<u8>()};
|
||||||
|
@ -30,10 +30,10 @@ namespace skyline::gpu::interconnect::maxwell3d {
|
|||||||
struct ConstantBuffer {
|
struct ConstantBuffer {
|
||||||
BufferView view;
|
BufferView view;
|
||||||
|
|
||||||
void Read(CommandExecutor &executor, span<u8> dstBuffer, size_t srcOffset) const;
|
void Read(CommandExecutor &executor, span<u8> dstBuffer, size_t srcOffset);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T Read(CommandExecutor &executor, size_t srcOffset) const {
|
T Read(CommandExecutor &executor, size_t srcOffset) {
|
||||||
T object;
|
T object;
|
||||||
Read(executor, span<T>{object}.template cast<u8>(), srcOffset);
|
Read(executor, span<T>{object}.template cast<u8>(), srcOffset);
|
||||||
return object;
|
return object;
|
||||||
|
Loading…
Reference in New Issue
Block a user