diff options
| author | 2020-05-05 17:12:42 -0400 | |
|---|---|---|
| committer | 2020-05-05 17:12:42 -0400 | |
| commit | 41682e0888f7cb640787ab8d9a7e5c0ebb83d8fa (patch) | |
| tree | 64c61fda0aaa076cd54c46e8c271e67888c79c61 /src/video_core/gpu.cpp | |
| parent | Merge pull request #3881 from lioncash/mem-warning (diff) | |
| parent | Update src/video_core/gpu.cpp (diff) | |
| download | yuzu-41682e0888f7cb640787ab8d9a7e5c0ebb83d8fa.tar.gz yuzu-41682e0888f7cb640787ab8d9a7e5c0ebb83d8fa.tar.xz yuzu-41682e0888f7cb640787ab8d9a7e5c0ebb83d8fa.zip | |
Merge pull request #3815 from FernandoS27/command-list-2
GPU: More optimizations to GPU Command List Processing and DMA Copy Optimizations
Diffstat (limited to 'src/video_core/gpu.cpp')
| -rw-r--r-- | src/video_core/gpu.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index b87fd873d..8eb017f65 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -299,19 +299,21 @@ void GPU::CallEngineMethod(const MethodCall& method_call) { | |||
| 299 | 299 | ||
| 300 | switch (engine) { | 300 | switch (engine) { |
| 301 | case EngineID::FERMI_TWOD_A: | 301 | case EngineID::FERMI_TWOD_A: |
| 302 | fermi_2d->CallMethod(method_call); | 302 | fermi_2d->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); |
| 303 | break; | 303 | break; |
| 304 | case EngineID::MAXWELL_B: | 304 | case EngineID::MAXWELL_B: |
| 305 | maxwell_3d->CallMethod(method_call); | 305 | maxwell_3d->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); |
| 306 | break; | 306 | break; |
| 307 | case EngineID::KEPLER_COMPUTE_B: | 307 | case EngineID::KEPLER_COMPUTE_B: |
| 308 | kepler_compute->CallMethod(method_call); | 308 | kepler_compute->CallMethod(method_call.method, method_call.argument, |
| 309 | method_call.IsLastCall()); | ||
| 309 | break; | 310 | break; |
| 310 | case EngineID::MAXWELL_DMA_COPY_A: | 311 | case EngineID::MAXWELL_DMA_COPY_A: |
| 311 | maxwell_dma->CallMethod(method_call); | 312 | maxwell_dma->CallMethod(method_call.method, method_call.argument, method_call.IsLastCall()); |
| 312 | break; | 313 | break; |
| 313 | case EngineID::KEPLER_INLINE_TO_MEMORY_B: | 314 | case EngineID::KEPLER_INLINE_TO_MEMORY_B: |
| 314 | kepler_memory->CallMethod(method_call); | 315 | kepler_memory->CallMethod(method_call.method, method_call.argument, |
| 316 | method_call.IsLastCall()); | ||
| 315 | break; | 317 | break; |
| 316 | default: | 318 | default: |
| 317 | UNIMPLEMENTED_MSG("Unimplemented engine"); | 319 | UNIMPLEMENTED_MSG("Unimplemented engine"); |
| @@ -347,7 +349,27 @@ void GPU::ProcessBindMethod(const MethodCall& method_call) { | |||
| 347 | // Bind the current subchannel to the desired engine id. | 349 | // Bind the current subchannel to the desired engine id. |
| 348 | LOG_DEBUG(HW_GPU, "Binding subchannel {} to engine {}", method_call.subchannel, | 350 | LOG_DEBUG(HW_GPU, "Binding subchannel {} to engine {}", method_call.subchannel, |
| 349 | method_call.argument); | 351 | method_call.argument); |
| 350 | bound_engines[method_call.subchannel] = static_cast<EngineID>(method_call.argument); | 352 | const auto engine_id = static_cast<EngineID>(method_call.argument); |
| 353 | bound_engines[method_call.subchannel] = static_cast<EngineID>(engine_id); | ||
| 354 | switch (engine_id) { | ||
| 355 | case EngineID::FERMI_TWOD_A: | ||
| 356 | dma_pusher->BindSubchannel(fermi_2d.get(), method_call.subchannel); | ||
| 357 | break; | ||
| 358 | case EngineID::MAXWELL_B: | ||
| 359 | dma_pusher->BindSubchannel(maxwell_3d.get(), method_call.subchannel); | ||
| 360 | break; | ||
| 361 | case EngineID::KEPLER_COMPUTE_B: | ||
| 362 | dma_pusher->BindSubchannel(kepler_compute.get(), method_call.subchannel); | ||
| 363 | break; | ||
| 364 | case EngineID::MAXWELL_DMA_COPY_A: | ||
| 365 | dma_pusher->BindSubchannel(maxwell_dma.get(), method_call.subchannel); | ||
| 366 | break; | ||
| 367 | case EngineID::KEPLER_INLINE_TO_MEMORY_B: | ||
| 368 | dma_pusher->BindSubchannel(kepler_memory.get(), method_call.subchannel); | ||
| 369 | break; | ||
| 370 | default: | ||
| 371 | UNIMPLEMENTED_MSG("Unimplemented engine {:04X}", static_cast<u32>(engine_id)); | ||
| 372 | } | ||
| 351 | } | 373 | } |
| 352 | 374 | ||
| 353 | void GPU::ProcessSemaphoreTriggerMethod() { | 375 | void GPU::ProcessSemaphoreTriggerMethod() { |