Skip to content

Commit a8656fe

Browse files
Add support for uncompressed trace files
1 parent 91777dc commit a8656fe

3 files changed

Lines changed: 25 additions & 2 deletions

File tree

scripts/util.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,7 @@ def save_add_tracking(name):
12791279
z.do('add->object_type = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR;')
12801280
z.do('DLOG2("insert %s into %s index %%u at call=%%d", (unsigned)add->index, (int)writer.current.call);' % (type, name))
12811281
z.do('add->enter_created();')
1282+
z.do('add->self_test();')
12821283
z.do('writer.write_handle(add);')
12831284
z.brace_end()
12841285
z.do('else')

src/filereader.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ void file_reader::init(int fd, size_t uncompressed_size, size_t uncompressed_tar
3131
const uint8_t version = (uint8_t)compressed_data[0];
3232
assert(version == 1);
3333
compression_algorithm = compressed_data[1];
34-
assert(compression_algorithm == LAVATUBE_COMPRESSION_DENSITY || compression_algorithm == LAVATUBE_COMPRESSION_LZ4);
34+
assert(compression_algorithm == LAVATUBE_COMPRESSION_DENSITY || compression_algorithm == LAVATUBE_COMPRESSION_LZ4 || compression_algorithm == LAVATUBE_COMPRESSION_UNCOMPRESSED);
35+
const size_t header_bytes = strlen(magic_word) + 32;
36+
assert(total_left >= header_bytes);
3537
compressed_data += 32; // the rest is reserved space
38+
total_left -= header_bytes;
3639
(void)version;
3740
(void)compression_algorithm;
3841
}
@@ -109,12 +112,17 @@ void file_reader::decompress_chunk()
109112
density_processing_result result = density_decompress((const uint8_t*)compressed_data, compressed_size, destination, estimated_size);
110113
if (result.state != DENSITY_STATE_OK) ABORT("Failed to decompress infile - aborting");
111114
}
112-
else // LZ4
115+
else if (compression_algorithm == LAVATUBE_COMPRESSION_LZ4)
113116
{
114117
int result = LZ4_decompress_safe(compressed_data, (char*)destination, compressed_size, uncompressed_size);
115118
if (result < 0) ABORT("Failed to decompress infile - aborting read thread");
116119
if ((uint64_t)result != uncompressed_size) ABORT("Failed to decompress the full chunk in infile - aborting read thread");
117120
}
121+
else // uncompressed
122+
{
123+
assert(compression_algorithm == LAVATUBE_COMPRESSION_UNCOMPRESSED);
124+
memcpy(destination, compressed_data, uncompressed_size);
125+
}
118126
compressed_data += compressed_size;
119127
write_position += uncompressed_size;
120128
total_left -= compressed_size + header_size;

src/filewriter.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ buffer file_writer::compress_chunk(buffer& uncompressed)
212212
uint64_t compressed_size = 0;
213213
uint64_t was_written = 0;
214214
uint64_t was_read = 0;
215+
215216
if (p__compression_type == LAVATUBE_COMPRESSION_DENSITY)
216217
{
217218
compressed_size = density_compress_safe_size(uncompressed.size()) + header_size;
@@ -220,7 +221,14 @@ buffer file_writer::compress_chunk(buffer& uncompressed)
220221
{
221222
compressed_size = LZ4_COMPRESSBOUND(uncompressed.size()) + header_size;
222223
}
224+
else if (p__compression_type == LAVATUBE_COMPRESSION_UNCOMPRESSED)
225+
{
226+
compressed_size = uncompressed.size() + header_size;
227+
}
228+
else ABORT("Bad compression type: %d", (int)p__compression_type);
229+
223230
buffer compressed(compressed_size);
231+
224232
if (p__compression_type == LAVATUBE_COMPRESSION_DENSITY)
225233
{
226234
density_processing_result result = density_compress((const uint8_t *)uncompressed.data(), uncompressed.size(),
@@ -240,6 +248,12 @@ buffer file_writer::compress_chunk(buffer& uncompressed)
240248
was_written = result;
241249
was_read = uncompressed.size();
242250
}
251+
else // uncompressed
252+
{
253+
memcpy(compressed.data() + header_size, uncompressed.data(), uncompressed.size());
254+
was_written = compressed.size();
255+
was_read = uncompressed.size();
256+
}
243257
uncompressed.release();
244258
uint64_t header[2] = { was_written, was_read }; // store compressed and uncompressed sizes
245259
memcpy(compressed.data(), header, header_size); // use memcpy to avoid aliasing issues

0 commit comments

Comments
 (0)