diff --git a/src/msf/msf_parse.c b/src/msf/msf_parse.c index 6fcd65fe..02912ab7 100644 --- a/src/msf/msf_parse.c +++ b/src/msf/msf_parse.c @@ -230,6 +230,7 @@ msf_raw_stream_table_from_data(Arena *arena, String8 msf_data) internal String8 msf_data_from_stream_number(Arena *arena, String8 msf_data, MSF_RawStreamTable *st, MSF_StreamNumber sn) { + ProfBeginFunction(); String8 result = {0}; if(sn < st->stream_count) { @@ -268,6 +269,7 @@ msf_data_from_stream_number(Arena *arena, String8 msf_data, MSF_RawStreamTable * result = str8(stream_buf, copy_size); } + ProfEnd(); return result; } diff --git a/src/rdi_from_pdb/rdi_from_pdb_2.c b/src/rdi_from_pdb/rdi_from_pdb_2.c index 66a9b045..9071fc53 100644 --- a/src/rdi_from_pdb/rdi_from_pdb_2.c +++ b/src/rdi_from_pdb/rdi_from_pdb_2.c @@ -9,16 +9,40 @@ p2r2_convert_thread_entry_point(void *p) lane_ctx(params->lane_ctx); ThreadNameF("p2r2_convert_thread_%I64u", lane_idx()); + ////////////////////////////////////////////////////////////// + //- rjf: do base MSF parse + // + { + // rjf: setup output buckets + if(lane_idx() == 0) + { + p2r2_shared = push_array(arena, P2R2_Shared, 1); + p2r2_shared->msf_raw_stream_table = msf_raw_stream_table_from_data(arena, params->input_pdb_data); + p2r2_shared->msf = push_array(arena, MSF_Parsed, 1); + p2r2_shared->msf->page_size = p2r2_shared->msf_raw_stream_table->page_size; + p2r2_shared->msf->page_count = p2r2_shared->msf_raw_stream_table->total_page_count; + p2r2_shared->msf->stream_count = p2r2_shared->msf_raw_stream_table->stream_count; + p2r2_shared->msf->streams = push_array(arena, String8, p2r2_shared->msf->stream_count); + } + lane_sync(); + + // rjf: do wide fill + { + Rng1U64 range = lane_range(p2r2_shared->msf->stream_count); + for EachInRange(idx, range) + { + p2r2_shared->msf->streams[idx] = msf_data_from_stream_number(arena, params->input_pdb_data, p2r2_shared->msf_raw_stream_table, idx); + } + } + } + lane_sync(); + MSF_Parsed *msf = p2r2_shared->msf; + ////////////////////////////////////////////////////////////// //- rjf: do top-level MSF/PDB extraction // if(lane_idx() == 0) ProfScope("do top-level MSF/PDB extraction") { - ProfScope("parse MSF") - { - p2r2_shared = push_array(arena, P2R2_Shared, 1); - p2r2_shared->msf = msf_parsed_from_data(arena, params->input_pdb_data); - } ProfScope("parse PDB info") { String8 info_data = msf_data_from_stream(p2r2_shared->msf, PDB_FixedStream_Info); @@ -34,7 +58,6 @@ p2r2_convert_thread_entry_point(void *p) } } lane_sync(); - MSF_Parsed *msf = p2r2_shared->msf; PDB_Info *pdb_info = p2r2_shared->pdb_info; PDB_NamedStreamTable *named_streams = p2r2_shared->named_streams; diff --git a/src/rdi_from_pdb/rdi_from_pdb_2.h b/src/rdi_from_pdb/rdi_from_pdb_2.h index 79387ff2..f5c79085 100644 --- a/src/rdi_from_pdb/rdi_from_pdb_2.h +++ b/src/rdi_from_pdb/rdi_from_pdb_2.h @@ -19,6 +19,7 @@ struct P2R2_ConvertThreadParams typedef struct P2R2_Shared P2R2_Shared; struct P2R2_Shared { + MSF_RawStreamTable *msf_raw_stream_table; MSF_Parsed *msf; PDB_Info *pdb_info; PDB_NamedStreamTable *named_streams;