summaryrefslogtreecommitdiff
path: root/src/core/tracer/recorder.cpp
diff options
context:
space:
mode:
authorGravatar Tony Wasserka2015-05-21 02:51:28 +0200
committerGravatar Tony Wasserka2015-07-13 22:27:21 +0200
commitfd62580985b2f2d8f65b940148211bedc8d08404 (patch)
treeb1a8c80d442ee654b63233f60c1ae1c70048e982 /src/core/tracer/recorder.cpp
parentClean up command_processor.cpp. (diff)
downloadyuzu-fd62580985b2f2d8f65b940148211bedc8d08404.tar.gz
yuzu-fd62580985b2f2d8f65b940148211bedc8d08404.tar.xz
yuzu-fd62580985b2f2d8f65b940148211bedc8d08404.zip
CiTrace: Record default vertex attributes.
Diffstat (limited to 'src/core/tracer/recorder.cpp')
-rw-r--r--src/core/tracer/recorder.cpp70
1 files changed, 39 insertions, 31 deletions
diff --git a/src/core/tracer/recorder.cpp b/src/core/tracer/recorder.cpp
index 73ebdd388..c5251634b 100644
--- a/src/core/tracer/recorder.cpp
+++ b/src/core/tracer/recorder.cpp
@@ -12,18 +12,20 @@
12 12
13namespace CiTrace { 13namespace CiTrace {
14 14
15Recorder::Recorder(u32* gpu_registers, u32 gpu_registers_size, 15Recorder::Recorder(u32* gpu_registers, u32 gpu_registers_size,
16 u32* lcd_registers, u32 lcd_registers_size, 16 u32* lcd_registers, u32 lcd_registers_size,
17 u32* pica_registers, u32 pica_registers_size, 17 u32* pica_registers, u32 pica_registers_size,
18 u32* vs_program_binary, u32 vs_program_binary_size, 18 u32* default_attributes, u32 default_attributes_size,
19 u32* vs_swizzle_data, u32 vs_swizzle_data_size, 19 u32* vs_program_binary, u32 vs_program_binary_size,
20 u32* vs_float_uniforms, u32 vs_float_uniforms_size, 20 u32* vs_swizzle_data, u32 vs_swizzle_data_size,
21 u32* gs_program_binary, u32 gs_program_binary_size, 21 u32* vs_float_uniforms, u32 vs_float_uniforms_size,
22 u32* gs_swizzle_data, u32 gs_swizzle_data_size, 22 u32* gs_program_binary, u32 gs_program_binary_size,
23 u32* gs_float_uniforms, u32 gs_float_uniforms_size) 23 u32* gs_swizzle_data, u32 gs_swizzle_data_size,
24 u32* gs_float_uniforms, u32 gs_float_uniforms_size)
24 : gpu_registers(gpu_registers, gpu_registers + gpu_registers_size), 25 : gpu_registers(gpu_registers, gpu_registers + gpu_registers_size),
25 lcd_registers(lcd_registers, lcd_registers + lcd_registers_size), 26 lcd_registers(lcd_registers, lcd_registers + lcd_registers_size),
26 pica_registers(pica_registers, pica_registers + pica_registers_size), 27 pica_registers(pica_registers, pica_registers + pica_registers_size),
28 default_attributes(default_attributes, default_attributes + default_attributes_size),
27 vs_program_binary(vs_program_binary, vs_program_binary + vs_program_binary_size), 29 vs_program_binary(vs_program_binary, vs_program_binary + vs_program_binary_size),
28 vs_swizzle_data(vs_swizzle_data, vs_swizzle_data + vs_swizzle_data_size), 30 vs_swizzle_data(vs_swizzle_data, vs_swizzle_data + vs_swizzle_data_size),
29 vs_float_uniforms(vs_float_uniforms, vs_float_uniforms + vs_float_uniforms_size), 31 vs_float_uniforms(vs_float_uniforms, vs_float_uniforms + vs_float_uniforms_size),
@@ -43,27 +45,29 @@ void Recorder::Finish(const std::string& filename) {
43 // Calculate file offsets 45 // Calculate file offsets
44 auto& initial = header.initial_state_offsets; 46 auto& initial = header.initial_state_offsets;
45 47
46 initial.gpu_registers_size = gpu_registers.size(); 48 initial.gpu_registers_size = gpu_registers.size();
47 initial.lcd_registers_size = lcd_registers.size(); 49 initial.lcd_registers_size = lcd_registers.size();
48 initial.pica_registers_size = pica_registers.size(); 50 initial.pica_registers_size = pica_registers.size();
49 initial.vs_program_binary_size = vs_program_binary.size(); 51 initial.default_attributes_size = default_attributes.size();
50 initial.vs_swizzle_data_size = vs_swizzle_data.size(); 52 initial.vs_program_binary_size = vs_program_binary.size();
51 initial.vs_float_uniforms_size = vs_float_uniforms.size(); 53 initial.vs_swizzle_data_size = vs_swizzle_data.size();
52 initial.gs_program_binary_size = gs_program_binary.size(); 54 initial.vs_float_uniforms_size = vs_float_uniforms.size();
53 initial.gs_swizzle_data_size = gs_swizzle_data.size(); 55 initial.gs_program_binary_size = gs_program_binary.size();
54 initial.gs_float_uniforms_size = gs_float_uniforms.size(); 56 initial.gs_swizzle_data_size = gs_swizzle_data.size();
55 header.stream_size = stream.size(); 57 initial.gs_float_uniforms_size = gs_float_uniforms.size();
56 58 header.stream_size = stream.size();
57 initial.gpu_registers = sizeof(header); 59
58 initial.lcd_registers = initial.gpu_registers + initial.gpu_registers_size * sizeof(u32); 60 initial.gpu_registers = sizeof(header);
59 initial.pica_registers = initial.lcd_registers + initial.lcd_registers_size * sizeof(u32);; 61 initial.lcd_registers = initial.gpu_registers + initial.gpu_registers_size * sizeof(u32);
60 initial.vs_program_binary = initial.pica_registers + initial.pica_registers_size * sizeof(u32); 62 initial.pica_registers = initial.lcd_registers + initial.lcd_registers_size * sizeof(u32);;
61 initial.vs_swizzle_data = initial.vs_program_binary + initial.vs_program_binary_size * sizeof(u32); 63 initial.default_attributes = initial.pica_registers + initial.pica_registers_size * sizeof(u32);
62 initial.vs_float_uniforms = initial.vs_swizzle_data + initial.vs_swizzle_data_size * sizeof(u32); 64 initial.vs_program_binary = initial.default_attributes + initial.default_attributes_size * sizeof(u32);
63 initial.gs_program_binary = initial.vs_float_uniforms + initial.vs_float_uniforms_size * sizeof(u32); 65 initial.vs_swizzle_data = initial.vs_program_binary + initial.vs_program_binary_size * sizeof(u32);
64 initial.gs_swizzle_data = initial.gs_program_binary + initial.gs_program_binary_size * sizeof(u32); 66 initial.vs_float_uniforms = initial.vs_swizzle_data + initial.vs_swizzle_data_size * sizeof(u32);
65 initial.gs_float_uniforms = initial.gs_swizzle_data + initial.gs_swizzle_data_size * sizeof(u32); 67 initial.gs_program_binary = initial.vs_float_uniforms + initial.vs_float_uniforms_size * sizeof(u32);
66 header.stream_offset = initial.gs_float_uniforms + initial.gs_float_uniforms_size * sizeof(u32); 68 initial.gs_swizzle_data = initial.gs_program_binary + initial.gs_program_binary_size * sizeof(u32);
69 initial.gs_float_uniforms = initial.gs_swizzle_data + initial.gs_swizzle_data_size * sizeof(u32);
70 header.stream_offset = initial.gs_float_uniforms + initial.gs_float_uniforms_size * sizeof(u32);
67 71
68 // Iterate through stream elements, update relevant stream element data 72 // Iterate through stream elements, update relevant stream element data
69 for (auto& stream_element : stream) { 73 for (auto& stream_element : stream) {
@@ -103,9 +107,13 @@ void Recorder::Finish(const std::string& filename) {
103 throw "Failed to write LCD registers"; 107 throw "Failed to write LCD registers";
104 108
105 written = file.WriteArray(pica_registers.data(), pica_registers.size()); 109 written = file.WriteArray(pica_registers.data(), pica_registers.size());
106 if (written != pica_registers.size() || file.Tell() != initial.vs_program_binary) 110 if (written != pica_registers.size() || file.Tell() != initial.default_attributes)
107 throw "Failed to write Pica registers"; 111 throw "Failed to write Pica registers";
108 112
113 written = file.WriteArray(default_attributes.data(), default_attributes.size());
114 if (written != default_attributes.size() || file.Tell() != initial.vs_program_binary)
115 throw "Failed to write default vertex attributes";
116
109 written = file.WriteArray(vs_program_binary.data(), vs_program_binary.size()); 117 written = file.WriteArray(vs_program_binary.data(), vs_program_binary.size());
110 if (written != vs_program_binary.size() || file.Tell() != initial.vs_swizzle_data) 118 if (written != vs_program_binary.size() || file.Tell() != initial.vs_swizzle_data)
111 throw "Failed to write vertex shader program binary"; 119 throw "Failed to write vertex shader program binary";