diff options
| author | 2019-07-18 08:54:42 -0400 | |
|---|---|---|
| committer | 2019-07-18 08:54:42 -0400 | |
| commit | 43f57d668c04c7dde05b076919ae5755db0ff0ac (patch) | |
| tree | d8ee8da3c76a0c224786670ff7a6d6cf0e42f80f | |
| parent | MaxwellDMA/KeplerCopy: Downgrade DMA log message to Trace. (diff) | |
| download | yuzu-43f57d668c04c7dde05b076919ae5755db0ff0ac.tar.gz yuzu-43f57d668c04c7dde05b076919ae5755db0ff0ac.tar.xz yuzu-43f57d668c04c7dde05b076919ae5755db0ff0ac.zip | |
GPU: Add missing puller methods.
This adds some missing puller methods. We don't assert them as these are
nop operations for us.
| -rw-r--r-- | src/video_core/gpu.cpp | 20 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 9 |
2 files changed, 15 insertions, 14 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 1b4975498..6cb5fd4e1 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -143,12 +143,12 @@ enum class BufferMethods { | |||
| 143 | NotifyIntr = 0x8, | 143 | NotifyIntr = 0x8, |
| 144 | WrcacheFlush = 0x9, | 144 | WrcacheFlush = 0x9, |
| 145 | Unk28 = 0xA, | 145 | Unk28 = 0xA, |
| 146 | Unk2c = 0xB, | 146 | UnkCacheFlush = 0xB, |
| 147 | RefCnt = 0x14, | 147 | RefCnt = 0x14, |
| 148 | SemaphoreAcquire = 0x1A, | 148 | SemaphoreAcquire = 0x1A, |
| 149 | SemaphoreRelease = 0x1B, | 149 | SemaphoreRelease = 0x1B, |
| 150 | Unk70 = 0x1C, | 150 | FenceValue = 0x1C, |
| 151 | Unk74 = 0x1D, | 151 | FenceAction = 0x1D, |
| 152 | Unk78 = 0x1E, | 152 | Unk78 = 0x1E, |
| 153 | Unk7c = 0x1F, | 153 | Unk7c = 0x1F, |
| 154 | Yield = 0x20, | 154 | Yield = 0x20, |
| @@ -194,6 +194,10 @@ void GPU::CallPullerMethod(const MethodCall& method_call) { | |||
| 194 | case BufferMethods::SemaphoreAddressLow: | 194 | case BufferMethods::SemaphoreAddressLow: |
| 195 | case BufferMethods::SemaphoreSequence: | 195 | case BufferMethods::SemaphoreSequence: |
| 196 | case BufferMethods::RefCnt: | 196 | case BufferMethods::RefCnt: |
| 197 | case BufferMethods::UnkCacheFlush: | ||
| 198 | case BufferMethods::WrcacheFlush: | ||
| 199 | case BufferMethods::FenceValue: | ||
| 200 | case BufferMethods::FenceAction: | ||
| 197 | break; | 201 | break; |
| 198 | case BufferMethods::SemaphoreTrigger: { | 202 | case BufferMethods::SemaphoreTrigger: { |
| 199 | ProcessSemaphoreTriggerMethod(); | 203 | ProcessSemaphoreTriggerMethod(); |
| @@ -204,21 +208,11 @@ void GPU::CallPullerMethod(const MethodCall& method_call) { | |||
| 204 | LOG_ERROR(HW_GPU, "Special puller engine method NotifyIntr not implemented"); | 208 | LOG_ERROR(HW_GPU, "Special puller engine method NotifyIntr not implemented"); |
| 205 | break; | 209 | break; |
| 206 | } | 210 | } |
| 207 | case BufferMethods::WrcacheFlush: { | ||
| 208 | // TODO(Kmather73): Research and implement this method. | ||
| 209 | LOG_ERROR(HW_GPU, "Special puller engine method WrcacheFlush not implemented"); | ||
| 210 | break; | ||
| 211 | } | ||
| 212 | case BufferMethods::Unk28: { | 211 | case BufferMethods::Unk28: { |
| 213 | // TODO(Kmather73): Research and implement this method. | 212 | // TODO(Kmather73): Research and implement this method. |
| 214 | LOG_ERROR(HW_GPU, "Special puller engine method Unk28 not implemented"); | 213 | LOG_ERROR(HW_GPU, "Special puller engine method Unk28 not implemented"); |
| 215 | break; | 214 | break; |
| 216 | } | 215 | } |
| 217 | case BufferMethods::Unk2c: { | ||
| 218 | // TODO(Kmather73): Research and implement this method. | ||
| 219 | LOG_ERROR(HW_GPU, "Special puller engine method Unk2c not implemented"); | ||
| 220 | break; | ||
| 221 | } | ||
| 222 | case BufferMethods::SemaphoreAcquire: { | 216 | case BufferMethods::SemaphoreAcquire: { |
| 223 | ProcessSemaphoreAcquire(); | 217 | ProcessSemaphoreAcquire(); |
| 224 | break; | 218 | break; |
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index fe6628923..5a8b1c74a 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h | |||
| @@ -194,7 +194,12 @@ public: | |||
| 194 | 194 | ||
| 195 | u32 semaphore_acquire; | 195 | u32 semaphore_acquire; |
| 196 | u32 semaphore_release; | 196 | u32 semaphore_release; |
| 197 | INSERT_PADDING_WORDS(0xE4); | 197 | u32 fence_value; |
| 198 | union { | ||
| 199 | BitField<4, 4, u32> operation; | ||
| 200 | BitField<8, 8, u32> id; | ||
| 201 | } fence_action; | ||
| 202 | INSERT_PADDING_WORDS(0xE2); | ||
| 198 | 203 | ||
| 199 | // Puller state | 204 | // Puller state |
| 200 | u32 acquire_mode; | 205 | u32 acquire_mode; |
| @@ -274,6 +279,8 @@ ASSERT_REG_POSITION(semaphore_trigger, 0x7); | |||
| 274 | ASSERT_REG_POSITION(reference_count, 0x14); | 279 | ASSERT_REG_POSITION(reference_count, 0x14); |
| 275 | ASSERT_REG_POSITION(semaphore_acquire, 0x1A); | 280 | ASSERT_REG_POSITION(semaphore_acquire, 0x1A); |
| 276 | ASSERT_REG_POSITION(semaphore_release, 0x1B); | 281 | ASSERT_REG_POSITION(semaphore_release, 0x1B); |
| 282 | ASSERT_REG_POSITION(fence_value, 0x1C); | ||
| 283 | ASSERT_REG_POSITION(fence_action, 0x1D); | ||
| 277 | 284 | ||
| 278 | ASSERT_REG_POSITION(acquire_mode, 0x100); | 285 | ASSERT_REG_POSITION(acquire_mode, 0x100); |
| 279 | ASSERT_REG_POSITION(acquire_source, 0x101); | 286 | ASSERT_REG_POSITION(acquire_source, 0x101); |