Merge pull request #2317 from FernandoS27/sync

Implement SyncPoint Register in the GPU.
merge-requests/60/head
bunnei 2019-04-05 23:50:54 +07:00 committed by GitHub
commit 864280fabc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

@ -249,6 +249,10 @@ void Maxwell3D::CallMethod(const GPU::MethodCall& method_call) {
ProcessQueryGet(); ProcessQueryGet();
break; break;
} }
case MAXWELL3D_REG_INDEX(sync_info): {
ProcessSyncPoint();
break;
}
default: default:
break; break;
} }
@ -326,6 +330,14 @@ void Maxwell3D::ProcessQueryGet() {
} }
} }
void Maxwell3D::ProcessSyncPoint() {
const u32 sync_point = regs.sync_info.sync_point.Value();
const u32 increment = regs.sync_info.increment.Value();
const u32 cache_flush = regs.sync_info.unknown.Value();
UNIMPLEMENTED_MSG("Syncpoint Set {}, increment: {}, unk: {}", sync_point, increment,
cache_flush);
}
void Maxwell3D::DrawArrays() { void Maxwell3D::DrawArrays() {
LOG_DEBUG(HW_GPU, "called, topology={}, count={}", static_cast<u32>(regs.draw.topology.Value()), LOG_DEBUG(HW_GPU, "called, topology={}, count={}", static_cast<u32>(regs.draw.topology.Value()),
regs.vertex_buffer.count); regs.vertex_buffer.count);

@ -579,7 +579,17 @@ public:
u32 bind; u32 bind;
} macros; } macros;
INSERT_PADDING_WORDS(0x188); INSERT_PADDING_WORDS(0x69);
struct {
union {
BitField<0, 16, u32> sync_point;
BitField<16, 1, u32> unknown;
BitField<20, 1, u32> increment;
};
} sync_info;
INSERT_PADDING_WORDS(0x11E);
u32 tfb_enabled; u32 tfb_enabled;
@ -1184,6 +1194,9 @@ private:
/// Handles a write to the QUERY_GET register. /// Handles a write to the QUERY_GET register.
void ProcessQueryGet(); void ProcessQueryGet();
/// Handles writes to syncing register.
void ProcessSyncPoint();
/// Handles a write to the CB_DATA[i] register. /// Handles a write to the CB_DATA[i] register.
void ProcessCBData(u32 value); void ProcessCBData(u32 value);
@ -1199,6 +1212,7 @@ private:
"Field " #field_name " has invalid position") "Field " #field_name " has invalid position")
ASSERT_REG_POSITION(macros, 0x45); ASSERT_REG_POSITION(macros, 0x45);
ASSERT_REG_POSITION(sync_info, 0xB2);
ASSERT_REG_POSITION(tfb_enabled, 0x1D1); ASSERT_REG_POSITION(tfb_enabled, 0x1D1);
ASSERT_REG_POSITION(rt, 0x200); ASSERT_REG_POSITION(rt, 0x200);
ASSERT_REG_POSITION(viewport_transform, 0x280); ASSERT_REG_POSITION(viewport_transform, 0x280);