maxwell3d: full HLE for multi-layer clears

This commit is contained in:
Liam 2022-11-16 22:41:40 -05:00
parent ece0c1095d
commit 4c42655a2d
8 changed files with 17 additions and 24 deletions

View file

@ -232,7 +232,7 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume
use_topology_override = true;
return;
case MAXWELL3D_REG_INDEX(clear_surface):
return ProcessClearBuffers();
return ProcessClearBuffers(1);
case MAXWELL3D_REG_INDEX(report_semaphore.query):
return ProcessQueryGet();
case MAXWELL3D_REG_INDEX(render_enable.mode):
@ -596,8 +596,8 @@ u32 Maxwell3D::GetRegisterValue(u32 method) const {
return regs.reg_array[method];
}
void Maxwell3D::ProcessClearBuffers() {
rasterizer->Clear();
void Maxwell3D::ProcessClearBuffers(u32 layer_count) {
rasterizer->Clear(layer_count);
}
void Maxwell3D::ProcessDraw(u32 instance_count) {

View file

@ -1129,7 +1129,6 @@ public:
Tegra::RenderTargetFormat format;
TileMode tile_mode;
union {
u32 depth_volume;
BitField<0, 16, u32> depth;
BitField<16, 1, u32> volume;
};
@ -3087,6 +3086,9 @@ public:
std::vector<u8> inline_index_draw_indexes;
/// Handles a write to the CLEAR_BUFFERS register.
void ProcessClearBuffers(u32 layer_count);
private:
void InitializeRegisterDefaults();
@ -3121,9 +3123,6 @@ private:
/// Handles firmware blob 4
void ProcessFirmwareCall4();
/// Handles a write to the CLEAR_BUFFERS register.
void ProcessClearBuffers();
/// Handles a write to the QUERY_GET register.
void ProcessQueryGet();