mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-29 17:45:28 +03:00
Drop engine base class usage from GPFIFO
This class does nothing since we made stopped GPFIFO submits from using virtual functions so it can be dropped.
This commit is contained in:
parent
4378658cbc
commit
8d5463ef28
@ -6,11 +6,7 @@
|
|||||||
|
|
||||||
namespace skyline::soc::gm20b {
|
namespace skyline::soc::gm20b {
|
||||||
ChannelContext::ChannelContext(const DeviceState &state, std::shared_ptr<AddressSpaceContext> asCtx, size_t numEntries) :
|
ChannelContext::ChannelContext(const DeviceState &state, std::shared_ptr<AddressSpaceContext> asCtx, size_t numEntries) :
|
||||||
fermi2D(state),
|
|
||||||
keplerMemory(state),
|
|
||||||
maxwell3D(std::make_unique<engine::maxwell3d::Maxwell3D>(state, *this, executor)),
|
maxwell3D(std::make_unique<engine::maxwell3d::Maxwell3D>(state, *this, executor)),
|
||||||
maxwellCompute(state),
|
|
||||||
maxwellDma(state),
|
|
||||||
gpfifo(state, *this, numEntries),
|
gpfifo(state, *this, numEntries),
|
||||||
executor(state),
|
executor(state),
|
||||||
asCtx(std::move(asCtx)){}
|
asCtx(std::move(asCtx)){}
|
||||||
|
@ -21,11 +21,7 @@ namespace skyline::soc::gm20b {
|
|||||||
struct ChannelContext {
|
struct ChannelContext {
|
||||||
std::shared_ptr<AddressSpaceContext> asCtx;
|
std::shared_ptr<AddressSpaceContext> asCtx;
|
||||||
gpu::interconnect::CommandExecutor executor;
|
gpu::interconnect::CommandExecutor executor;
|
||||||
engine::Engine fermi2D;
|
|
||||||
std::unique_ptr<engine::maxwell3d::Maxwell3D> maxwell3D; //!< TODO: fix this once graphics context is moved into a cpp file
|
std::unique_ptr<engine::maxwell3d::Maxwell3D> maxwell3D; //!< TODO: fix this once graphics context is moved into a cpp file
|
||||||
engine::Engine maxwellCompute;
|
|
||||||
engine::Engine maxwellDma;
|
|
||||||
engine::Engine keplerMemory;
|
|
||||||
ChannelGpfifo gpfifo;
|
ChannelGpfifo gpfifo;
|
||||||
|
|
||||||
ChannelContext(const DeviceState &state, std::shared_ptr<AddressSpaceContext> asCtx, size_t numEntries);
|
ChannelContext(const DeviceState &state, std::shared_ptr<AddressSpaceContext> asCtx, size_t numEntries);
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
#include "gpfifo.h"
|
#include "gpfifo.h"
|
||||||
|
|
||||||
namespace skyline::soc::gm20b::engine {
|
namespace skyline::soc::gm20b::engine {
|
||||||
GPFIFO::GPFIFO(const DeviceState &state, ChannelContext &channelCtx) : Engine(state), channelCtx(channelCtx) {}
|
GPFIFO::GPFIFO(host1x::SyncpointSet &syncpoints, ChannelContext &channelCtx) : syncpoints(syncpoints), channelCtx(channelCtx) {}
|
||||||
|
|
||||||
void GPFIFO::CallMethod(u32 method, u32 argument, bool lastCall) {
|
void GPFIFO::CallMethod(u32 method, u32 argument) {
|
||||||
Logger::Debug("Called method in GPFIFO: 0x{:X} args: 0x{:X}", method, argument);
|
Logger::Debug("Called method in GPFIFO: 0x{:X} args: 0x{:X}", method, argument);
|
||||||
|
|
||||||
registers.raw[method] = argument;
|
registers.raw[method] = argument;
|
||||||
@ -29,12 +29,12 @@ namespace skyline::soc::gm20b::engine {
|
|||||||
if (action.operation == Registers::SyncpointOperation::Incr) {
|
if (action.operation == Registers::SyncpointOperation::Incr) {
|
||||||
Logger::Debug("Increment syncpoint: {}", +action.index);
|
Logger::Debug("Increment syncpoint: {}", +action.index);
|
||||||
channelCtx.executor.Execute();
|
channelCtx.executor.Execute();
|
||||||
state.soc->host1x.syncpoints.at(action.index).Increment();
|
syncpoints.at(action.index).Increment();
|
||||||
} else if (action.operation == Registers::SyncpointOperation::Wait) {
|
} else if (action.operation == Registers::SyncpointOperation::Wait) {
|
||||||
Logger::Debug("Wait syncpoint: {}, thresh: {}", +action.index, registers.syncpoint.payload);
|
Logger::Debug("Wait syncpoint: {}, thresh: {}", +action.index, registers.syncpoint.payload);
|
||||||
|
|
||||||
// Wait forever for another channel to increment
|
// Wait forever for another channel to increment
|
||||||
state.soc->host1x.syncpoints.at(action.index).Wait(registers.syncpoint.payload, std::chrono::steady_clock::duration::max());
|
syncpoints.at(action.index).Wait(registers.syncpoint.payload, std::chrono::steady_clock::duration::max());
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ namespace skyline::soc::gm20b::engine {
|
|||||||
* @brief The GPFIFO engine handles managing macros and semaphores
|
* @brief The GPFIFO engine handles managing macros and semaphores
|
||||||
* @url https://github.com/NVIDIA/open-gpu-doc/blob/ab27fc22db5de0d02a4cabe08e555663b62db4d4/manuals/volta/gv100/dev_pbdma.ref.txt
|
* @url https://github.com/NVIDIA/open-gpu-doc/blob/ab27fc22db5de0d02a4cabe08e555663b62db4d4/manuals/volta/gv100/dev_pbdma.ref.txt
|
||||||
*/
|
*/
|
||||||
class GPFIFO : public Engine {
|
class GPFIFO {
|
||||||
public:
|
public:
|
||||||
static constexpr u32 RegisterCount{0x40}; //!< The number of GPFIFO registers
|
static constexpr u32 RegisterCount{0x40}; //!< The number of GPFIFO registers
|
||||||
|
|
||||||
@ -168,11 +168,12 @@ namespace skyline::soc::gm20b::engine {
|
|||||||
static_assert(sizeof(Registers) == (RegisterCount * sizeof(u32)));
|
static_assert(sizeof(Registers) == (RegisterCount * sizeof(u32)));
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
host1x::SyncpointSet &syncpoints;
|
||||||
ChannelContext &channelCtx;
|
ChannelContext &channelCtx;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GPFIFO(const DeviceState &state, ChannelContext &channelCtx);
|
GPFIFO(host1x::SyncpointSet &syncpoints, ChannelContext &channelCtx);
|
||||||
|
|
||||||
void CallMethod(u32 method, u32 argument, bool lastCall);
|
void CallMethod(u32 method, u32 argument);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace skyline::soc::gm20b {
|
|||||||
|
|
||||||
ChannelGpfifo::ChannelGpfifo(const DeviceState &state, ChannelContext &channelCtx, size_t numEntries) :
|
ChannelGpfifo::ChannelGpfifo(const DeviceState &state, ChannelContext &channelCtx, size_t numEntries) :
|
||||||
state(state),
|
state(state),
|
||||||
gpfifoEngine(state, channelCtx),
|
gpfifoEngine(state.soc->host1x.syncpoints, channelCtx),
|
||||||
channelCtx(channelCtx),
|
channelCtx(channelCtx),
|
||||||
gpEntries(numEntries),
|
gpEntries(numEntries),
|
||||||
thread(std::thread(&ChannelGpfifo::Run, this)) {}
|
thread(std::thread(&ChannelGpfifo::Run, this)) {}
|
||||||
@ -76,7 +76,7 @@ namespace skyline::soc::gm20b {
|
|||||||
Logger::Debug("Called GPU method - method: 0x{:X} argument: 0x{:X} subchannel: 0x{:X} last: {}", method, argument, subChannel, lastCall);
|
Logger::Debug("Called GPU method - method: 0x{:X} argument: 0x{:X} subchannel: 0x{:X} last: {}", method, argument, subChannel, lastCall);
|
||||||
|
|
||||||
if (method < engine::GPFIFO::RegisterCount) {
|
if (method < engine::GPFIFO::RegisterCount) {
|
||||||
gpfifoEngine.CallMethod(method, argument, lastCall);
|
gpfifoEngine.CallMethod(method, argument);
|
||||||
} else {
|
} else {
|
||||||
switch (subChannel) {
|
switch (subChannel) {
|
||||||
case ThreeDSubChannel:
|
case ThreeDSubChannel:
|
||||||
|
Loading…
Reference in New Issue
Block a user