diff --git a/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp b/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp index ebedce9e3d..4c2b73b8b2 100644 --- a/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp +++ b/rpcs3/Emu/RSX/NV47/FW/draw_call.cpp @@ -19,7 +19,7 @@ namespace rsx ar(draw_command_ranges, draw_command_barriers, current_range_index, primitive, command, is_immediate_draw, is_disjoint_primitive, primitive_barrier_enable, inline_vertex_array); } - void draw_clause::insert_command_barrier(command_barrier_type type, u32 arg, u32 index) + void draw_clause::insert_command_barrier(command_barrier_type type, u32 arg0, u32 arg1, u32 index) { ensure(!draw_command_ranges.empty()); @@ -49,7 +49,16 @@ namespace rsx const auto& last = draw_command_ranges[current_range_index]; const auto address = last.first + last.count; - _do_barrier_insert({ current_range_index, 0, address, index, arg, 0, type }); + _do_barrier_insert({ + .draw_id = current_range_index, + .timestamp = 0, + .address = address, + .index = index, + .arg0 = arg0, + .arg1 = arg1, + .flags = 0, + .type = type + }); } else { @@ -64,7 +73,17 @@ namespace rsx current_range_index = draw_command_ranges.size() - 1; } - _do_barrier_insert({ current_range_index, rsx::get_shared_tag(), ~0u, index, arg, 0, type }); + _do_barrier_insert({ + .draw_id = current_range_index, + .timestamp = rsx::get_shared_tag(), + .address = ~0u, + .index = index, + .arg0 = arg0, + .arg1 = arg1, + .flags = 0, + .type = type + }); + last_execution_barrier_index = current_range_index; } } @@ -99,28 +118,28 @@ namespace rsx break; case index_base_modifier_barrier: // Change index base offset - REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_BASE_INDEX, barrier.arg); + REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_BASE_INDEX, barrier.arg0); result |= index_base_changed; break; case vertex_base_modifier_barrier: // Change vertex base offset - REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_BASE_OFFSET, barrier.arg); + REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_BASE_OFFSET, barrier.arg0); result |= vertex_base_changed; break; case vertex_array_offset_modifier_barrier: // Change vertex array offset - REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + barrier.index, barrier.arg); + REGS(ctx)->decode(NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + barrier.index, barrier.arg0); result |= vertex_arrays_changed; break; case transform_constant_load_modifier_barrier: // Change the transform load target. Does not change result mask. - REGS(ctx)->decode(NV4097_SET_TRANSFORM_PROGRAM_LOAD, barrier.arg); + REGS(ctx)->decode(NV4097_SET_TRANSFORM_PROGRAM_LOAD, barrier.arg0); break; case transform_constant_update_barrier: // Update transform constants // REGS(ctx)->decode(NV4097_SET_TRANSFORM_CONSTANT + barrier.index, barrier.arg); // This statement technically does the right thing but has no consequence other than wasting perf. // FIXME: Batching - nv4097::set_transform_constant::decode_one(ctx, NV4097_SET_TRANSFORM_CONSTANT + barrier.index, barrier.arg); + nv4097::set_transform_constant::decode_one(ctx, NV4097_SET_TRANSFORM_CONSTANT + barrier.index, barrier.arg0); result |= transform_constants_changed; break; default: diff --git a/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp b/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp index 8ce2e5973c..323504ac91 100644 --- a/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp +++ b/rpcs3/Emu/RSX/NV47/FW/draw_call.hpp @@ -64,7 +64,7 @@ namespace rsx void operator()(utils::serial& ar); - void insert_command_barrier(command_barrier_type type, u32 arg, u32 register_index = 0); + void insert_command_barrier(command_barrier_type type, u32 arg0, u32 arg1 = 0, u32 register_index = 0); /** * Optimize commands for rendering diff --git a/rpcs3/Emu/RSX/NV47/FW/draw_call.inc.h b/rpcs3/Emu/RSX/NV47/FW/draw_call.inc.h index 2d29553ece..9332a21c11 100644 --- a/rpcs3/Emu/RSX/NV47/FW/draw_call.inc.h +++ b/rpcs3/Emu/RSX/NV47/FW/draw_call.inc.h @@ -43,7 +43,8 @@ namespace rsx u32 address; u32 index; - u32 arg; + u32 arg0; + u32 arg1; u32 flags; command_barrier_type type; diff --git a/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp b/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp index 6290f0dd5b..e31450bec2 100644 --- a/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp +++ b/rpcs3/Emu/RSX/NV47/HW/nv4097.cpp @@ -38,6 +38,7 @@ namespace rsx REGS(ctx)->current_draw_clause.insert_command_barrier( rsx::transform_constant_update_barrier, arg, + 0, reg - NV4097_SET_TRANSFORM_CONSTANT ); return;