mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-10 19:41:37 -07:00
partway through fixing regressions of color view rule
This commit is contained in:
+1
-1
@@ -9810,7 +9810,7 @@ df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_t
|
||||
F64 v = 1.f - abs_f32(0.5f - t);
|
||||
|
||||
// rjf: colors
|
||||
Vec4F32 bg_color = df_rgba_from_theme_color(DF_ThemeColor_FloatingBackground);
|
||||
Vec4F32 bg_color = df_rgba_from_theme_color(DF_ThemeColor_BaseBackground);
|
||||
Vec4F32 bd_color = df_rgba_from_theme_color(DF_ThemeColor_FloatingBorder);
|
||||
Vec4F32 hl_color = df_rgba_from_theme_color(DF_ThemeColor_TextNeutral);
|
||||
bg_color.w *= loading_t;
|
||||
|
||||
@@ -252,10 +252,11 @@ DF_GfxViewTable:
|
||||
|
||||
//- rjf: visualizers
|
||||
{ Code "code" "Code" FileOutline 0 1 1 0 1 0 0 "" }
|
||||
{ Disassembly "disassembly" "Disassembly" Glasses 0 0 1 0 0 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." }
|
||||
{ Output "output" "Output" List 0 0 1 0 0 0 1 "Displays textual output from the selected thread's containing process." }
|
||||
{ Memory "memory" "Memory" Grid 0 0 1 0 0 0 1 "A familiar hex-editor-like interface for viewing memory of attached processes." }
|
||||
{ Disassembly "disassembly" "Disassembly" Glasses 0 0 1 0 1 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." }
|
||||
{ Output "output" "Output" List 0 0 1 0 0 0 1 "Displays debug strings, output from attached processes." }
|
||||
{ Memory "memory" "Memory" Grid 0 0 1 0 1 0 1 "A hex-editor-like grid interface for viewing memory." }
|
||||
{ Bitmap "bitmap" "Bitmap" Binoculars 0 0 1 0 1 0 1 "Visualizes memory as a bitmap." }
|
||||
{ ColorRGBA "color_rgba" "Color (RGBA)" Palette 0 0 1 0 1 0 1 "Visualizes memory as an RGBA color." }
|
||||
|
||||
//- rjf: meta (settings)
|
||||
{ ExceptionFilters "exception_filters" "Exception Filters" Gear 0 0 1 1 0 1 1 "An interface which controls whether or not the debugger will halt attached processes upon encountering specific exception codes for the first time." }
|
||||
@@ -328,7 +329,7 @@ DF_GfxViewRuleTable:
|
||||
{"omit" x x - - "" }
|
||||
{"no_addr" - x - - "" }
|
||||
{"checkbox" - - x - "" }
|
||||
{"rgba" - - x x "" }
|
||||
{"rgba" - - x x "color_rgba" }
|
||||
{"text" - - - x "code" }
|
||||
{"disasm" - - - x "disassembly" }
|
||||
{"memory" - - - x "memory" }
|
||||
|
||||
+1
-275
@@ -345,199 +345,6 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox)
|
||||
////////////////////////////////
|
||||
//~ rjf: "rgba"
|
||||
|
||||
internal Vec4F32
|
||||
df_vr_rgba_from_eval(E_Eval eval, DF_Entity *process)
|
||||
{
|
||||
Vec4F32 rgba = {0};
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_TypeKey type_key = eval.type_key;
|
||||
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||
switch(type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
|
||||
// rjf: extract r/g/b/a bytes from u32
|
||||
case E_TypeKind_U32:
|
||||
case E_TypeKind_S32:
|
||||
{
|
||||
U32 hex_val = (U32)eval.value.u64;
|
||||
rgba = rgba_from_u32(hex_val);
|
||||
}break;
|
||||
|
||||
// rjf: extract r/g/b/a values from array
|
||||
case E_TypeKind_Array:
|
||||
if(eval.mode == E_Mode_Offset)
|
||||
{
|
||||
U64 array_total_size = e_type_byte_size_from_key(type_key);
|
||||
U64 array_total_size_capped = ClampTop(array_total_size, 64);
|
||||
Rng1U64 array_memory_vaddr_rng = r1u64(eval.value.u64, eval.value.u64 + array_total_size_capped);
|
||||
CTRL_ProcessMemorySlice array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng, 0);
|
||||
String8 array_memory = array_slice.data;
|
||||
E_TypeKey element_type_key = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(type_key)));
|
||||
E_TypeKind element_type_kind = e_type_kind_from_key(element_type_key);
|
||||
U64 element_type_size = e_type_byte_size_from_key(element_type_key);
|
||||
for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
|
||||
{
|
||||
U64 offset = element_idx*element_type_size;
|
||||
if(offset >= array_memory.size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
switch(element_type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case E_TypeKind_U8:
|
||||
{
|
||||
U8 byte = array_memory.str[offset];
|
||||
rgba.v[element_idx] = byte/255.f;
|
||||
}break;
|
||||
case E_TypeKind_F32:
|
||||
{
|
||||
rgba.v[element_idx] = *(F32 *)(array_memory.str+offset);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
// rjf: extract r/g/b/a values from struct
|
||||
case E_TypeKind_Struct:
|
||||
case E_TypeKind_Class:
|
||||
case E_TypeKind_Union:
|
||||
if(eval.mode == E_Mode_Offset)
|
||||
{
|
||||
U64 struct_total_size = e_type_byte_size_from_key(type_key);
|
||||
U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
|
||||
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.value.u64, eval.value.u64 + struct_total_size_capped);
|
||||
CTRL_ProcessMemorySlice struct_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng, 0);
|
||||
String8 struct_memory = struct_slice.data;
|
||||
E_Type *type = e_type_from_key(scratch.arena, type_key);
|
||||
for(U64 element_idx = 0, member_idx = 0;
|
||||
element_idx < 4 && member_idx < type->count;
|
||||
member_idx += 1)
|
||||
{
|
||||
E_Member *member = &type->members[member_idx];
|
||||
E_TypeKey member_type_key = member->type_key;
|
||||
E_TypeKind member_type_kind = e_type_kind_from_key(member_type_key);
|
||||
B32 member_is_component = 1;
|
||||
switch(member_type_kind)
|
||||
{
|
||||
default:{member_is_component = 0;}break;
|
||||
case E_TypeKind_U8:
|
||||
{
|
||||
rgba.v[element_idx] = struct_memory.str[member->off]/255.f;
|
||||
}break;
|
||||
case E_TypeKind_F32:
|
||||
{
|
||||
rgba.v[element_idx] = *(F32 *)(struct_memory.str + member->off);
|
||||
}break;
|
||||
}
|
||||
if(member_is_component)
|
||||
{
|
||||
element_idx += 1;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
}
|
||||
scratch_end(scratch);
|
||||
return rgba;
|
||||
}
|
||||
|
||||
internal void
|
||||
df_vr_eval_commit_rgba(E_Eval eval, Vec4F32 rgba)
|
||||
{
|
||||
E_TypeKey type_key = eval.type_key;
|
||||
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||
switch(type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
|
||||
// rjf: extract r/g/b/a bytes from u32
|
||||
case E_TypeKind_U32:
|
||||
case E_TypeKind_S32:
|
||||
{
|
||||
U32 val = u32_from_rgba(rgba);
|
||||
E_Eval src_eval = eval;
|
||||
src_eval.mode = E_Mode_Value;
|
||||
src_eval.value.u64 = (U64)val;
|
||||
// TODO(rjf): df_commit_eval_value(eval, src_eval);
|
||||
}break;
|
||||
|
||||
#if 0
|
||||
// rjf: extract r/g/b/a values from array
|
||||
case E_TypeKind_Array:
|
||||
if(eval.mode == E_Mode_Addr)
|
||||
{
|
||||
U64 array_total_size = e_type_byte_size_from_key(type_key);
|
||||
U64 array_total_size_capped = ClampTop(array_total_size, 64);
|
||||
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped);
|
||||
String8 array_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng);
|
||||
E_TypeKey element_type_key = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(type_key)));
|
||||
E_TypeKind element_type_kind = e_type_kind_from_key(element_type_key);
|
||||
U64 element_type_size = e_type_byte_size_from_key(element_type_key);
|
||||
for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
|
||||
{
|
||||
U64 offset = element_idx*element_type_size;
|
||||
if(offset >= array_memory.size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
switch(element_type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case E_TypeKind_U8:
|
||||
{
|
||||
U8 byte = array_memory.str[offset];
|
||||
rgba.v[element_idx] = byte/255.f;
|
||||
}break;
|
||||
case E_TypeKind_F32:
|
||||
{
|
||||
rgba.v[element_idx] = *(F32 *)(array_memory.str+offset);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
// rjf: extract r/g/b/a values from struct
|
||||
case E_TypeKind_Struct:
|
||||
case E_TypeKind_Class:
|
||||
case E_TypeKind_Union:
|
||||
if(eval.mode == E_Mode_Addr)
|
||||
{
|
||||
U64 struct_total_size = e_type_byte_size_from_key(type_key);
|
||||
U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
|
||||
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped);
|
||||
String8 struct_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng);
|
||||
E_Type *type = e_type_from_key(scratch.arena, graph, raddbg, type_key);
|
||||
for(U64 element_idx = 0, member_idx = 0;
|
||||
element_idx < 4 && member_idx < type->count;
|
||||
member_idx += 1)
|
||||
{
|
||||
E_Member *member = &type->members[member_idx];
|
||||
E_TypeKey member_type_key = member->type_key;
|
||||
E_TypeKind member_type_kind = e_type_kind_from_key(member_type_key);
|
||||
B32 member_is_component = 1;
|
||||
switch(member_type_kind)
|
||||
{
|
||||
default:{member_is_component = 0;}break;
|
||||
case E_TypeKind_U8:
|
||||
{
|
||||
rgba.v[element_idx] = struct_memory.str[member->off]/255.f;
|
||||
}break;
|
||||
case E_TypeKind_F32:
|
||||
{
|
||||
rgba.v[element_idx] = *(F32 *)(struct_memory.str + member->off);
|
||||
}break;
|
||||
}
|
||||
if(member_is_component)
|
||||
{
|
||||
element_idx += 1;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(rgba)
|
||||
{
|
||||
DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth);
|
||||
@@ -557,7 +364,7 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba)
|
||||
|
||||
//- rjf: grab hsva
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
Vec4F32 rgba = df_vr_rgba_from_eval(value_eval, process);
|
||||
Vec4F32 rgba = df_rgba_from_eval_params(value_eval, params);
|
||||
Vec4F32 hsva = hsva_from_rgba(rgba);
|
||||
|
||||
//- rjf: build text box
|
||||
@@ -612,87 +419,6 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba)
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
#if 0
|
||||
DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(rgba)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread);
|
||||
DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process);
|
||||
DF_VR_RGBAState *state = df_view_rule_block_user_state(key, DF_VR_RGBAState);
|
||||
|
||||
//- rjf: grab hsva
|
||||
Vec4F32 rgba = {0};
|
||||
Vec4F32 hsva = {0};
|
||||
{
|
||||
if(state->memgen_idx >= ctrl_mem_gen())
|
||||
{
|
||||
hsva = state->hsva;
|
||||
rgba = rgba_from_hsva(hsva);
|
||||
}
|
||||
else
|
||||
{
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
rgba = df_vr_rgba_from_eval(value_eval, process);
|
||||
state->hsva = hsva = hsva_from_rgba(rgba);
|
||||
state->memgen_idx = ctrl_mem_gen();
|
||||
}
|
||||
}
|
||||
Vec4F32 initial_hsva = hsva;
|
||||
|
||||
//- rjf: build color picker
|
||||
B32 commit = 0;
|
||||
UI_Padding(ui_pct(1.f, 0.f))
|
||||
{
|
||||
UI_PrefWidth(ui_px(dim.y, 1.f))
|
||||
{
|
||||
UI_Signal sv_sig = ui_sat_val_pickerf(hsva.x, &hsva.y, &hsva.z, "sat_val_picker");
|
||||
commit = commit || ui_released(sv_sig);
|
||||
}
|
||||
UI_PrefWidth(ui_em(3.f, 1.f))
|
||||
{
|
||||
UI_Signal h_sig = ui_hue_pickerf(&hsva.x, hsva.y, hsva.z, "hue_picker");
|
||||
commit = commit || ui_released(h_sig);
|
||||
}
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) DF_Font(ws, DF_FontSlot_Code) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
{
|
||||
ui_labelf("Hex");
|
||||
ui_labelf("R");
|
||||
ui_labelf("G");
|
||||
ui_labelf("B");
|
||||
ui_labelf("H");
|
||||
ui_labelf("S");
|
||||
ui_labelf("V");
|
||||
ui_labelf("A");
|
||||
}
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) DF_Font(ws, DF_FontSlot_Code)
|
||||
{
|
||||
String8 hex_string = hex_string_from_rgba_4f32(scratch.arena, rgba);
|
||||
ui_label(hex_string);
|
||||
ui_labelf("%.2f", rgba.x);
|
||||
ui_labelf("%.2f", rgba.y);
|
||||
ui_labelf("%.2f", rgba.z);
|
||||
ui_labelf("%.2f", hsva.x);
|
||||
ui_labelf("%.2f", hsva.y);
|
||||
ui_labelf("%.2f", hsva.z);
|
||||
ui_labelf("%.2f", rgba.w);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: commit edited hsva back
|
||||
if(commit)
|
||||
{
|
||||
Vec4F32 rgba = rgba_from_hsva(hsva);
|
||||
df_vr_eval_commit_rgba(eval, rgba);
|
||||
state->memgen_idx = ctrl_mem_gen();
|
||||
}
|
||||
|
||||
//- rjf: commit possible edited value to state
|
||||
state->hsva = hsva;
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "text"
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ struct DF_VR_RGBAState
|
||||
U64 memgen_idx;
|
||||
};
|
||||
|
||||
internal Vec4F32 df_vr_rgba_from_eval(E_Eval eval, DF_Entity *process);
|
||||
internal void df_vr_eval_commit_rgba(E_Eval eval, Vec4F32 rgba);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -3346,6 +3346,31 @@ df_bitmap_canvas_from_screen_rect(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rec
|
||||
return cvs;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Color RGBA Views
|
||||
|
||||
internal Vec4F32
|
||||
df_rgba_from_eval_params(E_Eval eval, MD_Node *params)
|
||||
{
|
||||
Vec4F32 rgba = {0};
|
||||
{
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
E_TypeKey type_key = eval.type_key;
|
||||
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||
U64 type_size = e_type_byte_size_from_key(type_key);
|
||||
if(16 <= type_size)
|
||||
{
|
||||
e_space_read(eval.space, &rgba, r1u64(eval.value.u64, eval.value.u64 + 16));
|
||||
}
|
||||
else if(4 <= type_size)
|
||||
{
|
||||
U32 hex_val = value_eval.value.u32;
|
||||
rgba = rgba_from_u32(hex_val);
|
||||
}
|
||||
}
|
||||
return rgba;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Null @view_hook_impl
|
||||
|
||||
@@ -8366,6 +8391,56 @@ DF_VIEW_UI_FUNCTION_DEF(Bitmap)
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Color @view_hook_impl
|
||||
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(ColorRGBA) {}
|
||||
DF_VIEW_CMD_FUNCTION_DEF(ColorRGBA) {}
|
||||
DF_VIEW_UI_FUNCTION_DEF(ColorRGBA)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
Vec2F32 dim = dim_2f32(rect);
|
||||
F32 padding = ui_top_font_size()*3.f;
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Vec4F32 rgba = df_rgba_from_eval_params(eval, params);
|
||||
Vec4F32 hsva = hsva_from_rgba(rgba);
|
||||
UI_WidthFill UI_HeightFill UI_Column UI_Padding(ui_px(padding, 1.f)) UI_Row UI_Padding(ui_pct(1.f, 0.f)) UI_HeightFill
|
||||
{
|
||||
UI_PrefWidth(ui_px(dim.y - padding*2, 1.f))
|
||||
{
|
||||
UI_Signal sv_sig = ui_sat_val_pickerf(hsva.x, &hsva.y, &hsva.z, "sat_val_picker");
|
||||
}
|
||||
UI_PrefWidth(ui_em(3.f, 1.f))
|
||||
{
|
||||
UI_Signal h_sig = ui_hue_pickerf(&hsva.x, hsva.y, hsva.z, "hue_picker");
|
||||
}
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) UI_PrefHeight(ui_em(2.f, 0.f)) DF_Font(ws, DF_FontSlot_Code) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
{
|
||||
ui_labelf("Hex");
|
||||
ui_labelf("R");
|
||||
ui_labelf("G");
|
||||
ui_labelf("B");
|
||||
ui_labelf("H");
|
||||
ui_labelf("S");
|
||||
ui_labelf("V");
|
||||
ui_labelf("A");
|
||||
}
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) UI_PrefHeight(ui_em(2.f, 0.f)) DF_Font(ws, DF_FontSlot_Code)
|
||||
{
|
||||
String8 hex_string = hex_string_from_rgba_4f32(scratch.arena, rgba);
|
||||
ui_label(hex_string);
|
||||
ui_labelf("%.2f", rgba.x);
|
||||
ui_labelf("%.2f", rgba.y);
|
||||
ui_labelf("%.2f", rgba.z);
|
||||
ui_labelf("%.2f", hsva.x);
|
||||
ui_labelf("%.2f", hsva.y);
|
||||
ui_labelf("%.2f", hsva.z);
|
||||
ui_labelf("%.2f", rgba.w);
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: ExceptionFilters @view_hook_impl
|
||||
|
||||
|
||||
@@ -587,4 +587,9 @@ internal Rng2F32 df_bitmap_screen_from_canvas_rect(Vec2F32 view_center_pos, F32
|
||||
internal Vec2F32 df_bitmap_canvas_from_screen_pos(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rect, Vec2F32 scr);
|
||||
internal Rng2F32 df_bitmap_canvas_from_screen_rect(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rect, Rng2F32 scr);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Color RGBA Views
|
||||
|
||||
internal Vec4F32 df_rgba_from_eval_params(E_Eval eval, MD_Node *params);
|
||||
|
||||
#endif // DEBUG_FRONTEND_VIEWS_H
|
||||
|
||||
@@ -140,7 +140,7 @@ str8_lit_comp("add_address_breakpoint"),
|
||||
str8_lit_comp("add_function_breakpoint"),
|
||||
};
|
||||
|
||||
DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32] =
|
||||
DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[33] =
|
||||
{
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("null"), str8_lit_comp(""), DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Null), DF_VIEW_CMD_FUNCTION_NAME(Null), DF_VIEW_UI_FUNCTION_NAME(Null)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("empty"), str8_lit_comp(""), DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Empty), DF_VIEW_CMD_FUNCTION_NAME(Empty), DF_VIEW_UI_FUNCTION_NAME(Empty)},
|
||||
@@ -168,10 +168,11 @@ DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32] =
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("procedures"), str8_lit_comp("Procedures"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Procedures), DF_VIEW_CMD_FUNCTION_NAME(Procedures), DF_VIEW_UI_FUNCTION_NAME(Procedures)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("pending_file"), str8_lit_comp("Pending File"), DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(PendingFile), DF_VIEW_CMD_FUNCTION_NAME(PendingFile), DF_VIEW_UI_FUNCTION_NAME(PendingFile)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("code"), str8_lit_comp("Code"), DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(Code), DF_VIEW_CMD_FUNCTION_NAME(Code), DF_VIEW_UI_FUNCTION_NAME(Code)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_IconKind_Glasses, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_IconKind_Glasses, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("output"), str8_lit_comp("Output"), DF_IconKind_List, DF_VIEW_SETUP_FUNCTION_NAME(Output), DF_VIEW_CMD_FUNCTION_NAME(Output), DF_VIEW_UI_FUNCTION_NAME(Output)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_IconKind_Grid, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_IconKind_Grid, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("bitmap"), str8_lit_comp("Bitmap"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Bitmap), DF_VIEW_CMD_FUNCTION_NAME(Bitmap), DF_VIEW_UI_FUNCTION_NAME(Bitmap)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("color_rgba"), str8_lit_comp("Color (RGBA)"), DF_IconKind_Palette, DF_VIEW_SETUP_FUNCTION_NAME(ColorRGBA), DF_VIEW_CMD_FUNCTION_NAME(ColorRGBA), DF_VIEW_UI_FUNCTION_NAME(ColorRGBA)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("exception_filters"), str8_lit_comp("Exception Filters"), DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(ExceptionFilters), DF_VIEW_CMD_FUNCTION_NAME(ExceptionFilters), DF_VIEW_UI_FUNCTION_NAME(ExceptionFilters)},
|
||||
{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("settings"), str8_lit_comp("Settings"), DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(Settings), DF_VIEW_CMD_FUNCTION_NAME(Settings), DF_VIEW_UI_FUNCTION_NAME(Settings)},
|
||||
};
|
||||
@@ -221,7 +222,7 @@ DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[16] =
|
||||
{ str8_lit_comp("omit"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(omit) , DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(omit) , 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("no_addr"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), 0, DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(no_addr) , 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("checkbox"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(checkbox) , str8_lit_comp("") },
|
||||
{ str8_lit_comp("rgba"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(rgba) , str8_lit_comp("") },
|
||||
{ str8_lit_comp("rgba"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(rgba) , str8_lit_comp("color_rgba") },
|
||||
{ str8_lit_comp("text"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("code") },
|
||||
{ str8_lit_comp("disasm"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("disassembly") },
|
||||
{ str8_lit_comp("memory"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("memory") },
|
||||
|
||||
@@ -38,6 +38,7 @@ DF_GfxViewKind_Disassembly,
|
||||
DF_GfxViewKind_Output,
|
||||
DF_GfxViewKind_Memory,
|
||||
DF_GfxViewKind_Bitmap,
|
||||
DF_GfxViewKind_ColorRGBA,
|
||||
DF_GfxViewKind_ExceptionFilters,
|
||||
DF_GfxViewKind_Settings,
|
||||
DF_GfxViewKind_COUNT,
|
||||
@@ -191,6 +192,7 @@ DF_VIEW_SETUP_FUNCTION_DEF(Disassembly);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(Output);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(Memory);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(Bitmap);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(ColorRGBA);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(ExceptionFilters);
|
||||
DF_VIEW_SETUP_FUNCTION_DEF(Settings);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Null);
|
||||
@@ -223,6 +225,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Disassembly);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Output);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Memory);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Bitmap);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(ColorRGBA);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(ExceptionFilters);
|
||||
DF_VIEW_CMD_FUNCTION_DEF(Settings);
|
||||
DF_VIEW_UI_FUNCTION_DEF(Null);
|
||||
@@ -255,6 +258,7 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly);
|
||||
DF_VIEW_UI_FUNCTION_DEF(Output);
|
||||
DF_VIEW_UI_FUNCTION_DEF(Memory);
|
||||
DF_VIEW_UI_FUNCTION_DEF(Bitmap);
|
||||
DF_VIEW_UI_FUNCTION_DEF(ColorRGBA);
|
||||
DF_VIEW_UI_FUNCTION_DEF(ExceptionFilters);
|
||||
DF_VIEW_UI_FUNCTION_DEF(Settings);
|
||||
|
||||
@@ -275,7 +279,7 @@ C_LINKAGE_BEGIN
|
||||
extern DF_StringBindingPair df_g_default_binding_table[110];
|
||||
extern String8 df_g_binding_version_remap_old_name_table[7];
|
||||
extern String8 df_g_binding_version_remap_new_name_table[7];
|
||||
extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32];
|
||||
extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[33];
|
||||
extern DF_CmdParamSlot df_g_cmd_param_slot_2_view_spec_src_map[7];
|
||||
extern String8 df_g_cmd_param_slot_2_view_spec_dst_map[7];
|
||||
extern String8 df_g_cmd_param_slot_2_view_spec_cmd_map[7];
|
||||
|
||||
@@ -194,77 +194,6 @@ e_value_eval_from_eval(E_Eval eval)
|
||||
}
|
||||
ProfEnd();
|
||||
return eval;
|
||||
|
||||
// TODO(rjf): @spaces check regs path
|
||||
#if 0
|
||||
switch(eval.mode)
|
||||
{
|
||||
//- rjf: no work to be done. already in value mode
|
||||
default:
|
||||
case E_Mode_Value:{}break;
|
||||
|
||||
//- rjf: address => resolve into value, if leaf
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
E_TypeKey type_key = e_type_unwrap(eval.type_key);
|
||||
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||
if(type_kind == E_TypeKind_Array)
|
||||
{
|
||||
eval.mode = E_Mode_Value;
|
||||
}
|
||||
else if(e_interpret_ctx->memory_read != 0)
|
||||
{
|
||||
U64 type_byte_size = e_type_byte_size_from_key(type_key);
|
||||
Rng1U64 value_vaddr_range = r1u64(eval.value.u64, eval.value.u64 + type_byte_size);
|
||||
MemoryZeroStruct(&eval.value);
|
||||
if(!e_type_key_match(type_key, e_type_key_zero()) &&
|
||||
type_byte_size <= sizeof(E_Value) &&
|
||||
e_interpret_ctx->memory_read(e_interpret_ctx->memory_read_user_data, &eval.value, value_vaddr_range))
|
||||
{
|
||||
eval.mode = E_Mode_Value;
|
||||
|
||||
// rjf: mask&shift, for bitfields
|
||||
if(type_kind == E_TypeKind_Bitfield && type_byte_size <= sizeof(U64))
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_Type *type = e_type_from_key(scratch.arena, type_key);
|
||||
U64 valid_bits_mask = 0;
|
||||
for(U64 idx = 0; idx < type->count; idx += 1)
|
||||
{
|
||||
valid_bits_mask |= (1<<idx);
|
||||
}
|
||||
eval.value.u64 = eval.value.u64 >> type->off;
|
||||
eval.value.u64 = eval.value.u64 & valid_bits_mask;
|
||||
eval.type_key = type->direct_type_key;
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
// rjf: manually sign-extend
|
||||
switch(type_kind)
|
||||
{
|
||||
default: break;
|
||||
case E_TypeKind_S8: {eval.value.s64 = (S64)*((S8 *)&eval.value.u64);}break;
|
||||
case E_TypeKind_S16: {eval.value.s64 = (S64)*((S16 *)&eval.value.u64);}break;
|
||||
case E_TypeKind_S32: {eval.value.s64 = (S64)*((S32 *)&eval.value.u64);}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
//- rjf: register => resolve into value
|
||||
case E_Mode_Reg:
|
||||
{
|
||||
E_TypeKey type_key = eval.type_key;
|
||||
U64 type_byte_size = e_type_byte_size_from_key(type_key);
|
||||
U64 reg_off = eval.value.u64;
|
||||
MemoryZeroStruct(&eval.value);
|
||||
MemoryCopy(&eval.value.u256, ((U8 *)e_interpret_ctx->reg_data + reg_off), Min(type_byte_size, sizeof(U64)*4));
|
||||
eval.mode = E_Mode_Value;
|
||||
}break;
|
||||
}
|
||||
#endif
|
||||
|
||||
return eval;
|
||||
}
|
||||
|
||||
internal E_Eval
|
||||
|
||||
Reference in New Issue
Block a user