mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-19 23:16:48 +00:00
Merge remote-tracking branch 'EpicGames/dev' into odin
This commit is contained in:
@@ -42,7 +42,7 @@ if "%asan%"=="1" set auto_compile_flags=%auto_compile_flags% -fsanitize=add
|
||||
|
||||
:: --- Compile/Link Line Definitions ------------------------------------------
|
||||
set cl_common= /I..\src\ /I..\local\ /nologo /FC /Z7
|
||||
set clang_common= -I..\src\ -I..\local\ -gcodeview -fdiagnostics-absolute-paths -Wall -Wno-unknown-warning-option -Wno-missing-braces -Wno-unused-function -Wno-writable-strings -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Xclang -flto-visibility-public-std -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf
|
||||
set clang_common= -I..\src\ -I..\local\ -gcodeview -fdiagnostics-absolute-paths -Wall -Wno-unknown-warning-option -Wno-missing-braces -Wno-unused-function -Wno-writable-strings -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Xclang -flto-visibility-public-std -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf
|
||||
set cl_debug= call cl /Od /DBUILD_DEBUG=1 %cl_common% %auto_compile_flags%
|
||||
set cl_release= call cl /O2 /DBUILD_DEBUG=0 %cl_common% %auto_compile_flags%
|
||||
set clang_debug= call clang -g -O0 -DBUILD_DEBUG=1 %clang_common% %auto_compile_flags%
|
||||
@@ -59,9 +59,9 @@ if "%clang%"=="1" set only_compile=-c
|
||||
if "%msvc%"=="1" set EHsc=/EHsc
|
||||
if "%clang%"=="1" set EHsc=
|
||||
if "%msvc%"=="1" set no_aslr=/DYNAMICBASE:NO
|
||||
if "%clang%"=="1" set no_aslr=
|
||||
if "%msvc%"=="1" set rc=call rc
|
||||
if "%clang%"=="1" set rc=call llvm-rc
|
||||
if "%clang%"=="1" set no_aslr=-Wl,/DYNAMICBASE:NO
|
||||
if "%msvc%"=="1" set rc=call rc
|
||||
if "%clang%"=="1" set rc=call llvm-rc
|
||||
|
||||
:: --- Choose Compile/Link Lines ----------------------------------------------
|
||||
if "%msvc%"=="1" set compile_debug=%cl_debug%
|
||||
@@ -98,7 +98,7 @@ if not "%no_meta%"=="1" (
|
||||
|
||||
:: --- Build Everything (@build_targets) --------------------------------------
|
||||
pushd build
|
||||
if "%raddbg%"=="1" %compile% %gfx% ..\src\raddbg\raddbg_main.cpp %compile_link% %out%raddbg.exe || exit /b 1
|
||||
if "%raddbg%"=="1" %compile% %gfx% ..\src\raddbg\raddbg_main.c %compile_link% %out%raddbg.exe || exit /b 1
|
||||
if "%rdi_from_pdb%"=="1" %compile% ..\src\rdi_from_pdb\rdi_from_pdb_main.c %compile_link% %out%rdi_from_pdb.exe || exit /b 1
|
||||
if "%rdi_from_dwarf%"=="1" %compile% ..\src\rdi_from_dwarf\rdi_from_dwarf.c %compile_link% %out%rdi_from_dwarf.exe || exit /b 1
|
||||
if "%rdi_dump%"=="1" %compile% ..\src\rdi_dump\rdi_dump_main.c %compile_link% %out%rdi_dump.exe || exit /b 1
|
||||
|
||||
@@ -946,11 +946,11 @@ str8_array_from_list(Arena *arena, String8List *list)
|
||||
{
|
||||
String8Array array;
|
||||
array.count = list->node_count;
|
||||
array.strings = push_array_no_zero(arena, String8, array.count);
|
||||
array.v = push_array_no_zero(arena, String8, array.count);
|
||||
U64 idx = 0;
|
||||
for(String8Node *n = list->first; n != 0; n = n->next, idx += 1)
|
||||
{
|
||||
array.strings[idx] = n->string;
|
||||
array.v[idx] = n->string;
|
||||
}
|
||||
return array;
|
||||
}
|
||||
@@ -960,7 +960,7 @@ str8_array_reserve(Arena *arena, U64 count)
|
||||
{
|
||||
String8Array arr;
|
||||
arr.count = 0;
|
||||
arr.strings = push_array(arena, String8, count);
|
||||
arr.v = push_array(arena, String8, count);
|
||||
return arr;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ struct String8List
|
||||
typedef struct String8Array String8Array;
|
||||
struct String8Array
|
||||
{
|
||||
String8 *strings;
|
||||
String8 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
|
||||
@@ -165,6 +165,78 @@ cv_f64_from_numeric(CV_NumericParsed *num){
|
||||
return(result);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ Inline Binary Annotation Helpers
|
||||
|
||||
internal U64
|
||||
cv_decode_inline_annot_u32(String8 data, U64 offset, U32 *out_value)
|
||||
{
|
||||
U64 cursor = offset;
|
||||
|
||||
// rjf: read header
|
||||
U8 header = 0;
|
||||
cursor += str8_deserial_read_struct(data, cursor, &header);
|
||||
|
||||
// rjf: decode value
|
||||
U32 value = 0;
|
||||
{
|
||||
// 1 byte
|
||||
if((header & 0x80) == 0)
|
||||
{
|
||||
value = header;
|
||||
}
|
||||
|
||||
// 2 bytes
|
||||
else if((header & 0xC0) == 0x80 && cursor+2 <= data.size)
|
||||
{
|
||||
U8 second_byte;
|
||||
cursor += str8_deserial_read_struct(data, cursor, &second_byte);
|
||||
value = ((header & 0x3F) << 8) | second_byte;
|
||||
}
|
||||
|
||||
// 4 bytes
|
||||
else if((header & 0xE0) == 0xC0 && cursor+3 <= data.size)
|
||||
{
|
||||
U8 second_byte, third_byte, fourth_byte;
|
||||
cursor += str8_deserial_read_struct(data, cursor, &second_byte);
|
||||
cursor += str8_deserial_read_struct(data, cursor, &third_byte);
|
||||
cursor += str8_deserial_read_struct(data, cursor, &fourth_byte);
|
||||
value = (((U32)header & 0x1F) << 24) | ((U32)second_byte << 16) | ((U32)third_byte << 8) | (U32)fourth_byte;
|
||||
}
|
||||
|
||||
// bad encode
|
||||
else if((header & 0xE0) == 0xE0)
|
||||
{
|
||||
value = max_U32;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: output results
|
||||
if(out_value)
|
||||
{
|
||||
*out_value = value;
|
||||
}
|
||||
|
||||
U64 read_size = cursor - offset;
|
||||
return read_size;
|
||||
}
|
||||
|
||||
internal U64
|
||||
cv_decode_inline_annot_s32(String8 data, U64 offset, S32 *out_value)
|
||||
{
|
||||
U32 value;
|
||||
U64 read_size = cv_decode_inline_annot_u32(data, offset, &value);
|
||||
if(value & 1)
|
||||
{
|
||||
value = -(value >> 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = value >> 1;
|
||||
}
|
||||
*out_value = (S32)value;
|
||||
return read_size;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ CodeView Sym Parser Functions
|
||||
|
||||
+81
-22
@@ -27,7 +27,7 @@ read_only global CV_TypeId cv_type_id_variadic = 0xFFFFFFFF;
|
||||
////////////////////////////////
|
||||
//~ rjf: Registers
|
||||
|
||||
// X(NAME, CODE, (RDI_RegisterCode_X86) NAME, BYTE_POS, BYTE_SIZE)
|
||||
// X(NAME, CODE, (RDI_RegCode_X86) NAME, BYTE_POS, BYTE_SIZE)
|
||||
#define CV_Reg_X86_XList(X) \
|
||||
X(NONE, 0, nil, 0, 0)\
|
||||
X(AL, 1, eax, 0, 1)\
|
||||
@@ -1152,6 +1152,7 @@ struct CV_SymFrameproc
|
||||
};
|
||||
|
||||
//- (SymKind: ANNOTATION)
|
||||
|
||||
typedef struct CV_SymAnnotation CV_SymAnnotation;
|
||||
struct CV_SymAnnotation
|
||||
{
|
||||
@@ -1761,13 +1762,53 @@ struct CV_SymBuildInfo
|
||||
|
||||
//- (SymKind: INLINESITE)
|
||||
|
||||
typedef U32 CV_InlineBinaryAnnotation;
|
||||
typedef enum CV_InlineBinaryAnnotationEnum
|
||||
{
|
||||
CV_InlineBinaryAnnotation_Null,
|
||||
CV_InlineBinaryAnnotation_CodeOffset,
|
||||
CV_InlineBinaryAnnotation_ChangeCodeOffsetBase,
|
||||
CV_InlineBinaryAnnotation_ChangeCodeOffset,
|
||||
CV_InlineBinaryAnnotation_ChangeCodeLength,
|
||||
CV_InlineBinaryAnnotation_ChangeFile,
|
||||
CV_InlineBinaryAnnotation_ChangeLineOffset,
|
||||
CV_InlineBinaryAnnotation_ChangeLineEndDelta,
|
||||
CV_InlineBinaryAnnotation_ChangeRangeKind,
|
||||
CV_InlineBinaryAnnotation_ChangeColumnStart,
|
||||
CV_InlineBinaryAnnotation_ChangeColumnEndDelta,
|
||||
CV_InlineBinaryAnnotation_ChangeCodeOffsetAndLineOffset,
|
||||
CV_InlineBinaryAnnotation_ChangeCodeLengthAndCodeOffset,
|
||||
CV_InlineBinaryAnnotation_ChangeColumnEnd
|
||||
}
|
||||
CV_InlineBinaryAnnotationEnum;
|
||||
|
||||
typedef U32 CV_InlineRangeKind;
|
||||
typedef enum CV_InlineRangeKindEnum
|
||||
{
|
||||
CV_InlineRangeKind_Expr,
|
||||
CV_InlineRangeKind_Stmt
|
||||
}
|
||||
CV_InlineRangeKindEnum;
|
||||
|
||||
typedef struct CV_SymInlineSite CV_SymInlineSite;
|
||||
struct CV_SymInlineSite
|
||||
{
|
||||
U32 parent;
|
||||
U32 end;
|
||||
CV_ItemId inlinee;
|
||||
// CV_BinaryAnnotation annotations (rest of data)
|
||||
// U8 annotations[] (rest of data)
|
||||
};
|
||||
|
||||
//- (SymKind: INLINESITE2)
|
||||
|
||||
typedef struct CV_SymInlineSite2 CV_SymInlineSite2;
|
||||
struct CV_SymInlineSite2
|
||||
{
|
||||
U32 parent_off;
|
||||
U32 end_off;
|
||||
CV_ItemId inlinee;
|
||||
U32 invocations;
|
||||
// U8 annotations[] (rest of data)
|
||||
};
|
||||
|
||||
//- (SymKind: INLINESITE_END) (empty)
|
||||
@@ -1786,7 +1827,7 @@ struct CV_SymFileStatic
|
||||
//- (SymKind: ARMSWITCHTABLE)
|
||||
|
||||
typedef U16 CV_ArmSwitchKind;
|
||||
typedef enum
|
||||
typedef enum CV_ArmSwitchKindEnum
|
||||
{
|
||||
CV_ArmSwitchKind_INT1,
|
||||
CV_ArmSwitchKind_UINT1,
|
||||
@@ -1799,7 +1840,8 @@ typedef enum
|
||||
CV_ArmSwitchKind_UINT2SHL1,
|
||||
CV_ArmSwitchKind_INT1SSHL1,
|
||||
CV_ArmSwitchKind_INT2SSHL1,
|
||||
} CV_ArmSwitchKindEnum;
|
||||
}
|
||||
CV_ArmSwitchKindEnum;
|
||||
|
||||
typedef struct CV_SymArmSwitchTable CV_SymArmSwitchTable;
|
||||
struct CV_SymArmSwitchTable
|
||||
@@ -1835,18 +1877,6 @@ struct CV_SymPogoInfo
|
||||
U32 post_inline_static_inst_count;
|
||||
};
|
||||
|
||||
//- (SymKind: INLINESITE2)
|
||||
|
||||
typedef struct CV_SymInlineSite2 CV_SymInlineSite2;
|
||||
struct CV_SymInlineSite2
|
||||
{
|
||||
U32 parent_off;
|
||||
U32 end_off;
|
||||
CV_ItemId inlinee;
|
||||
U32 invocations;
|
||||
// CV_BinaryAnnotation annotations (rest of data)
|
||||
};
|
||||
|
||||
//- (SymKind: HEAPALLOCSITE)
|
||||
|
||||
typedef struct CV_SymHeapAllocSite CV_SymHeapAllocSite;
|
||||
@@ -2636,15 +2666,18 @@ X(IlLines, 0xF9)\
|
||||
X(FuncMDTokenMap, 0xFA)\
|
||||
X(TypeMDTokenMap, 0xFB)\
|
||||
X(MergedAssemblyInput, 0xFC)\
|
||||
X(CoffSymbolRVA, 0xFD)
|
||||
X(CoffSymbolRVA, 0xFD)\
|
||||
X(XfgHashType, 0xFF)\
|
||||
X(XfgHashVirtual, 0x100)
|
||||
|
||||
typedef U32 CV_C13_SubSectionKind;
|
||||
typedef enum
|
||||
typedef enum CV_C13_SubSectionKindEnum
|
||||
{
|
||||
#define X(N,c) CV_C13_SubSectionKind_##N = c,
|
||||
CV_C13_SubSectionKindXList(X)
|
||||
#undef X
|
||||
} CV_C13_SubSectionKindEnum;
|
||||
}
|
||||
CV_C13_SubSectionKindEnum;
|
||||
|
||||
typedef struct CV_C13_SubSectionHeader CV_C13_SubSectionHeader;
|
||||
struct CV_C13_SubSectionHeader
|
||||
@@ -2656,13 +2689,14 @@ struct CV_C13_SubSectionHeader
|
||||
//- FileChksms sub-section
|
||||
|
||||
typedef U8 CV_C13_ChecksumKind;
|
||||
typedef enum
|
||||
typedef enum CV_C13_ChecksumKindEnum
|
||||
{
|
||||
CV_C13_ChecksumKind_Null,
|
||||
CV_C13_ChecksumKind_MD5,
|
||||
CV_C13_ChecksumKind_SHA1,
|
||||
CV_C13_ChecksumKind_SHA256,
|
||||
} CV_C13_ChecksumKindEnum;
|
||||
}
|
||||
CV_C13_ChecksumKindEnum;
|
||||
|
||||
typedef struct CV_C13_Checksum CV_C13_Checksum;
|
||||
struct CV_C13_Checksum
|
||||
@@ -2742,6 +2776,26 @@ struct CV_C13_FrameData
|
||||
CV_C13_FrameDataFlags flags;
|
||||
};
|
||||
|
||||
//- InlineLines sub-section
|
||||
|
||||
typedef U32 CV_C13_InlineeLinesSig;
|
||||
enum
|
||||
{
|
||||
CV_C13_InlineeLinesSig_NORMAL,
|
||||
CV_C13_InlineeLinesSig_EXTRA_FILES,
|
||||
};
|
||||
|
||||
typedef struct CV_C13_InlineeSourceLineHeader CV_C13_InlineeSourceLineHeader;
|
||||
struct CV_C13_InlineeSourceLineHeader
|
||||
{
|
||||
CV_ItemId inlinee; // LF_FUNC_ID or LF_MFUNC_ID
|
||||
U32 file_off; // offset into FileChksms sub-section
|
||||
U32 first_source_ln; // base source line number for binary annotations
|
||||
// if sig set to CV_C13_InlineeLinesSig_EXTRA_FILES
|
||||
// U32 extra_file_count;
|
||||
// U32 files[];
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
////////////////////////////////
|
||||
@@ -2891,7 +2945,6 @@ struct CV_TypeIdArray
|
||||
U64 count;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
//~ CodeView Common Functions
|
||||
|
||||
@@ -2905,6 +2958,12 @@ internal U64 cv_u64_from_numeric(CV_NumericParsed *num);
|
||||
internal S64 cv_s64_from_numeric(CV_NumericParsed *num);
|
||||
internal F64 cv_f64_from_numeric(CV_NumericParsed *num);
|
||||
|
||||
////////////////////////////////
|
||||
//~ Inline Binary Annotation Helpers
|
||||
|
||||
internal U64 cv_decode_inline_annot_u32(String8 data, U64 offset, U32 *out_value);
|
||||
internal U64 cv_decode_inline_annot_s32(String8 data, U64 offset, S32 *out_value);
|
||||
|
||||
////////////////////////////////
|
||||
//~ CodeView Sym/Leaf Parser Functions
|
||||
|
||||
|
||||
@@ -701,6 +701,3 @@ case CV_LeafKind_STRUCT2:{result = sizeof(CV_LeafStruct2);}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
@@ -517,7 +517,4 @@ internal String8 cv_type_name_from_basic_type(CV_BasicType v);
|
||||
internal String8 cv_string_from_leaf_kind(CV_LeafKind v);
|
||||
internal U64 cv_header_struct_size_from_sym_kind(CV_SymKind v);
|
||||
internal U64 cv_header_struct_size_from_leaf_kind(CV_LeafKind v);
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // CODEVIEW_META_H
|
||||
|
||||
@@ -43,6 +43,25 @@ ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind)
|
||||
return cause;
|
||||
}
|
||||
|
||||
internal String8
|
||||
ctrl_string_from_msg_kind(CTRL_MsgKind kind)
|
||||
{
|
||||
String8 result = {0};
|
||||
switch(kind)
|
||||
{
|
||||
default:{}break;
|
||||
case CTRL_MsgKind_Launch: {result = str8_lit("Launch");}break;
|
||||
case CTRL_MsgKind_Attach: {result = str8_lit("Attach");}break;
|
||||
case CTRL_MsgKind_Kill: {result = str8_lit("Kill");}break;
|
||||
case CTRL_MsgKind_Detach: {result = str8_lit("Detach");}break;
|
||||
case CTRL_MsgKind_Run: {result = str8_lit("Run");}break;
|
||||
case CTRL_MsgKind_SingleStep: {result = str8_lit("SingleStep");}break;
|
||||
case CTRL_MsgKind_SetUserEntryPoints: {result = str8_lit("SetUserEntryPoints");}break;
|
||||
case CTRL_MsgKind_SetModuleDebugInfoPath: {result = str8_lit("SetModuleDebugInfoPath");}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Machine/Handle Pair Type Functions
|
||||
|
||||
@@ -2823,6 +2842,9 @@ ctrl_thread__entry_point(void *p)
|
||||
for(CTRL_MsgNode *msg_n = msgs.first; msg_n != 0 && done == 0; msg_n = msg_n->next)
|
||||
{
|
||||
CTRL_Msg *msg = &msg_n->v;
|
||||
{
|
||||
log_infof("[user -> ctrl %S message]\n", ctrl_string_from_msg_kind(msg->kind));
|
||||
}
|
||||
MemoryCopyArray(ctrl_state->exception_code_filters, msg->exception_code_filters);
|
||||
switch(msg->kind)
|
||||
{
|
||||
|
||||
@@ -636,6 +636,7 @@ read_only global CTRL_Entity ctrl_entity_nil =
|
||||
internal U64 ctrl_hash_from_string(String8 string);
|
||||
internal U64 ctrl_hash_from_machine_id_handle(CTRL_MachineID machine_id, DMN_Handle handle);
|
||||
internal CTRL_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind);
|
||||
internal String8 ctrl_string_from_msg_kind(CTRL_MsgKind kind);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Machine/Handle Pair Type Functions
|
||||
|
||||
@@ -54,6 +54,7 @@ extern U32 ctrl_exception_code_kind_code_table[38];
|
||||
extern String8 ctrl_exception_code_kind_display_string_table[38];
|
||||
extern String8 ctrl_exception_code_kind_lowercase_code_string_table[38];
|
||||
extern B8 ctrl_exception_code_kind_default_enable_table[38];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // CTRL_META_H
|
||||
|
||||
@@ -60,6 +60,7 @@ DMN_ExceptionKind_COUNT,
|
||||
C_LINKAGE_BEGIN
|
||||
extern String8 dmn_event_kind_string_table[17];
|
||||
extern String8 dmn_exception_kind_string_table[5];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // DEMON_META_H
|
||||
|
||||
@@ -2163,16 +2163,9 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
str8_list_push(scratch.arena, &debug_strings, debug_string);
|
||||
keep_going = 1;
|
||||
|
||||
// rjf: generate event, given sufficient amount of text
|
||||
// rjf: exit loop, given sufficient amount of text
|
||||
if(debug_strings.total_size >= KB(4))
|
||||
{
|
||||
String8 debug_strings_joined = str8_list_join(arena, &debug_strings, 0);
|
||||
MemoryZeroStruct(&debug_strings);
|
||||
DMN_Event *e = dmn_event_list_push(arena, &events);
|
||||
e->kind = DMN_EventKind_DebugString;
|
||||
e->process = dmn_w32_handle_from_entity(process);
|
||||
e->thread = dmn_w32_handle_from_entity(thread);
|
||||
e->string = debug_strings_joined;
|
||||
keep_going = 0;
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -265,10 +265,15 @@ struct DF_Eval
|
||||
////////////////////////////////
|
||||
//~ rjf: View Rule Hook Types
|
||||
|
||||
#define DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_SIG(name) DF_Eval name(Arena *arena, DI_Scope *di_scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_Eval eval, struct DF_CfgVal *val)
|
||||
typedef struct DF_CfgNode DF_CfgNode;
|
||||
typedef struct DF_CfgVal DF_CfgVal;
|
||||
typedef struct DF_CfgTable DF_CfgTable;
|
||||
typedef struct DF_EvalView DF_EvalView;
|
||||
typedef struct DF_EvalVizBlockList DF_EvalVizBlockList;
|
||||
#define DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_SIG(name) DF_Eval name(Arena *arena, DI_Scope *di_scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_Eval eval, DF_CfgVal *val)
|
||||
#define DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(name) df_core_view_rule_eval_resolution__##name
|
||||
#define DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(name) internal DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_SIG(DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(name))
|
||||
#define DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, DI_Scope *di_scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, struct DF_EvalView *eval_view, DF_Eval eval, String8 string, struct DF_CfgTable *cfg_table, DF_ExpandKey parent_key, DF_ExpandKey key, S32 depth, struct DF_CfgNode *cfg, struct DF_EvalVizBlockList *out)
|
||||
#define DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, DI_Scope *di_scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_EvalView *eval_view, DF_Eval eval, String8 string, DF_CfgTable *cfg_table, DF_ExpandKey parent_key, DF_ExpandKey key, S32 depth, DF_CfgNode *cfg, struct DF_EvalVizBlockList *out)
|
||||
#define DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name) df_core_view_rule_viz_block_prod__##name
|
||||
#define DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(name) internal DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name))
|
||||
typedef DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_SIG(DF_CoreViewRuleEvalResolutionHookFunctionType);
|
||||
@@ -1270,8 +1275,7 @@ read_only global DF_Entity df_g_nil_entity =
|
||||
0,
|
||||
|
||||
// rjf: name equipment
|
||||
0,
|
||||
zero_struct,
|
||||
{0},
|
||||
0,
|
||||
|
||||
// rjf: timestamp
|
||||
@@ -1571,7 +1575,7 @@ internal DF_Entity *df_log_from_entity(DF_Entity *entity);
|
||||
internal void df_push_ctrl_msg(CTRL_Msg *msg);
|
||||
|
||||
//- rjf: control thread running
|
||||
internal void df_ctrl_run(DF_RunKind run, DF_Entity *target, DF_Entity *run_thread, CTRL_RunFlags flags, CTRL_TrapList *run_traps);
|
||||
internal void df_ctrl_run(DF_RunKind run, DF_Entity *run_thread, CTRL_RunFlags flags, CTRL_TrapList *run_traps);
|
||||
|
||||
//- rjf: stopped info from the control thread
|
||||
internal CTRL_Event df_ctrl_last_stop_event(void);
|
||||
|
||||
@@ -1545,6 +1545,7 @@ extern DF_CoreCmdKind df_g_cfg_src_load_cmd_kind_table[4];
|
||||
extern DF_CoreCmdKind df_g_cfg_src_write_cmd_kind_table[4];
|
||||
extern DF_CoreCmdKind df_g_cfg_src_apply_cmd_kind_table[4];
|
||||
extern String8 df_g_icon_kind_text_table[69];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // DF_CORE_META_H
|
||||
|
||||
+1
-1
@@ -7971,7 +7971,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
||||
// rhp: disabled overlay color blends from plain background and inactive panel overlay
|
||||
Vec4F32 bg = df_rgba_from_theme_color(DF_ThemeColor_PlainBackground);
|
||||
Vec4F32 ov = df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay);
|
||||
Vec4F32 color = {};
|
||||
Vec4F32 color = {0};
|
||||
color.x = bg.x * bg.w + ov.x * ov.w * (1.0f - bg.w);
|
||||
color.y = bg.y * bg.w + ov.y * ov.w * (1.0f - bg.w);
|
||||
color.z = bg.z * bg.w + ov.z * ov.w * (1.0f - bg.w);
|
||||
|
||||
+3
-3
@@ -69,9 +69,9 @@ struct DF_KeyMapSlot
|
||||
////////////////////////////////
|
||||
//~ rjf: View Functions
|
||||
|
||||
struct DF_View;
|
||||
struct DF_Panel;
|
||||
struct DF_Window;
|
||||
typedef struct DF_View DF_View;
|
||||
typedef struct DF_Panel DF_Panel;
|
||||
typedef struct DF_Window DF_Window;
|
||||
|
||||
#define DF_VIEW_SETUP_FUNCTION_SIG(name) void name(DF_Window *ws, struct DF_View *view, DF_CfgNode *cfg_root)
|
||||
#define DF_VIEW_SETUP_FUNCTION_NAME(name) df_view_setup_##name
|
||||
|
||||
+13
-10
@@ -1142,6 +1142,12 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
String8 string = str8(edit_state->input_buffer, edit_state->input_size);
|
||||
UI_TxtOp op = ui_single_line_txt_op_from_event(scratch.arena, evt, string, edit_state->cursor, edit_state->mark);
|
||||
|
||||
// rjf: copy
|
||||
if(op.flags & UI_TxtOpFlag_Copy && selection_tbl.min.x == selection_tbl.max.x && selection_tbl.min.y == selection_tbl.max.y)
|
||||
{
|
||||
os_set_clipboard_text(op.copy);
|
||||
}
|
||||
|
||||
// rjf: any valid op & autocomplete hint? -> perform autocomplete first, then re-compute op
|
||||
if(autocomplete_hint_string.size != 0)
|
||||
{
|
||||
@@ -2805,12 +2811,9 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem)
|
||||
if(ui_clicked(sig))
|
||||
{
|
||||
String8 new_path = str8_chop_last_slash(str8_chop_last_slash(path_query.path));
|
||||
if(new_path.size != 0)
|
||||
{
|
||||
new_path = path_normalized_from_string(scratch.arena, new_path);
|
||||
String8 new_cmd = push_str8f(scratch.arena, "%S/", new_path);
|
||||
df_view_equip_spec(ws, view, view->spec, df_entity_from_handle(view->entity), new_cmd, &df_g_nil_cfg_node);
|
||||
}
|
||||
new_path = path_normalized_from_string(scratch.arena, new_path);
|
||||
String8 new_cmd = push_str8f(scratch.arena, "%S%s", new_path, new_path.size != 0 ? "/" : "");
|
||||
df_view_equip_spec(ws, view, view->spec, df_entity_from_handle(view->entity), new_cmd, &df_g_nil_cfg_node);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2887,11 +2890,11 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem)
|
||||
if(ui_clicked(file_sig))
|
||||
{
|
||||
String8 existing_path = str8_chop_last_slash(path_query.path);
|
||||
String8 new_path = push_str8f(scratch.arena, "%S/%S/", existing_path, file->filename);
|
||||
String8 new_path = push_str8f(scratch.arena, "%S%s%S/", existing_path, existing_path.size != 0 ? "/" : "", file->filename);
|
||||
new_path = path_normalized_from_string(scratch.arena, new_path);
|
||||
if(file->props.flags & FilePropertyFlag_IsFolder)
|
||||
{
|
||||
String8 new_cmd = push_str8f(scratch.arena, "%S/", new_path);
|
||||
String8 new_cmd = push_str8f(scratch.arena, "%S%s", new_path, new_path.size != 0 ? "/" : "");
|
||||
df_view_equip_spec(ws, view, view->spec, df_entity_from_handle(view->entity), new_cmd, &df_g_nil_cfg_node);
|
||||
}
|
||||
else
|
||||
@@ -3270,7 +3273,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
|
||||
for(U64 idx = 0; idx < rdis_count; idx += 1)
|
||||
{
|
||||
rdis[idx] = di_rdi_from_key(di_scope, &dbgi_keys.v[idx], endt_us);
|
||||
graphs[idx] = tg_graph_begin(rdi_addr_size_from_arch(rdis[idx]->top_level_info->architecture), 256);
|
||||
graphs[idx] = tg_graph_begin(rdi_addr_size_from_arch(rdis[idx]->top_level_info->arch), 256);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4933,7 +4936,7 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack)
|
||||
TG_Key type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), procedure->type_idx);
|
||||
U64 name_size = 0;
|
||||
U8 *name_ptr = rdi_string_from_idx(rdi, procedure->name_string_idx, &name_size);
|
||||
TG_Graph *graph = tg_graph_begin(rdi_addr_size_from_arch(rdi->top_level_info->architecture), 256);
|
||||
TG_Graph *graph = tg_graph_begin(rdi_addr_size_from_arch(rdi->top_level_info->arch), 256);
|
||||
symbol_name = str8(name_ptr, name_size);
|
||||
symbol_type_string = tg_string_from_key(scratch.arena, graph, rdi, type_key);
|
||||
}
|
||||
|
||||
@@ -5008,6 +5008,7 @@ read_only global U8 df_g_icon_file_bytes__data[] =
|
||||
};
|
||||
|
||||
read_only global String8 df_g_icon_file_bytes = {df_g_icon_file_bytes__data, sizeof(df_g_icon_file_bytes__data)};
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // DF_GFX_META_H
|
||||
|
||||
@@ -15,6 +15,3 @@ internal R_Tex2DSampleKind d_top_tex2d_sample_kind(void) {D_StackTopImp
|
||||
internal Mat3x3F32 d_top_xform2d(void) {D_StackTopImpl(XForm2D, xform2d, Mat3x3F32);}
|
||||
internal Rng2F32 d_top_clip(void) {D_StackTopImpl(Clip, clip, Rng2F32);}
|
||||
internal F32 d_top_transparency(void) {D_StackTopImpl(Transparency, transparency, F32);}
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
@@ -46,7 +46,4 @@ internal F32 d_top_transparency(void);
|
||||
#define D_ClipScope(v) DeferLoop(d_push_clip(v), d_pop_clip())
|
||||
#define D_TransparencyScope(v) DeferLoop(d_push_transparency(v), d_pop_transparency())
|
||||
#endif
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // DRAW_META_H
|
||||
|
||||
@@ -23,7 +23,7 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
|
||||
default:
|
||||
{
|
||||
// compute bytecode advance
|
||||
U8 ctrlbits = rdi_eval_opcode_ctrlbits[opcode];
|
||||
U8 ctrlbits = rdi_eval_op_ctrlbits_table[opcode];
|
||||
U64 extra_byte_count = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
|
||||
|
||||
U8 *next_ptr = ptr + 1 + extra_byte_count;
|
||||
@@ -63,7 +63,7 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
|
||||
|
||||
internal void
|
||||
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RDI_EvalOp opcode, U64 p){
|
||||
U8 ctrlbits = rdi_eval_opcode_ctrlbits[opcode];
|
||||
U8 ctrlbits = rdi_eval_op_ctrlbits_table[opcode];
|
||||
U32 p_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
|
||||
|
||||
EVAL_Op *node = push_array_no_zero(arena, EVAL_Op, 1);
|
||||
@@ -654,7 +654,7 @@ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, EVAL_IRTr
|
||||
TG_Kind out_kind = tg_kind_from_key(out);
|
||||
U8 in_group = eval_type_group_from_kind(in_kind);
|
||||
U8 out_group = eval_type_group_from_kind(out_kind);
|
||||
U32 conversion_rule = rdi_eval_conversion_rule(in_group, out_group);
|
||||
U32 conversion_rule = rdi_eval_conversion_kind_from_typegroups(in_group, out_group);
|
||||
if(conversion_rule == RDI_EvalConversionKind_Legal)
|
||||
{
|
||||
result = eval_irtree_convert_lo(arena, result, out_group, in_group);
|
||||
@@ -1080,7 +1080,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, E
|
||||
// analyze situation
|
||||
U8 in_group = eval_type_group_from_kind(c_restype_kind);
|
||||
U8 out_group = eval_type_group_from_kind(cast_type_kind);
|
||||
RDI_EvalConversionKind conversion_rule = rdi_eval_conversion_rule(in_group, out_group);
|
||||
RDI_EvalConversionKind conversion_rule = rdi_eval_conversion_kind_from_typegroups(in_group, out_group);
|
||||
|
||||
// generate tree
|
||||
switch(conversion_rule)
|
||||
@@ -1107,7 +1107,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, E
|
||||
{
|
||||
String8 text = str8_lit("(internal) unknown conversion rule");
|
||||
if (conversion_rule < RDI_EvalConversionKind_COUNT){
|
||||
text.str = rdi_eval_conversion_message(conversion_rule, &text.size);
|
||||
text.str = rdi_explanation_string_from_eval_conversion_kind(conversion_rule, &text.size);
|
||||
}
|
||||
eval_error(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, text);
|
||||
}break;
|
||||
@@ -1172,7 +1172,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, E
|
||||
B32 can_generate = 0;
|
||||
RDI_EvalOp op = eval_opcode_from_expr_kind(kind);
|
||||
U8 c_group = eval_type_group_from_kind(c_restype_kind);
|
||||
if (!rdi_eval_opcode_type_compatible(op, c_group)){
|
||||
if (!rdi_eval_op_typegroup_are_compatible(op, c_group)){
|
||||
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, "Cannot use this operator on this type.");
|
||||
}
|
||||
else{
|
||||
@@ -1301,7 +1301,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdi, E
|
||||
U8 cv_group = eval_type_group_from_kind(cv_type_kind);
|
||||
|
||||
B32 can_generate = 0;
|
||||
if (rdi_eval_opcode_type_compatible(op, cv_group)){
|
||||
if (rdi_eval_op_typegroup_are_compatible(op, cv_group)){
|
||||
can_generate = 1;
|
||||
}
|
||||
else{
|
||||
@@ -1620,7 +1620,7 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
|
||||
}
|
||||
else{
|
||||
// handle all children
|
||||
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
|
||||
U8 ctrlbits = rdi_eval_op_ctrlbits_table[op];
|
||||
U64 child_count = RDI_POPN_FROM_CTRLBITS(ctrlbits);
|
||||
EVAL_IRTree**child = tree->children;
|
||||
for (U64 i = 0; i < child_count; i += 1, child += 1){
|
||||
|
||||
@@ -27,7 +27,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
|
||||
result.code = EVAL_ResultCode_BadOp;
|
||||
goto done;
|
||||
}
|
||||
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
|
||||
U8 ctrlbits = rdi_eval_op_ctrlbits_table[op];
|
||||
ptr += 1;
|
||||
|
||||
// decode
|
||||
|
||||
+31
-29
@@ -173,7 +173,7 @@ eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdi, U64 voff)
|
||||
*map = eval_string2num_map_make(arena, 64);
|
||||
|
||||
//- rjf: udt -> fill member map
|
||||
if(udt != 0 && !(udt->flags & RDI_UserDefinedTypeFlag_EnumMembers) && rdi->members != 0)
|
||||
if(udt != 0 && !(udt->flags & RDI_UDTFlag_EnumMembers) && rdi->members != 0)
|
||||
{
|
||||
U64 data_member_num = 1;
|
||||
for(U32 member_idx = udt->member_first;
|
||||
@@ -618,7 +618,7 @@ eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text,
|
||||
if(str8_match(token_string, str8_lit("*"), 0))
|
||||
{
|
||||
token_it += 1;
|
||||
parse.expr = eval_expr(arena, EVAL_ExprKind_Ptr, token_string.str, parse.expr, 0, 0);
|
||||
parse.expr = eval_expr(arena, EVAL_ExprKind_Ptr, token_string.str, parse.expr, &eval_expr_nil, &eval_expr_nil);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -797,8 +797,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
it = nested_parse.last_token;
|
||||
|
||||
// rjf: build cast-to-U64*, and dereference operators
|
||||
atom = eval_expr(arena, EVAL_ExprKind_Cast, token_string.str, eval_expr_leaf_type(arena, token_string.str, tg_cons_type_make(ctx->type_graph, TG_Kind_Ptr, tg_key_basic(TG_Kind_U64), 0)), atom, 0);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_Deref, token_string.str, atom, 0, 0);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_Cast, token_string.str, eval_expr_leaf_type(arena, token_string.str, tg_cons_type_make(ctx->type_graph, TG_Kind_Ptr, tg_key_basic(TG_Kind_U64), 0)), atom, &eval_expr_nil);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_Deref, token_string.str, atom, &eval_expr_nil, &eval_expr_nil);
|
||||
|
||||
// rjf: expect ]
|
||||
EVAL_Token close_paren_maybe = eval_token_at_it(it, tokens);
|
||||
@@ -827,14 +827,14 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
B32 mapped_identifier = 0;
|
||||
B32 identifier_type_is_possibly_dynamically_overridden = 0;
|
||||
B32 identifier_looks_like_type_expr = 0;
|
||||
RDI_LocationKind loc_kind = RDI_LocationKind_NULL;
|
||||
RDI_LocationRegister loc_reg = {0};
|
||||
RDI_LocationRegisterPlusU16 loc_reg_u16 = {0};
|
||||
String8 loc_bytecode = {0};
|
||||
REGS_RegCode reg_code = 0;
|
||||
REGS_AliasCode alias_code = 0;
|
||||
TG_Key type_key = zero_struct;
|
||||
String8 local_lookup_string = token_string;
|
||||
RDI_LocationKind loc_kind = RDI_LocationKind_NULL;
|
||||
RDI_LocationReg loc_reg = {0};
|
||||
RDI_LocationRegPlusU16 loc_reg_u16 = {0};
|
||||
String8 loc_bytecode = {0};
|
||||
REGS_RegCode reg_code = 0;
|
||||
REGS_AliasCode alias_code = 0;
|
||||
TG_Key type_key = zero_struct;
|
||||
String8 local_lookup_string = token_string;
|
||||
|
||||
//- rjf: form namespaceified fallback versions of this lookup string
|
||||
String8List namespaceified_token_strings = {0};
|
||||
@@ -911,18 +911,18 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
{
|
||||
break;
|
||||
}
|
||||
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
|
||||
U8 ctrlbits = rdi_eval_op_ctrlbits_table[op];
|
||||
U32 p_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
|
||||
bytecode_size += 1+p_size;
|
||||
}
|
||||
loc_bytecode = str8(bytecode_base, bytecode_size);
|
||||
}break;
|
||||
case RDI_LocationKind_AddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrRegPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegPlusU16:
|
||||
{
|
||||
MemoryCopy(&loc_reg_u16, (ctx->rdi->location_data + block->location_data_off), sizeof(loc_reg_u16));
|
||||
}break;
|
||||
case RDI_LocationKind_ValRegister:
|
||||
case RDI_LocationKind_ValReg:
|
||||
{
|
||||
MemoryCopy(&loc_reg, (ctx->rdi->location_data + block->location_data_off), sizeof(loc_reg));
|
||||
}break;
|
||||
@@ -1134,35 +1134,35 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
{
|
||||
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Value);
|
||||
}break;
|
||||
case RDI_LocationKind_AddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrRegPlusU16:
|
||||
{
|
||||
EVAL_OpList oplist = {0};
|
||||
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.reg_code, byte_size, 0);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ConstU16, loc_reg_u16.offset);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_Add, 0);
|
||||
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
|
||||
}break;
|
||||
case RDI_LocationKind_AddrAddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegPlusU16:
|
||||
{
|
||||
EVAL_OpList oplist = {0};
|
||||
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.reg_code, byte_size, 0);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ConstU16, loc_reg_u16.offset);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_Add, 0);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8);
|
||||
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
|
||||
}break;
|
||||
case RDI_LocationKind_ValRegister:
|
||||
case RDI_LocationKind_ValReg:
|
||||
{
|
||||
REGS_RegCode regs_reg_code = regs_reg_code_from_arch_rdi_code(ctx->arch, loc_reg.register_code);
|
||||
REGS_RegCode regs_reg_code = regs_reg_code_from_arch_rdi_code(ctx->arch, loc_reg.reg_code);
|
||||
REGS_Rng reg_rng = regs_reg_code_rng_table_from_architecture(ctx->arch)[regs_reg_code];
|
||||
EVAL_OpList oplist = {0};
|
||||
U64 byte_size = (U64)reg_rng.byte_size;
|
||||
U64 byte_pos = 0;
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
|
||||
U64 regread_param = RDI_EncodeRegReadParam(loc_reg.reg_code, byte_size, byte_pos);
|
||||
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
|
||||
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Value);
|
||||
}break;
|
||||
@@ -1172,7 +1172,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
if(atom_implicit_member_name.size != 0)
|
||||
{
|
||||
EVAL_Expr *member_expr = eval_expr_leaf_member(arena, atom_implicit_member_name.str, atom_implicit_member_name);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, atom_implicit_member_name.str, atom, member_expr, 0);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, atom_implicit_member_name.str, atom, member_expr, &eval_expr_nil);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1283,7 +1283,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
if(good_member_name)
|
||||
{
|
||||
EVAL_Expr *member_expr = eval_expr_leaf_member(arena, member_name.str, member_name);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, token_string.str, atom, member_expr, 0);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, token_string.str, atom, member_expr, &eval_expr_nil);
|
||||
}
|
||||
|
||||
// rjf: increment past good member names
|
||||
@@ -1311,7 +1311,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
// rjf: valid indexing expression => produce index expr
|
||||
if(idx_expr_parse.expr != &eval_expr_nil)
|
||||
{
|
||||
atom = eval_expr(arena, EVAL_ExprKind_ArrayIndex, token_string.str, atom, idx_expr_parse.expr, 0);
|
||||
atom = eval_expr(arena, EVAL_ExprKind_ArrayIndex, token_string.str, atom, idx_expr_parse.expr, &eval_expr_nil);
|
||||
}
|
||||
|
||||
// rjf: expect ]
|
||||
@@ -1346,7 +1346,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
{
|
||||
atom = eval_expr(arena, prefix_unary->kind, prefix_unary->location,
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? prefix_unary->cast_expr : atom,
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? atom : 0, 0);
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? atom : &eval_expr_nil,
|
||||
&eval_expr_nil);
|
||||
}
|
||||
}
|
||||
else if(atom == 0 && first_prefix_unary != 0)
|
||||
@@ -1359,7 +1360,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
{
|
||||
atom = eval_expr(arena, prefix_unary->kind, prefix_unary->location,
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? prefix_unary->cast_expr : atom,
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? atom : 0, 0);
|
||||
prefix_unary->cast_expr != &eval_expr_nil ? atom : &eval_expr_nil,
|
||||
&eval_expr_nil);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1401,7 +1403,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
|
||||
}
|
||||
else
|
||||
{
|
||||
atom = eval_expr(arena, binary_kind, token_string.str, atom, rhs, 0);
|
||||
atom = eval_expr(arena, binary_kind, token_string.str, atom, rhs, &eval_expr_nil);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ extern U8 eval_expr_kind_child_counts[40];
|
||||
extern String8 eval_expr_kind_strings[40];
|
||||
extern String8 eval_result_code_display_strings[11];
|
||||
extern String8 eval_expr_op_strings[40];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // EVAL_META_H
|
||||
|
||||
+43
-40
@@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
@@ -169,47 +172,47 @@ fp_init(void)
|
||||
}
|
||||
|
||||
//- rjf: make dwrite factory
|
||||
error = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), (IUnknown **)&fp_dwrite_state->factory);
|
||||
error = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (void **)&fp_dwrite_state->factory);
|
||||
|
||||
//- rjf: register static data font "loader" interface
|
||||
error = fp_dwrite_state->factory->RegisterFontFileLoader((IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader);
|
||||
error = IDWriteFactory_RegisterFontFileLoader(fp_dwrite_state->factory, (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader);
|
||||
|
||||
//- rjf: make base rendering params
|
||||
error = fp_dwrite_state->factory->CreateRenderingParams(&fp_dwrite_state->base_rendering_params);
|
||||
error = IDWriteFactory_CreateRenderingParams(fp_dwrite_state->factory, &fp_dwrite_state->base_rendering_params);
|
||||
|
||||
//- rjf: make sharp rendering params
|
||||
{
|
||||
FLOAT gamma = 1.f;
|
||||
FLOAT enhanced_contrast = fp_dwrite_state->base_rendering_params->GetEnhancedContrast();
|
||||
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
|
||||
// FLOAT clear_type_level = fp_dwrite_state->base_rendering_params->GetClearTypeLevel();
|
||||
error = fp_dwrite_state->factory->CreateCustomRenderingParams(gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Sharp]);
|
||||
error = IDWriteFactory_CreateCustomRenderingParams(fp_dwrite_state->factory, gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Sharp]);
|
||||
}
|
||||
|
||||
//- rjf: make smooth rendering params
|
||||
{
|
||||
FLOAT gamma = 1.f;
|
||||
FLOAT enhanced_contrast = fp_dwrite_state->base_rendering_params->GetEnhancedContrast();
|
||||
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
|
||||
// FLOAT clear_type_level = fp_dwrite_state->base_rendering_params->GetClearTypeLevel();
|
||||
error = fp_dwrite_state->factory->CreateCustomRenderingParams(gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Smooth]);
|
||||
error = IDWriteFactory_CreateCustomRenderingParams(fp_dwrite_state->factory, gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Smooth]);
|
||||
}
|
||||
|
||||
//- rjf: make dwrite gdi interop
|
||||
error = fp_dwrite_state->factory->GetGdiInterop(&fp_dwrite_state->gdi_interop);
|
||||
error = IDWriteFactory_GetGdiInterop(fp_dwrite_state->factory, &fp_dwrite_state->gdi_interop);
|
||||
|
||||
//- rjf: build render target for rasterization
|
||||
fp_dwrite_state->bitmap_render_target_dim = v2s32(2048, 256);
|
||||
error = fp_dwrite_state->gdi_interop->CreateBitmapRenderTarget(0, fp_dwrite_state->bitmap_render_target_dim.x, fp_dwrite_state->bitmap_render_target_dim.y, &fp_dwrite_state->bitmap_render_target);
|
||||
fp_dwrite_state->bitmap_render_target->SetPixelsPerDip(1.0);
|
||||
error = IDWriteGdiInterop_CreateBitmapRenderTarget(fp_dwrite_state->gdi_interop, 0, fp_dwrite_state->bitmap_render_target_dim.x, fp_dwrite_state->bitmap_render_target_dim.y, &fp_dwrite_state->bitmap_render_target);
|
||||
IDWriteBitmapRenderTarget_SetPixelsPerDip(fp_dwrite_state->bitmap_render_target, 1.0);
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
@@ -223,10 +226,10 @@ fp_font_open(String8 path)
|
||||
HRESULT error = 0;
|
||||
|
||||
//- rjf: open font file reference
|
||||
error = fp_dwrite_state->factory->CreateFontFileReference((WCHAR *)path16.str, 0, &font.file);
|
||||
error = IDWriteFactory_CreateFontFileReference(fp_dwrite_state->factory, (WCHAR *)path16.str, 0, &font.file);
|
||||
|
||||
//- rjf: open font face
|
||||
error = fp_dwrite_state->factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
error = IDWriteFactory_CreateFontFace(fp_dwrite_state->factory, DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
|
||||
//- rjf: handlify & return
|
||||
FP_Handle handle = fp_dwrite_handle_from_font(font);
|
||||
@@ -244,10 +247,10 @@ fp_font_open_from_static_data_string(String8 *data_ptr)
|
||||
HRESULT error = 0;
|
||||
|
||||
//- rjf: open font file reference
|
||||
error = fp_dwrite_state->factory->CreateCustomFontFileReference(&data_ptr, sizeof(String8 *), (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader, &font.file);
|
||||
error = IDWriteFactory_CreateCustomFontFileReference(fp_dwrite_state->factory, &data_ptr, sizeof(String8 *), (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader, &font.file);
|
||||
|
||||
//- rjf: open font face
|
||||
error = fp_dwrite_state->factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
error = IDWriteFactory_CreateFontFace(fp_dwrite_state->factory, DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
|
||||
//- rjf: handlify & return
|
||||
FP_Handle handle = fp_dwrite_handle_from_font(font);
|
||||
@@ -263,11 +266,11 @@ fp_font_close(FP_Handle handle)
|
||||
FP_DWrite_Font font = fp_dwrite_font_from_handle(handle);
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->Release();
|
||||
IDWriteFontFace_Release(font.face);
|
||||
}
|
||||
if(font.file != 0)
|
||||
{
|
||||
font.file->Release();
|
||||
IDWriteFontFile_Release(font.file);
|
||||
}
|
||||
ProfEnd();
|
||||
}
|
||||
@@ -280,7 +283,7 @@ fp_metrics_from_font(FP_Handle handle)
|
||||
DWRITE_FONT_METRICS metrics = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->GetMetrics(&metrics);
|
||||
IDWriteFontFace_GetMetrics(font.face, &metrics);
|
||||
}
|
||||
FP_Metrics result = {0};
|
||||
{
|
||||
@@ -309,7 +312,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
DWRITE_FONT_METRICS font_metrics = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->GetMetrics(&font_metrics);
|
||||
IDWriteFontFace_GetMetrics(font.face, &font_metrics);
|
||||
}
|
||||
F32 design_units_per_em = (F32)font_metrics.designUnitsPerEm;
|
||||
|
||||
@@ -317,7 +320,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
U16 *glyph_indices = push_array_no_zero(scratch.arena, U16, string32.size);
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = font.face->GetGlyphIndices(string32.str, string32.size, glyph_indices);
|
||||
error = IDWriteFontFace_GetGlyphIndices(font.face, string32.str, string32.size, glyph_indices);
|
||||
}
|
||||
|
||||
//- rjf: get metrics info
|
||||
@@ -325,7 +328,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
DWRITE_GLYPH_METRICS *glyphs_metrics = push_array_no_zero(scratch.arena, DWRITE_GLYPH_METRICS, glyphs_count);
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = font.face->GetGdiCompatibleGlyphMetrics((96.f/72.f)*size, 1.f, 0, 1, glyph_indices, glyphs_count, glyphs_metrics, 0);
|
||||
error = IDWriteFontFace_GetGdiCompatibleGlyphMetrics(font.face, (96.f/72.f)*size, 1.f, 0, 1, glyph_indices, glyphs_count, glyphs_metrics, 0);
|
||||
}
|
||||
|
||||
//- rjf: derive info from metrics
|
||||
@@ -352,15 +355,15 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
IDWriteBitmapRenderTarget *render_target = 0;
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = fp_dwrite_state->gdi_interop->CreateBitmapRenderTarget(0, atlas_dim.x, atlas_dim.y, &render_target);
|
||||
render_target->SetPixelsPerDip(1.0);
|
||||
error = IDWriteGdiInterop_CreateBitmapRenderTarget(fp_dwrite_state->gdi_interop, 0, atlas_dim.x, atlas_dim.y, &render_target);
|
||||
IDWriteBitmapRenderTarget_SetPixelsPerDip(render_target, 1.f);
|
||||
}
|
||||
|
||||
//- rjf: get bitmap & clear
|
||||
HDC dc = 0;
|
||||
if(font.face != 0)
|
||||
{
|
||||
dc = render_target->GetMemoryDC();
|
||||
dc = IDWriteBitmapRenderTarget_GetMemoryDC(render_target);
|
||||
HGDIOBJ original = SelectObject(dc, GetStockObject(DC_PEN));
|
||||
SetDCPenColor(dc, bg_color);
|
||||
SelectObject(dc, GetStockObject(DC_BRUSH));
|
||||
@@ -388,12 +391,12 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
RECT bounding_box = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = render_target->DrawGlyphRun(draw_p.x, draw_p.y,
|
||||
DWRITE_MEASURING_MODE_NATURAL,
|
||||
&glyph_run,
|
||||
fp_dwrite_state->rendering_params[mode],
|
||||
fg_color,
|
||||
&bounding_box);
|
||||
error = IDWriteBitmapRenderTarget_DrawGlyphRun(render_target, draw_p.x, draw_p.y,
|
||||
DWRITE_MEASURING_MODE_NATURAL,
|
||||
&glyph_run,
|
||||
fp_dwrite_state->rendering_params[mode],
|
||||
fg_color,
|
||||
&bounding_box);
|
||||
}
|
||||
|
||||
//- rjf: get bitmap
|
||||
@@ -446,7 +449,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
result.atlas_dim = v2s16(0, 0);
|
||||
}
|
||||
}
|
||||
render_target->Release();
|
||||
IDWriteBitmapRenderTarget_Release(render_target);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
ProfEnd();
|
||||
@@ -1,21 +1,206 @@
|
||||
/* date = November 2nd 2022 11:31 am */
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef FONT_PROVIDER_DWRITE_H
|
||||
#define FONT_PROVIDER_DWRITE_H
|
||||
|
||||
#include <dwrite.h>
|
||||
|
||||
#pragma comment(lib, "gdi32.lib")
|
||||
#pragma comment(lib, "dwrite.lib")
|
||||
|
||||
// #include <dwrite.h>
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (C) DirectWrite Definitions
|
||||
//
|
||||
// (courtesy of mmozeiko, Martins Mozeiko, https://github.com/mmozeiko/c_d2d_dwrite)
|
||||
//
|
||||
// This is free and unencumbered software released into the public domain.
|
||||
//
|
||||
// Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
// distribute this software, either in source code form or as a compiled
|
||||
// binary, for any purpose, commercial or non-commercial, and by any
|
||||
// means.
|
||||
//
|
||||
// In jurisdictions that recognize copyright laws, the author or authors
|
||||
// of this software dedicate any and all copyright interest in the
|
||||
// software to the public domain. We make this dedication for the benefit
|
||||
// of the public at large and to the detriment of our heirs and
|
||||
// successors. We intend this dedication to be an overt act of
|
||||
// relinquishment in perpetuity of all present and future rights to this
|
||||
// software under copyright law.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
// OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// For more information, please refer to <https://unlicense.org>
|
||||
|
||||
#include <combaseapi.h>
|
||||
#include <dcommon.h>
|
||||
#include <initguid.h>
|
||||
|
||||
//- rjf: enums
|
||||
|
||||
typedef enum DWRITE_FACTORY_TYPE {
|
||||
DWRITE_FACTORY_TYPE_SHARED = 0,
|
||||
DWRITE_FACTORY_TYPE_ISOLATED = 1,
|
||||
} DWRITE_FACTORY_TYPE;
|
||||
|
||||
typedef enum DWRITE_PIXEL_GEOMETRY {
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT = 0,
|
||||
DWRITE_PIXEL_GEOMETRY_RGB = 1,
|
||||
DWRITE_PIXEL_GEOMETRY_BGR = 2,
|
||||
} DWRITE_PIXEL_GEOMETRY;
|
||||
|
||||
typedef enum DWRITE_RENDERING_MODE {
|
||||
DWRITE_RENDERING_MODE_DEFAULT = 0,
|
||||
DWRITE_RENDERING_MODE_ALIASED = 1,
|
||||
DWRITE_RENDERING_MODE_GDI_CLASSIC = 2,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL = 3,
|
||||
DWRITE_RENDERING_MODE_NATURAL = 4,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC = 5,
|
||||
DWRITE_RENDERING_MODE_OUTLINE = 6,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = 2,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = 3,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = 4,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = 5,
|
||||
} DWRITE_RENDERING_MODE;
|
||||
|
||||
typedef enum DWRITE_FONT_SIMULATIONS {
|
||||
DWRITE_FONT_SIMULATIONS_NONE = 0,
|
||||
DWRITE_FONT_SIMULATIONS_BOLD = 1,
|
||||
DWRITE_FONT_SIMULATIONS_OBLIQUE = 2,
|
||||
} DWRITE_FONT_SIMULATIONS;
|
||||
|
||||
typedef enum DWRITE_FONT_FACE_TYPE {
|
||||
DWRITE_FONT_FACE_TYPE_CFF = 0,
|
||||
DWRITE_FONT_FACE_TYPE_TRUETYPE = 1,
|
||||
DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION = 2,
|
||||
DWRITE_FONT_FACE_TYPE_TYPE1 = 3,
|
||||
DWRITE_FONT_FACE_TYPE_VECTOR = 4,
|
||||
DWRITE_FONT_FACE_TYPE_BITMAP = 5,
|
||||
DWRITE_FONT_FACE_TYPE_UNKNOWN = 6,
|
||||
DWRITE_FONT_FACE_TYPE_RAW_CFF = 7,
|
||||
DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = 2,
|
||||
} DWRITE_FONT_FACE_TYPE;
|
||||
|
||||
//- rjf: interfaces
|
||||
|
||||
typedef struct IDWriteFactory { struct { void* tbl[]; }* v; } IDWriteFactory;
|
||||
typedef struct IDWriteFactory1 { struct { void* tbl[]; }* v; } IDWriteFactory1;
|
||||
typedef struct IDWriteFactory2 { struct { void* tbl[]; }* v; } IDWriteFactory2;
|
||||
typedef struct IDWriteRenderingParams { struct { void* tbl[]; }* v; } IDWriteRenderingParams;
|
||||
typedef struct IDWriteRenderingParams1 { struct { void* tbl[]; }* v; } IDWriteRenderingParams1;
|
||||
typedef struct IDWriteRenderingParams2 { struct { void* tbl[]; }* v; } IDWriteRenderingParams2;
|
||||
typedef struct IDWriteFontFileLoader { struct { void* tbl[]; }* v; } IDWriteFontFileLoader;
|
||||
typedef struct IDWriteFontFileStream { struct { void* tbl[]; }* v; } IDWriteFontFileStream;
|
||||
typedef struct IDWriteFontFile { struct { void* tbl[]; }* v; } IDWriteFontFile;
|
||||
typedef struct IDWriteFontFace { struct { void* tbl[]; }* v; } IDWriteFontFace;
|
||||
typedef struct IDWriteFontFace1 { struct { void* tbl[]; }* v; } IDWriteFontFace1;
|
||||
typedef struct IDWriteFontFace2 { struct { void* tbl[]; }* v; } IDWriteFontFace2;
|
||||
typedef struct IDWriteGdiInterop { struct { void* tbl[]; }* v; } IDWriteGdiInterop;
|
||||
typedef struct IDWriteBitmapRenderTarget { struct { void* tbl[]; }* v; } IDWriteBitmapRenderTarget;
|
||||
typedef struct IDWriteBitmapRenderTarget1 { struct { void* tbl[]; }* v; } IDWriteBitmapRenderTarget1;
|
||||
|
||||
//- rjf: structs
|
||||
|
||||
typedef struct DWRITE_GLYPH_METRICS {
|
||||
INT32 leftSideBearing;
|
||||
UINT32 advanceWidth;
|
||||
INT32 rightSideBearing;
|
||||
INT32 topSideBearing;
|
||||
UINT32 advanceHeight;
|
||||
INT32 bottomSideBearing;
|
||||
INT32 verticalOriginY;
|
||||
} DWRITE_GLYPH_METRICS;
|
||||
|
||||
typedef struct DWRITE_GLYPH_OFFSET {
|
||||
FLOAT advanceOffset;
|
||||
FLOAT ascenderOffset;
|
||||
} DWRITE_GLYPH_OFFSET;
|
||||
|
||||
typedef struct DWRITE_GLYPH_RUN {
|
||||
IDWriteFontFace* fontFace;
|
||||
FLOAT fontEmSize;
|
||||
UINT32 glyphCount;
|
||||
UINT16* glyphIndices;
|
||||
FLOAT* glyphAdvances;
|
||||
DWRITE_GLYPH_OFFSET* glyphOffsets;
|
||||
BOOL isSideways;
|
||||
UINT32 bidiLevel;
|
||||
} DWRITE_GLYPH_RUN;
|
||||
|
||||
typedef struct DWRITE_FONT_METRICS {
|
||||
UINT16 designUnitsPerEm;
|
||||
UINT16 ascent;
|
||||
UINT16 descent;
|
||||
INT16 lineGap;
|
||||
UINT16 capHeight;
|
||||
UINT16 xHeight;
|
||||
INT16 underlinePosition;
|
||||
UINT16 underlineThickness;
|
||||
INT16 strikethroughPosition;
|
||||
UINT16 strikethroughThickness;
|
||||
} DWRITE_FONT_METRICS;
|
||||
|
||||
typedef struct DWRITE_MATRIX {
|
||||
FLOAT m11;
|
||||
FLOAT m12;
|
||||
FLOAT m21;
|
||||
FLOAT m22;
|
||||
FLOAT dx;
|
||||
FLOAT dy;
|
||||
} DWRITE_MATRIX;
|
||||
|
||||
//- rjf: GUIDs
|
||||
|
||||
DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48);
|
||||
DEFINE_GUID(IID_IDWriteFactory1, 0x30572f99, 0xdac6, 0x41db, 0xa1, 0x6e, 0x04, 0x86, 0x30, 0x7e, 0x60, 0x6a);
|
||||
DEFINE_GUID(IID_IDWriteFactory2, 0x0439fc60, 0xca44, 0x4994, 0x8d, 0xee, 0x3a, 0x9a, 0xf7, 0xb7, 0x32, 0xec);
|
||||
|
||||
//- rjf: functions
|
||||
|
||||
EXTERN_C HRESULT DECLSPEC_IMPORT WINAPI DWriteCreateFactory (DWRITE_FACTORY_TYPE factoryType, const GUID* iid, void** factory);
|
||||
|
||||
//- rjf: methods
|
||||
|
||||
static inline HRESULT IDWriteFactory_RegisterFontFileLoader (IDWriteFactory* this_, IDWriteFontFileLoader* fontFileLoader) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteFontFileLoader*))this_->v->tbl[13])(this_, fontFileLoader); }
|
||||
static inline HRESULT IDWriteFactory_CreateRenderingParams (IDWriteFactory* this_, IDWriteRenderingParams** renderingParams) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteRenderingParams**))this_->v->tbl[10])(this_, renderingParams); }
|
||||
static inline HRESULT IDWriteFactory_CreateCustomRenderingParams (IDWriteFactory* this_, FLOAT gamma, FLOAT enhancedContrast, FLOAT clearTypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE renderingMode, IDWriteRenderingParams** renderingParams) { return ((HRESULT (WINAPI*)(IDWriteFactory*, FLOAT, FLOAT, FLOAT, DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE, IDWriteRenderingParams**))this_->v->tbl[12])(this_, gamma, enhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, renderingParams); }
|
||||
static inline HRESULT IDWriteFactory_GetGdiInterop (IDWriteFactory* this_, IDWriteGdiInterop** gdiInterop) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteGdiInterop**))this_->v->tbl[17])(this_, gdiInterop); }
|
||||
static inline HRESULT IDWriteFactory_CreateCustomFontFileReference (IDWriteFactory* this_, const void* fontFileReferenceKey, UINT32 fontFileReferenceKeySize, IDWriteFontFileLoader* fontFileLoader, IDWriteFontFile** fontFile) { return ((HRESULT (WINAPI*)(IDWriteFactory*, const void*, UINT32, IDWriteFontFileLoader*, IDWriteFontFile**))this_->v->tbl[8])(this_, fontFileReferenceKey, fontFileReferenceKeySize, fontFileLoader, fontFile); }
|
||||
static inline FLOAT IDWriteRenderingParams_GetEnhancedContrast (IDWriteRenderingParams* this__) { return ((FLOAT (WINAPI*)(IDWriteRenderingParams*))this__->v->tbl[4])(this__); }
|
||||
static inline HRESULT IDWriteGdiInterop_CreateBitmapRenderTarget (IDWriteGdiInterop* this_, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget** renderTarget) { return ((HRESULT (WINAPI*)(IDWriteGdiInterop*, HDC, UINT32, UINT32, IDWriteBitmapRenderTarget**))this_->v->tbl[7])(this_, hdc, width, height, renderTarget); }
|
||||
static inline HRESULT IDWriteBitmapRenderTarget_SetPixelsPerDip (IDWriteBitmapRenderTarget* this_, FLOAT pixelsPerDip) { return ((HRESULT (WINAPI*)(IDWriteBitmapRenderTarget*, FLOAT))this_->v->tbl[6])(this_, pixelsPerDip); }
|
||||
static inline HDC IDWriteBitmapRenderTarget_GetMemoryDC (IDWriteBitmapRenderTarget* this_) { return ((HDC (WINAPI*)(IDWriteBitmapRenderTarget*))this_->v->tbl[4])(this_); }
|
||||
static inline HRESULT IDWriteBitmapRenderTarget_DrawGlyphRun (IDWriteBitmapRenderTarget* this_, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, const DWRITE_GLYPH_RUN* glyphRun, IDWriteRenderingParams* renderingParams, COLORREF textColor, RECT* blackBoxRect) { return ((HRESULT (WINAPI*)(IDWriteBitmapRenderTarget*, FLOAT, FLOAT, DWRITE_MEASURING_MODE, const DWRITE_GLYPH_RUN*, IDWriteRenderingParams*, COLORREF, RECT*))this_->v->tbl[3])(this_, baselineOriginX, baselineOriginY, measuringMode, glyphRun, renderingParams, textColor, blackBoxRect); }
|
||||
static inline HRESULT IDWriteFactory_CreateFontFileReference (IDWriteFactory* this_, const WCHAR* filePath, const FILETIME* lastWriteTime, IDWriteFontFile** fontFile) { return ((HRESULT (WINAPI*)(IDWriteFactory*, const WCHAR*, const FILETIME*, IDWriteFontFile**))this_->v->tbl[7])(this_, filePath, lastWriteTime, fontFile); }
|
||||
static inline HRESULT IDWriteFactory_CreateFontFace (IDWriteFactory* this_, DWRITE_FONT_FACE_TYPE fontFaceType, UINT32 numberOfFiles, IDWriteFontFile** fontFiles, UINT32 faceIndex, DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags, IDWriteFontFace** fontFace) { return ((HRESULT (WINAPI*)(IDWriteFactory*, DWRITE_FONT_FACE_TYPE, UINT32, IDWriteFontFile**, UINT32, DWRITE_FONT_SIMULATIONS, IDWriteFontFace**))this_->v->tbl[9])(this_, fontFaceType, numberOfFiles, fontFiles, faceIndex, fontFaceSimulationFlags, fontFace); }
|
||||
static inline UINT32 IDWriteFontFace_Release (IDWriteFontFace* this_) { return ((UINT32 (WINAPI*)(IDWriteFontFace*))this_->v->tbl[2])(this_); }
|
||||
static inline void IDWriteFontFace_GetMetrics (IDWriteFontFace* this_, DWRITE_FONT_METRICS* fontFaceMetrics) { ((void (WINAPI*)(IDWriteFontFace*, DWRITE_FONT_METRICS*))this_->v->tbl[8])(this_, fontFaceMetrics); }
|
||||
static inline UINT32 IDWriteFontFile_Release (IDWriteFontFile* this_) { return ((UINT32 (WINAPI*)(IDWriteFontFile*))this_->v->tbl[2])(this_); }
|
||||
static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this_, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this_->v->tbl[11])(this_, codePoints, codePointCount, glyphIndices); }
|
||||
static inline HRESULT IDWriteFontFace_GetGdiCompatibleGlyphMetrics (IDWriteFontFace* this_, FLOAT emSize, FLOAT pixelsPerDip, const DWRITE_MATRIX* transform, BOOL useGdiNatural, const UINT16* glyphIndices, UINT32 glyphCount, DWRITE_GLYPH_METRICS* glyphMetrics, BOOL isSideways) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, FLOAT, FLOAT, const DWRITE_MATRIX*, BOOL, const UINT16*, UINT32, DWRITE_GLYPH_METRICS*, BOOL))this_->v->tbl[17])(this_, emSize, pixelsPerDip, transform, useGdiNatural, glyphIndices, glyphCount, glyphMetrics, isSideways); }
|
||||
static inline UINT32 IDWriteBitmapRenderTarget_Release (IDWriteBitmapRenderTarget* this_) { return ((UINT32 (WINAPI*)(IDWriteBitmapRenderTarget*))this_->v->tbl[2])(this_); }
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Font Provider Implementation Types
|
||||
|
||||
//- rjf: font file loader interface types
|
||||
|
||||
typedef struct FP_DWrite_FontFileLoader FP_DWrite_FontFileLoader;
|
||||
typedef struct FP_DWrite_FontFileLoaderVTable FP_DWrite_FontFileLoaderVTable;
|
||||
|
||||
struct FP_DWrite_FontFileLoaderVTable
|
||||
{
|
||||
HRESULT (*QueryInterface)(void *obj, REFIID riid, void *ptr_to_object);
|
||||
ULONG (*AddRef)(void *obj);
|
||||
ULONG (*Release)(void *obj);
|
||||
HRESULT (*CreateStreamFromKey)(struct FP_DWrite_FontFileLoader *loader, void const *font_file_ref_key, UINT32 font_file_ref_key_size, IDWriteFontFileStream **stream_out);
|
||||
HRESULT (*CreateStreamFromKey)(FP_DWrite_FontFileLoader *loader, void const *font_file_ref_key, UINT32 font_file_ref_key_size, IDWriteFontFileStream **stream_out);
|
||||
};
|
||||
|
||||
struct FP_DWrite_FontFileLoader
|
||||
@@ -25,15 +210,19 @@ struct FP_DWrite_FontFileLoader
|
||||
|
||||
//- rjf: font file stream interface types
|
||||
|
||||
typedef struct FP_DWrite_FontFileStream FP_DWrite_FontFileStream;
|
||||
typedef struct FP_DWrite_FontFileStreamVTable FP_DWrite_FontFileStreamVTable;
|
||||
typedef struct FP_DWrite_FontFileStreamNode FP_DWrite_FontFileStreamNode;
|
||||
|
||||
struct FP_DWrite_FontFileStreamVTable
|
||||
{
|
||||
HRESULT (*QueryInterface)(void *obj, REFIID riid, void *ptr_to_object);
|
||||
ULONG (*AddRef)(void *obj);
|
||||
ULONG (*Release)(void *obj);
|
||||
HRESULT (*ReadFileFragment)(struct FP_DWrite_FontFileStream *obj, void const **fragment_start, UINT64 file_offset, UINT64 fragment_size, void **fragment_context);
|
||||
HRESULT (*ReleaseFileFragment)(struct FP_DWrite_FontFileStream *obj, void *fragment_context);
|
||||
HRESULT (*GetFileSize)(struct FP_DWrite_FontFileStream *obj, UINT64 *size_out);
|
||||
HRESULT (*GetLastWriteTime)(struct FP_DWrite_FontFileStream *obj, UINT64 *time_out);
|
||||
HRESULT (*ReadFileFragment)(FP_DWrite_FontFileStream *obj, void const **fragment_start, UINT64 file_offset, UINT64 fragment_size, void **fragment_context);
|
||||
HRESULT (*ReleaseFileFragment)(FP_DWrite_FontFileStream *obj, void *fragment_context);
|
||||
HRESULT (*GetFileSize)(FP_DWrite_FontFileStream *obj, UINT64 *size_out);
|
||||
HRESULT (*GetLastWriteTime)(FP_DWrite_FontFileStream *obj, UINT64 *time_out);
|
||||
};
|
||||
|
||||
struct FP_DWrite_FontFileStream
|
||||
@@ -51,6 +240,7 @@ struct FP_DWrite_FontFileStreamNode
|
||||
|
||||
//- rjf: state & underlying handle types
|
||||
|
||||
typedef struct FP_DWrite_State FP_DWrite_State;
|
||||
struct FP_DWrite_State
|
||||
{
|
||||
Arena *arena;
|
||||
@@ -65,6 +255,7 @@ struct FP_DWrite_State
|
||||
FP_DWrite_FontFileStreamNode *free_stream_node;
|
||||
};
|
||||
|
||||
typedef struct FP_DWrite_Font FP_DWrite_Font;
|
||||
struct FP_DWrite_Font
|
||||
{
|
||||
IDWriteFontFile *file;
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#define BUILD_SUPPLEMENTARY_UNIT 1
|
||||
|
||||
#include "base/base_inc.h"
|
||||
#include "os/os_inc.h"
|
||||
#include "font_provider/font_provider.h"
|
||||
|
||||
#include "font_provider_dwrite.h"
|
||||
#include "font_provider_dwrite.cpp"
|
||||
|
||||
#include "base/base_inc.c"
|
||||
#include "os/os_inc.c"
|
||||
#include "font_provider/font_provider.c"
|
||||
@@ -3,10 +3,8 @@
|
||||
|
||||
#include "font_provider.c"
|
||||
|
||||
#if LANG_CPP
|
||||
# if FP_BACKEND == FP_BACKEND_DWRITE
|
||||
# include "dwrite/font_provider_dwrite.cpp"
|
||||
# else
|
||||
# error Font provider backend not specified.
|
||||
# endif
|
||||
#if FP_BACKEND == FP_BACKEND_DWRITE
|
||||
# include "dwrite/font_provider_dwrite.c"
|
||||
#else
|
||||
# error Font provider backend not specified.
|
||||
#endif
|
||||
|
||||
@@ -24,12 +24,10 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Backend Includes
|
||||
|
||||
#if LANG_CPP
|
||||
# if FP_BACKEND == FP_BACKEND_DWRITE
|
||||
# include "dwrite/font_provider_dwrite.h"
|
||||
# else
|
||||
# error Font provider backend not specified.
|
||||
# endif
|
||||
#if FP_BACKEND == FP_BACKEND_DWRITE
|
||||
# include "dwrite/font_provider_dwrite.h"
|
||||
#else
|
||||
# error Font provider backend not specified.
|
||||
#endif
|
||||
|
||||
#endif // FONT_PROVIDER_INC_H
|
||||
|
||||
+155
-56
@@ -1,85 +1,174 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
// Functions
|
||||
////////////////////////////////////////////////////////////////
|
||||
//~ RAD Debug Info, (R)AD(D)BG(I) Format Library
|
||||
//
|
||||
// Defines standard RDI debug information format types and
|
||||
// functions.
|
||||
|
||||
#ifndef RDI_FORMAT_C
|
||||
#define RDI_FORMAT_C
|
||||
|
||||
RDI_U8 rdi_eval_op_ctrlbits_table[45] =
|
||||
{
|
||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 0),
|
||||
RDI_EVAL_CTRLBITS(1, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(0, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(1, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(2, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(8, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(2, 1, 1),
|
||||
RDI_EVAL_CTRLBITS(1, 0, 1),
|
||||
RDI_EVAL_CTRLBITS(0, 1, 0),
|
||||
RDI_EVAL_CTRLBITS(1, 0, 0),
|
||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||
};
|
||||
|
||||
struct {RDI_EvalConversionKind dst_typegroups[RDI_EvalTypeGroup_COUNT];} rdi_eval_typegroup_conversion_kind_matrix[6] =
|
||||
{
|
||||
{{RDI_EvalConversionKind_OtherToOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther}},
|
||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal}},
|
||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop}},
|
||||
{{RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop}},
|
||||
};
|
||||
|
||||
struct {RDI_U8 *str; RDI_U64 size;} rdi_eval_conversion_kind_message_string_table[6] =
|
||||
{
|
||||
{(RDI_U8 *)"Other", sizeof("Other")},
|
||||
{(RDI_U8 *)"U", sizeof("U")},
|
||||
{(RDI_U8 *)"S", sizeof("S")},
|
||||
{(RDI_U8 *)"F32", sizeof("F32")},
|
||||
{(RDI_U8 *)"F64", sizeof("F64")},
|
||||
{(RDI_U8 *)"COUNT", sizeof("COUNT")},
|
||||
};
|
||||
|
||||
RDI_PROC RDI_U64
|
||||
rdi_hash(RDI_U8 *ptr, RDI_U64 size){
|
||||
rdi_hash(RDI_U8 *ptr, RDI_U64 size)
|
||||
{
|
||||
RDI_U64 result = 5381;
|
||||
RDI_U8 *opl = ptr + size;
|
||||
for (; ptr < opl; ptr += 1){
|
||||
for(;ptr < opl; ptr += 1)
|
||||
{
|
||||
result = ((result << 5) + result) + *ptr;
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
RDI_PROC RDI_U32
|
||||
rdi_size_from_basic_type_kind(RDI_TypeKind kind){
|
||||
RDI_U32 result = 0;
|
||||
switch (kind){
|
||||
#define X(N,C)
|
||||
#define XZ(N,C,Z) case C: result = Z; break;
|
||||
#define Y(A,N)
|
||||
RDI_TypeKindXList(X,XZ,Y)
|
||||
#undef X
|
||||
#undef XZ
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
rdi_size_from_basic_type_kind(RDI_TypeKind kind)
|
||||
{
|
||||
RDI_U32 result = 0;
|
||||
switch(kind)
|
||||
{
|
||||
default:{}break;
|
||||
case RDI_TypeKind_Handle:{result = 0xFFFFFFFF;}break;
|
||||
case RDI_TypeKind_Char8:{result = 1;}break;
|
||||
case RDI_TypeKind_Char16:{result = 2;}break;
|
||||
case RDI_TypeKind_Char32:{result = 4;}break;
|
||||
case RDI_TypeKind_UChar8:{result = 1;}break;
|
||||
case RDI_TypeKind_UChar16:{result = 2;}break;
|
||||
case RDI_TypeKind_UChar32:{result = 4;}break;
|
||||
case RDI_TypeKind_U8:{result = 1;}break;
|
||||
case RDI_TypeKind_U16:{result = 2;}break;
|
||||
case RDI_TypeKind_U32:{result = 4;}break;
|
||||
case RDI_TypeKind_U64:{result = 8;}break;
|
||||
case RDI_TypeKind_U128:{result = 16;}break;
|
||||
case RDI_TypeKind_U256:{result = 32;}break;
|
||||
case RDI_TypeKind_U512:{result = 64;}break;
|
||||
case RDI_TypeKind_S8:{result = 1;}break;
|
||||
case RDI_TypeKind_S16:{result = 2;}break;
|
||||
case RDI_TypeKind_S32:{result = 4;}break;
|
||||
case RDI_TypeKind_S64:{result = 8;}break;
|
||||
case RDI_TypeKind_S128:{result = 16;}break;
|
||||
case RDI_TypeKind_S256:{result = 32;}break;
|
||||
case RDI_TypeKind_S512:{result = 64;}break;
|
||||
case RDI_TypeKind_Bool:{result = 1;}break;
|
||||
case RDI_TypeKind_F16:{result = 2;}break;
|
||||
case RDI_TypeKind_F32:{result = 4;}break;
|
||||
case RDI_TypeKind_F32PP:{result = 4;}break;
|
||||
case RDI_TypeKind_F48:{result = 6;}break;
|
||||
case RDI_TypeKind_F64:{result = 8;}break;
|
||||
case RDI_TypeKind_F80:{result = 10;}break;
|
||||
case RDI_TypeKind_F128:{result = 16;}break;
|
||||
case RDI_TypeKind_ComplexF32:{result = 8;}break;
|
||||
case RDI_TypeKind_ComplexF64:{result = 16;}break;
|
||||
case RDI_TypeKind_ComplexF80:{result = 20;}break;
|
||||
case RDI_TypeKind_ComplexF128:{result = 32;}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
RDI_PROC RDI_U32
|
||||
rdi_addr_size_from_arch(RDI_Arch arch){
|
||||
RDI_U32 result = 0;
|
||||
switch (arch){
|
||||
#define X(N,C,Z) case C: result = Z; break;
|
||||
RDI_ArchXList(X)
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
rdi_addr_size_from_arch(RDI_Arch arch)
|
||||
{
|
||||
RDI_U32 result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
default:{}break;
|
||||
case RDI_Arch_X86:{result = 4;}break;
|
||||
case RDI_Arch_X64:{result = 8;}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//- eval helpers
|
||||
|
||||
RDI_PROC RDI_EvalConversionKind
|
||||
rdi_eval_conversion_rule(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out){
|
||||
RDI_EvalConversionKind result = 0;
|
||||
switch (in + (out << 8)){
|
||||
#define Y(i,o) case ((RDI_EvalTypeGroup_##i) + ((RDI_EvalTypeGroup_##o) << 8)):
|
||||
#define Xb(c)
|
||||
#define Xe(c) result = RDI_EvalConversionKind_##c; break;
|
||||
RDI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
|
||||
#undef Xe
|
||||
#undef Xb
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
RDI_PROC RDI_U8*
|
||||
rdi_eval_conversion_message(RDI_EvalConversionKind conversion_kind, RDI_U64 *lenout){
|
||||
RDI_U8 *result = 0;
|
||||
switch (conversion_kind){
|
||||
#define X(N,msg) \
|
||||
case RDI_EvalConversionKind_##N: result = (RDI_U8*)msg; *lenout = sizeof(msg) - 1; break;
|
||||
RDI_EvalConversionKindXList(X)
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out)
|
||||
{
|
||||
RDI_EvalConversionKind k = rdi_eval_typegroup_conversion_kind_matrix[in].dst_typegroups[out];
|
||||
return k;
|
||||
}
|
||||
|
||||
RDI_PROC RDI_S32
|
||||
rdi_eval_opcode_type_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group){
|
||||
rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group)
|
||||
{
|
||||
RDI_S32 result = 0;
|
||||
switch (op){
|
||||
switch(op)
|
||||
{
|
||||
case RDI_EvalOp_Neg: case RDI_EvalOp_Add: case RDI_EvalOp_Sub:
|
||||
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
|
||||
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
|
||||
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
|
||||
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
|
||||
{
|
||||
if (group != RDI_EvalTypeGroup_Other){
|
||||
if(group != RDI_EvalTypeGroup_Other)
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
}break;
|
||||
@@ -88,10 +177,20 @@ rdi_eval_opcode_type_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group){
|
||||
case RDI_EvalOp_BitOr:case RDI_EvalOp_LogNot:case RDI_EvalOp_LogAnd:
|
||||
case RDI_EvalOp_LogOr:
|
||||
{
|
||||
if (group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U){
|
||||
if(group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U)
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
RDI_PROC RDI_U8 *
|
||||
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out)
|
||||
{
|
||||
*size_out = rdi_eval_conversion_kind_message_string_table[kind].size;
|
||||
return rdi_eval_conversion_kind_message_string_table[kind].str;
|
||||
}
|
||||
|
||||
#endif // RDI_FORMAT_C
|
||||
|
||||
+904
-822
File diff suppressed because it is too large
Load Diff
+16
-16
@@ -844,7 +844,7 @@ rdim_scope_push_local(RDIM_Arena *arena, RDIM_ScopeChunkList *scopes, RDIM_Scope
|
||||
RDI_PROC void
|
||||
rdim_bytecode_push_op(RDIM_Arena *arena, RDIM_EvalBytecode *bytecode, RDI_EvalOp op, RDI_U64 p)
|
||||
{
|
||||
RDI_U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
|
||||
RDI_U8 ctrlbits = rdi_eval_op_ctrlbits_table[op];
|
||||
RDI_U32 p_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
|
||||
|
||||
RDIM_EvalBytecodeOp *node = rdim_push_array(arena, RDIM_EvalBytecodeOp, 1);
|
||||
@@ -945,8 +945,8 @@ RDI_PROC RDIM_Location *
|
||||
rdim_push_location_addr_reg_plus_u16(RDIM_Arena *arena, RDI_U8 reg_code, RDI_U16 offset)
|
||||
{
|
||||
RDIM_Location *result = rdim_push_array(arena, RDIM_Location, 1);
|
||||
result->kind = RDI_LocationKind_AddrRegisterPlusU16;
|
||||
result->register_code = reg_code;
|
||||
result->kind = RDI_LocationKind_AddrRegPlusU16;
|
||||
result->reg_code = reg_code;
|
||||
result->offset = offset;
|
||||
return result;
|
||||
}
|
||||
@@ -955,8 +955,8 @@ RDI_PROC RDIM_Location *
|
||||
rdim_push_location_addr_addr_reg_plus_u16(RDIM_Arena *arena, RDI_U8 reg_code, RDI_U16 offset)
|
||||
{
|
||||
RDIM_Location *result = rdim_push_array(arena, RDIM_Location, 1);
|
||||
result->kind = RDI_LocationKind_AddrAddrRegisterPlusU16;
|
||||
result->register_code = reg_code;
|
||||
result->kind = RDI_LocationKind_AddrAddrRegPlusU16;
|
||||
result->reg_code = reg_code;
|
||||
result->offset = offset;
|
||||
return result;
|
||||
}
|
||||
@@ -965,8 +965,8 @@ RDI_PROC RDIM_Location *
|
||||
rdim_push_location_val_reg(RDIM_Arena *arena, RDI_U8 reg_code)
|
||||
{
|
||||
RDIM_Location *result = rdim_push_array(arena, RDIM_Location, 1);
|
||||
result->kind = RDI_LocationKind_ValRegister;
|
||||
result->register_code = reg_code;
|
||||
result->kind = RDI_LocationKind_ValReg;
|
||||
result->reg_code = reg_code;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2140,7 +2140,7 @@ rdim_bake_top_level_info_section_list_from_params(RDIM_Arena *arena, RDIM_BakeSt
|
||||
RDIM_BakeSectionList sections = {0};
|
||||
RDI_TopLevelInfo *dst_tli = rdim_push_array(arena, RDI_TopLevelInfo, 1);
|
||||
RDIM_TopLevelInfo *src_tli = ¶ms->top_level_info;
|
||||
dst_tli->architecture = src_tli->arch;
|
||||
dst_tli->arch = src_tli->arch;
|
||||
dst_tli->exe_name_string_idx = rdim_bake_idx_from_string(strings, src_tli->exe_name);
|
||||
dst_tli->exe_hash = src_tli->exe_hash;
|
||||
dst_tli->voff_max = src_tli->voff_max;
|
||||
@@ -2827,7 +2827,7 @@ rdim_bake_udt_section_list_from_params(RDIM_Arena *arena, RDIM_BakeStringMapTigh
|
||||
//- rjf: fill enum members
|
||||
else if(src_udt->enum_val_count != 0)
|
||||
{
|
||||
dst_udt->flags |= RDI_UserDefinedTypeFlag_EnumMembers;
|
||||
dst_udt->flags |= RDI_UDTFlag_EnumMembers;
|
||||
dst_udt->member_first = dst_enum_member_idx;
|
||||
dst_udt->member_count = src_udt->enum_val_count;
|
||||
for(RDIM_UDTEnumVal *src_member = src_udt->first_enum_val;
|
||||
@@ -3160,22 +3160,22 @@ rdim_bake_scope_section_list_from_params(RDIM_Arena *arena, RDIM_BakeStringMapTi
|
||||
}break;
|
||||
|
||||
// rjf: simple addr+off cases
|
||||
case RDI_LocationKind_AddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrRegPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegPlusU16:
|
||||
{
|
||||
RDI_LocationRegisterPlusU16 loc = {0};
|
||||
RDI_LocationRegPlusU16 loc = {0};
|
||||
loc.kind = src_location->kind;
|
||||
loc.register_code = src_location->register_code;
|
||||
loc.reg_code = src_location->reg_code;
|
||||
loc.offset = src_location->offset;
|
||||
rdim_str8_list_push(scratch.arena, &location_data_blobs, rdim_str8_copy(scratch.arena, rdim_str8_struct(&loc)));
|
||||
}break;
|
||||
|
||||
// rjf: register cases
|
||||
case RDI_LocationKind_ValRegister:
|
||||
case RDI_LocationKind_ValReg:
|
||||
{
|
||||
RDI_LocationRegister loc = {0};
|
||||
RDI_LocationReg loc = {0};
|
||||
loc.kind = src_location->kind;
|
||||
loc.register_code = src_location->register_code;
|
||||
loc.reg_code = src_location->reg_code;
|
||||
rdim_str8_list_push(scratch.arena, &location_data_blobs, rdim_str8_copy(scratch.arena, rdim_str8_struct(&loc)));
|
||||
}break;
|
||||
}
|
||||
|
||||
@@ -668,7 +668,7 @@ typedef struct RDIM_Location RDIM_Location;
|
||||
struct RDIM_Location
|
||||
{
|
||||
RDI_LocationKind kind;
|
||||
RDI_U8 register_code;
|
||||
RDI_U8 reg_code;
|
||||
RDI_U16 offset;
|
||||
RDIM_EvalBytecode bytecode;
|
||||
};
|
||||
|
||||
@@ -137,7 +137,7 @@ mg_escaped_from_str8(Arena *arena, String8 string)
|
||||
U64 start = 0;
|
||||
for(U64 idx = 0; idx <= string.size; idx += 1)
|
||||
{
|
||||
if(idx == string.size || string.str[idx] == '\\')
|
||||
if(idx == string.size || string.str[idx] == '\\' || string.str[idx] == '\r')
|
||||
{
|
||||
String8 str = str8_substr(string, r1u64(start, idx));
|
||||
if(str.size != 0)
|
||||
@@ -1026,7 +1026,12 @@ mg_string_list_from_table_gen(Arena *arena, MG_Map grid_name_map, MG_Map grid_co
|
||||
{
|
||||
String8List result = {0};
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
for(MD_EachNode(strexpr_node, gen->first))
|
||||
if(md_node_is_nil(gen->first) && gen->string.size != 0)
|
||||
{
|
||||
str8_list_push(arena, &result, gen->string);
|
||||
str8_list_push(arena, &result, str8_lit("\n"));
|
||||
}
|
||||
else for(MD_EachNode(strexpr_node, gen->first))
|
||||
{
|
||||
// rjf: build task list
|
||||
MG_TableExpandTask *first_task = 0;
|
||||
|
||||
@@ -212,14 +212,22 @@ typedef struct MG_Layer MG_Layer;
|
||||
struct MG_Layer
|
||||
{
|
||||
String8 key;
|
||||
B32 is_library;
|
||||
String8 gen_folder_name;
|
||||
String8 h_name_override;
|
||||
String8 c_name_override;
|
||||
String8List enums;
|
||||
String8List structs;
|
||||
String8List h_functions;
|
||||
String8List h_tables;
|
||||
String8List h_catchall;
|
||||
String8List h_header;
|
||||
String8List h_footer;
|
||||
String8List c_functions;
|
||||
String8List c_tables;
|
||||
String8List c_catchall;
|
||||
String8List c_header;
|
||||
String8List c_footer;
|
||||
};
|
||||
|
||||
typedef struct MG_LayerNode MG_LayerNode;
|
||||
|
||||
+185
-20
@@ -149,6 +149,74 @@ int main(int argument_count, char **arguments)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: gather layer options
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
MG_Layer *layer = mg_layer_from_key(layer_key);
|
||||
for(MD_EachNode(node, file->first))
|
||||
{
|
||||
if(md_node_has_tag(node, str8_lit("option"), 0))
|
||||
{
|
||||
if(str8_match(node->string, str8_lit("library"), 0))
|
||||
{
|
||||
layer->is_library = 1;
|
||||
}
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("gen_folder"), 0))
|
||||
{
|
||||
layer->gen_folder_name = node->string;
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("h_name"), 0))
|
||||
{
|
||||
layer->h_name_override = node->string;
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("c_name"), 0))
|
||||
{
|
||||
layer->c_name_override = node->string;
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("h_header"), 0))
|
||||
{
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(mg_arena, &layer->h_header, n->string);
|
||||
str8_list_push(mg_arena, &layer->h_header, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("h_footer"), 0))
|
||||
{
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(mg_arena, &layer->h_footer, n->string);
|
||||
str8_list_push(mg_arena, &layer->h_footer, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("c_header"), 0))
|
||||
{
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(mg_arena, &layer->c_header, n->string);
|
||||
str8_list_push(mg_arena, &layer->c_header, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
if(md_node_has_tag(node, str8_lit("c_footer"), 0))
|
||||
{
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(mg_arena, &layer->c_footer, n->string);
|
||||
str8_list_push(mg_arena, &layer->c_footer, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: generate enums
|
||||
//
|
||||
@@ -160,36 +228,67 @@ int main(int argument_count, char **arguments)
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("enum"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 enum_name = node->string;
|
||||
String8 enum_member_prefix = enum_name;
|
||||
if(str8_match(str8_postfix(enum_name, 5), str8_lit("Flags"), 0))
|
||||
{
|
||||
enum_member_prefix = str8_chop(enum_name, 1);
|
||||
}
|
||||
String8 enum_base_type_name = tag->first->string;
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
MG_Layer *layer = mg_layer_from_key(layer_key);
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
if(enum_base_type_name.size == 0)
|
||||
{
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef enum %S\n{\n", node->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef enum %S\n{\n", enum_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef %S %S;\n", enum_base_type_name, node->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef enum %SEnum\n{\n", node->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef %S %S;\n", enum_base_type_name, enum_name);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "typedef enum %SEnum\n{\n", enum_name);
|
||||
}
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 escaped = mg_escaped_from_str8(mg_arena, n->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "%S_%S,\n", node->string, escaped);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "%S_%S,\n", enum_member_prefix, escaped);
|
||||
}
|
||||
if(enum_base_type_name.size == 0)
|
||||
{
|
||||
str8_list_pushf(mg_arena, &layer->enums, "} %S;\n\n", node->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "} %S;\n\n", enum_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
str8_list_pushf(mg_arena, &layer->enums, "} %SEnum;\n\n", node->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "} %SEnum;\n\n", enum_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: generate xlists
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
for(MD_EachNode(node, file->first))
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("xlist"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
MG_Layer *layer = mg_layer_from_key(layer_key);
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "#define %S \\\n", node->string);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 escaped = mg_escaped_from_str8(mg_arena, n->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "X(%S)\\\n", escaped);
|
||||
}
|
||||
str8_list_push(mg_arena, &layer->enums, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: generate structs
|
||||
//
|
||||
@@ -301,7 +400,8 @@ int main(int argument_count, char **arguments)
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 escaped = mg_escaped_from_str8(mg_arena, n->string);
|
||||
String8 trimmed = str8_skip_chop_whitespace(n->string);
|
||||
String8 escaped = mg_escaped_from_str8(mg_arena, trimmed);
|
||||
str8_list_push(mg_arena, out, escaped);
|
||||
str8_list_push(mg_arena, out, str8_lit("\n"));
|
||||
}
|
||||
@@ -415,7 +515,17 @@ int main(int argument_count, char **arguments)
|
||||
for(MG_LayerNode *n = slot->first; n != 0; n = n->next)
|
||||
{
|
||||
MG_Layer *layer = &n->v;
|
||||
String8 layer_generated_folder = push_str8f(mg_arena, "%S/%S/generated", code_dir_path, layer->key);
|
||||
String8 layer_generated_folder = {0};
|
||||
if(layer->gen_folder_name.size != 0)
|
||||
{
|
||||
String8 gen_folder = layer->gen_folder_name;
|
||||
layer_generated_folder = push_str8f(mg_arena, "%S/%S", code_dir_path, gen_folder);
|
||||
}
|
||||
else
|
||||
{
|
||||
String8 gen_folder = str8_lit("generated");
|
||||
layer_generated_folder = push_str8f(mg_arena, "%S/%S/%S", code_dir_path, layer->key, gen_folder);
|
||||
}
|
||||
if(os_make_directory(layer_generated_folder))
|
||||
{
|
||||
String8List layer_key_parts = str8_split_path(mg_arena, layer->key);
|
||||
@@ -425,13 +535,28 @@ int main(int argument_count, char **arguments)
|
||||
String8 layer_key_filename_upper = upper_from_str8(mg_arena, layer_key_filename);
|
||||
String8 h_path = push_str8f(mg_arena, "%S/%S.meta.h", layer_generated_folder, layer_key_filename);
|
||||
String8 c_path = push_str8f(mg_arena, "%S/%S.meta.c", layer_generated_folder, layer_key_filename);
|
||||
if(layer->h_name_override.size != 0)
|
||||
{
|
||||
h_path = push_str8f(mg_arena, "%S/%S", layer_generated_folder, str8_skip_last_slash(layer->h_name_override));
|
||||
}
|
||||
if(layer->c_name_override.size != 0)
|
||||
{
|
||||
c_path = push_str8f(mg_arena, "%S/%S", layer_generated_folder, str8_skip_last_slash(layer->c_name_override));
|
||||
}
|
||||
{
|
||||
FILE *h = fopen((char *)h_path.str, "w");
|
||||
fprintf(h, "// Copyright (c) 2024 Epic Games Tools\n");
|
||||
fprintf(h, "// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n");
|
||||
fprintf(h, "//- GENERATED CODE\n\n");
|
||||
fprintf(h, "#ifndef %.*s_META_H\n", str8_varg(layer_key_filename_upper));
|
||||
fprintf(h, "#define %.*s_META_H\n\n", str8_varg(layer_key_filename_upper));
|
||||
if(layer->h_header.first == 0)
|
||||
{
|
||||
fprintf(h, "//- GENERATED CODE\n\n");
|
||||
fprintf(h, "#ifndef %.*s_META_H\n", str8_varg(layer_key_filename_upper));
|
||||
fprintf(h, "#define %.*s_META_H\n\n", str8_varg(layer_key_filename_upper));
|
||||
}
|
||||
else for(String8Node *n = layer->h_header.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, h);
|
||||
}
|
||||
for(String8Node *n = layer->enums.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, h);
|
||||
@@ -448,34 +573,74 @@ int main(int argument_count, char **arguments)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, h);
|
||||
}
|
||||
fprintf(h, "C_LINKAGE_BEGIN\n");
|
||||
for(String8Node *n = layer->h_tables.first; n != 0; n = n->next)
|
||||
if(layer->h_tables.first != 0)
|
||||
{
|
||||
if(!layer->is_library)
|
||||
{
|
||||
fprintf(h, "C_LINKAGE_BEGIN\n");
|
||||
}
|
||||
for(String8Node *n = layer->h_tables.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, h);
|
||||
}
|
||||
fprintf(h, "\n");
|
||||
if(!layer->is_library)
|
||||
{
|
||||
fprintf(h, "C_LINKAGE_END\n\n");
|
||||
}
|
||||
}
|
||||
if(layer->h_footer.first == 0)
|
||||
{
|
||||
fprintf(h, "#endif // %.*s_META_H\n", str8_varg(layer_key_filename_upper));
|
||||
}
|
||||
else for(String8Node *n = layer->h_footer.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, h);
|
||||
}
|
||||
fprintf(h, "C_LINKAGE_END\n\n");
|
||||
fprintf(h, "#endif // %.*s_META_H\n", str8_varg(layer_key_filename_upper));
|
||||
fclose(h);
|
||||
}
|
||||
{
|
||||
FILE *c = fopen((char *)c_path.str, "w");
|
||||
fprintf(c, "// Copyright (c) 2024 Epic Games Tools\n");
|
||||
fprintf(c, "// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n");
|
||||
fprintf(c, "//- GENERATED CODE\n\n");
|
||||
if(layer->c_header.first == 0)
|
||||
{
|
||||
fprintf(c, "//- GENERATED CODE\n\n");
|
||||
}
|
||||
else for(String8Node *n = layer->c_header.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
}
|
||||
for(String8Node *n = layer->c_catchall.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
}
|
||||
if(layer->c_tables.first != 0)
|
||||
{
|
||||
if(!layer->is_library)
|
||||
{
|
||||
fprintf(c, "C_LINKAGE_BEGIN\n");
|
||||
}
|
||||
for(String8Node *n = layer->c_tables.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
}
|
||||
if(!layer->is_library)
|
||||
{
|
||||
fprintf(c, "C_LINKAGE_END\n\n");
|
||||
}
|
||||
}
|
||||
for(String8Node *n = layer->c_functions.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
}
|
||||
fprintf(c, "C_LINKAGE_BEGIN\n");
|
||||
for(String8Node *n = layer->c_tables.first; n != 0; n = n->next)
|
||||
if(layer->c_footer.first != 0)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
for(String8Node *n = layer->c_footer.first; n != 0; n = n->next)
|
||||
{
|
||||
fwrite(n->string.str, n->string.size, 1, c);
|
||||
}
|
||||
}
|
||||
fprintf(c, "C_LINKAGE_END\n\n");
|
||||
fclose(c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ typedef struct OS_FileIter OS_FileIter;
|
||||
struct OS_FileIter
|
||||
{
|
||||
OS_FileIterFlags flags;
|
||||
U8 memory[600];
|
||||
U8 memory[800];
|
||||
};
|
||||
|
||||
typedef struct OS_FileInfo OS_FileInfo;
|
||||
|
||||
@@ -198,7 +198,7 @@ os_init(void)
|
||||
w32_VirtualAlloc2_func = (W32_VirtualAlloc2_Type*)GetProcAddress(module, "VirtualAlloc2");
|
||||
w32_MapViewOfFile3_func = (W32_MapViewOfFile3_Type*)GetProcAddress(module, "MapViewOfFile3");
|
||||
w32_SetThreadDescription_func = (W32_SetThreadDescription_Type*)GetProcAddress(module, "SetThreadDescription");
|
||||
|
||||
|
||||
FreeLibrary(module);
|
||||
}
|
||||
}
|
||||
@@ -964,7 +964,27 @@ os_file_iter_begin(Arena *arena, String8 path, OS_FileIterFlags flags)
|
||||
OS_FileIter *iter = push_array(arena, OS_FileIter, 1);
|
||||
iter->flags = flags;
|
||||
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||
w32_iter->handle = FindFirstFileW((WCHAR*)path16.str, &w32_iter->find_data);
|
||||
if(path.size == 0)
|
||||
{
|
||||
w32_iter->is_volume_iter = 1;
|
||||
WCHAR buffer[512] = {0};
|
||||
DWORD length = GetLogicalDriveStringsW(sizeof(buffer), buffer);
|
||||
String8List drive_strings = {0};
|
||||
for(U64 off = 0; off < (U64)length;)
|
||||
{
|
||||
String16 next_drive_string_16 = str16_cstring((U16 *)buffer+off);
|
||||
off += next_drive_string_16.size+1;
|
||||
String8 next_drive_string = str8_from_16(arena, next_drive_string_16);
|
||||
next_drive_string = str8_chop_last_slash(next_drive_string);
|
||||
str8_list_push(scratch.arena, &drive_strings, next_drive_string);
|
||||
}
|
||||
w32_iter->drive_strings = str8_array_from_list(arena, &drive_strings);
|
||||
w32_iter->drive_strings_iter_idx = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
w32_iter->handle = FindFirstFileW((WCHAR*)path16.str, &w32_iter->find_data);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
return iter;
|
||||
}
|
||||
@@ -975,55 +995,76 @@ os_file_iter_next(Arena *arena, OS_FileIter *iter, OS_FileInfo *info_out)
|
||||
B32 result = 0;
|
||||
OS_FileIterFlags flags = iter->flags;
|
||||
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||
if (!(flags & OS_FileIterFlag_Done) && w32_iter->handle != INVALID_HANDLE_VALUE)
|
||||
switch(w32_iter->is_volume_iter)
|
||||
{
|
||||
do
|
||||
//- rjf: file iteration
|
||||
default:
|
||||
case 0:
|
||||
{
|
||||
// check is usable
|
||||
B32 usable_file = 1;
|
||||
|
||||
WCHAR *file_name = w32_iter->find_data.cFileName;
|
||||
DWORD attributes = w32_iter->find_data.dwFileAttributes;
|
||||
if (file_name[0] == '.'){
|
||||
if (flags & OS_FileIterFlag_SkipHiddenFiles){
|
||||
usable_file = 0;
|
||||
}
|
||||
else if (file_name[1] == 0){
|
||||
usable_file = 0;
|
||||
}
|
||||
else if (file_name[1] == '.' && file_name[2] == 0){
|
||||
usable_file = 0;
|
||||
}
|
||||
if (!(flags & OS_FileIterFlag_Done) && w32_iter->handle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
do
|
||||
{
|
||||
// check is usable
|
||||
B32 usable_file = 1;
|
||||
|
||||
WCHAR *file_name = w32_iter->find_data.cFileName;
|
||||
DWORD attributes = w32_iter->find_data.dwFileAttributes;
|
||||
if (file_name[0] == '.'){
|
||||
if (flags & OS_FileIterFlag_SkipHiddenFiles){
|
||||
usable_file = 0;
|
||||
}
|
||||
else if (file_name[1] == 0){
|
||||
usable_file = 0;
|
||||
}
|
||||
else if (file_name[1] == '.' && file_name[2] == 0){
|
||||
usable_file = 0;
|
||||
}
|
||||
}
|
||||
if (attributes & FILE_ATTRIBUTE_DIRECTORY){
|
||||
if (flags & OS_FileIterFlag_SkipFolders){
|
||||
usable_file = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (flags & OS_FileIterFlag_SkipFiles){
|
||||
usable_file = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// emit if usable
|
||||
if (usable_file){
|
||||
info_out->name = str8_from_16(arena, str16_cstring((U16*)file_name));
|
||||
info_out->props.size = (U64)w32_iter->find_data.nFileSizeLow | (((U64)w32_iter->find_data.nFileSizeHigh)<<32);
|
||||
w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
||||
w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
||||
info_out->props.flags = w32_file_property_flags_from_dwFileAttributes(attributes);
|
||||
result = 1;
|
||||
if (!FindNextFileW(w32_iter->handle, &w32_iter->find_data)){
|
||||
iter->flags |= OS_FileIterFlag_Done;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}while(FindNextFileW(w32_iter->handle, &w32_iter->find_data));
|
||||
}
|
||||
if (attributes & FILE_ATTRIBUTE_DIRECTORY){
|
||||
if (flags & OS_FileIterFlag_SkipFolders){
|
||||
usable_file = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (flags & OS_FileIterFlag_SkipFiles){
|
||||
usable_file = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// emit if usable
|
||||
if (usable_file){
|
||||
info_out->name = str8_from_16(arena, str16_cstring((U16*)file_name));
|
||||
info_out->props.size = (U64)w32_iter->find_data.nFileSizeLow | (((U64)w32_iter->find_data.nFileSizeHigh)<<32);
|
||||
w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
||||
w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
||||
info_out->props.flags = w32_file_property_flags_from_dwFileAttributes(attributes);
|
||||
result = 1;
|
||||
if (!FindNextFileW(w32_iter->handle, &w32_iter->find_data)){
|
||||
iter->flags |= OS_FileIterFlag_Done;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}while(FindNextFileW(w32_iter->handle, &w32_iter->find_data));
|
||||
}break;
|
||||
|
||||
if (!result){
|
||||
iter->flags |= OS_FileIterFlag_Done;
|
||||
}
|
||||
//- rjf: volume iteration
|
||||
case 1:
|
||||
{
|
||||
result = w32_iter->drive_strings_iter_idx < w32_iter->drive_strings.count;
|
||||
if(result != 0)
|
||||
{
|
||||
MemoryZeroStruct(info_out);
|
||||
info_out->name = w32_iter->drive_strings.v[w32_iter->drive_strings_iter_idx];
|
||||
info_out->props.flags |= FilePropertyFlag_IsFolder;
|
||||
w32_iter->drive_strings_iter_idx += 1;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
if(!result)
|
||||
{
|
||||
iter->flags |= OS_FileIterFlag_Done;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ struct W32_FileIter
|
||||
{
|
||||
HANDLE handle;
|
||||
WIN32_FIND_DATAW find_data;
|
||||
B32 is_volume_iter;
|
||||
String8Array drive_strings;
|
||||
U64 drive_strings_iter_idx;
|
||||
};
|
||||
StaticAssert(sizeof(Member(OS_FileIter, memory)) >= sizeof(W32_FileIter), file_iter_memory_size);
|
||||
|
||||
|
||||
@@ -157,6 +157,7 @@ OS_Key_COUNT,
|
||||
C_LINKAGE_BEGIN
|
||||
extern String8 os_g_key_display_string_table[143];
|
||||
extern String8 os_g_key_cfg_string_table[143];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // OS_GFX_META_H
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
#include "os/os_inc.h"
|
||||
#include "task_system/task_system.h"
|
||||
#include "ico/ico.h"
|
||||
#include "rdi_format_local/rdi_format_local.h"
|
||||
#include "rdi_make_local/rdi_make_local.h"
|
||||
#include "rdi_format/rdi_format_local.h"
|
||||
#include "rdi_make/rdi_make_local.h"
|
||||
#include "mdesk/mdesk.h"
|
||||
#include "hash_store/hash_store.h"
|
||||
#include "file_stream/file_stream.h"
|
||||
@@ -70,8 +70,8 @@
|
||||
#include "os/os_inc.c"
|
||||
#include "task_system/task_system.c"
|
||||
#include "ico/ico.c"
|
||||
#include "rdi_format_local/rdi_format_local.c"
|
||||
#include "rdi_make_local/rdi_make_local.c"
|
||||
#include "rdi_format/rdi_format_local.c"
|
||||
#include "rdi_make/rdi_make_local.c"
|
||||
#include "mdesk/mdesk.c"
|
||||
#include "hash_store/hash_store.c"
|
||||
#include "file_stream/file_stream.c"
|
||||
@@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Build Options
|
||||
|
||||
@@ -13,13 +16,12 @@
|
||||
|
||||
//- rjf: [lib]
|
||||
#include "lib_rdi_format/rdi_format.h"
|
||||
#include "lib_rdi_format/rdi_format_parse.h"
|
||||
#include "lib_rdi_format/rdi_format.c"
|
||||
#include "lib_rdi_format/rdi_format_parse.h"
|
||||
#include "lib_rdi_format/rdi_format_parse.c"
|
||||
#include "third_party/rad_lzb_simple/rad_lzb_simple.h"
|
||||
#include "third_party/rad_lzb_simple/rad_lzb_simple.c"
|
||||
|
||||
|
||||
//- rjf: [h]
|
||||
#include "base/base_inc.h"
|
||||
#include "os/os_inc.h"
|
||||
|
||||
+98
-83
@@ -5,77 +5,87 @@
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8
|
||||
rdi_string_from_data_section_tag(RDI_DataSectionTag tag){
|
||||
String8 result = {0};
|
||||
switch (tag){
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
#define Y(N)
|
||||
RDI_DataSectionTagXList(X,Y)
|
||||
#undef X
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_arch(RDI_Arch arch){
|
||||
String8 result = {0};
|
||||
switch (arch){
|
||||
default: result = str8_lit("<invalid-arch>"); break;
|
||||
case RDI_Arch_X86: result = str8_lit("x86"); break;
|
||||
case RDI_Arch_X64: result = str8_lit("x64"); break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_language(RDI_Language language){
|
||||
String8 result = {0};
|
||||
switch (language){
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
RDI_LanguageXList(X)
|
||||
rdi_string_from_data_section_tag(RDI_DataSectionTag v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_DataSectionTag>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_DataSectionTag_##name:{result = str8_lit(#name);}break;
|
||||
RDI_DataSectionTag_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_type_kind(RDI_TypeKind type_kind){
|
||||
String8 result = {0};
|
||||
switch (type_kind){
|
||||
default: result = str8_lit("<invalid-type-kind>"); break;
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
#define XZ(name,code,size) X(name,code)
|
||||
#define Y(a,n)
|
||||
RDI_TypeKindXList(X,XZ,Y)
|
||||
#undef X
|
||||
#undef XZ
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_member_kind(RDI_MemberKind member_kind){
|
||||
String8 result = {0};
|
||||
switch (member_kind){
|
||||
default: result = str8_lit("<invalid-member-kind>"); break;
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
RDI_MemberKindXList(X)
|
||||
rdi_string_from_arch(RDI_Arch v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_Arch>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_Arch_##name:{result = str8_lit(#name);}break;
|
||||
RDI_Arch_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_local_kind(RDI_LocalKind local_kind){
|
||||
String8 result = {0};
|
||||
switch (local_kind){
|
||||
default: result = str8_lit("<invalid-local-kind>"); break;
|
||||
case RDI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
|
||||
case RDI_LocalKind_Variable: result = str8_lit("Variable"); break;
|
||||
rdi_string_from_language(RDI_Language v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_Language>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_Language_##name:{result = str8_lit(#name);}break;
|
||||
RDI_Language_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_type_kind(RDI_TypeKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_TypeKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_TypeKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_TypeKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_member_kind(RDI_MemberKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_MemberKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_MemberKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_MemberKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_local_kind(RDI_LocalKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_LocalKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_LocalKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_LocalKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -113,12 +123,12 @@ rdi_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
}
|
||||
|
||||
internal void
|
||||
rdi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
|
||||
RDI_UserDefinedTypeFlags flags){
|
||||
rdi_stringize_udt_flags(Arena *arena, String8List *out,
|
||||
RDI_UDTFlags flags){
|
||||
if (flags == 0){
|
||||
str8_list_push(arena, out, str8_lit("0"));
|
||||
}
|
||||
if (flags & RDI_UserDefinedTypeFlag_EnumMembers){
|
||||
if (flags & RDI_UDTFlag_EnumMembers){
|
||||
str8_list_push(arena, out, str8_lit("EnumMembers "));
|
||||
}
|
||||
}
|
||||
@@ -160,11 +170,11 @@ rdi_stringize_data_sections(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
internal void
|
||||
rdi_stringize_top_level_info(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
RDI_TopLevelInfo *tli, U32 indent_level){
|
||||
String8 arch_str = rdi_string_from_arch(tli->architecture);
|
||||
String8 arch_str = rdi_string_from_arch(tli->arch);
|
||||
String8 exe_name = {0};
|
||||
exe_name.str = rdi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
|
||||
str8_list_pushf(arena, out, "%.*sarch=%.*s\n",
|
||||
indent_level, rdi_stringize_spaces, str8_varg(arch_str));
|
||||
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
|
||||
indent_level, rdi_stringize_spaces, str8_varg(exe_name));
|
||||
@@ -240,6 +250,11 @@ rdi_stringize_source_file(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
RDI_ParsedLineMap line_map = {0};
|
||||
rdi_line_map_from_source_file(parsed, source_file, &line_map);
|
||||
|
||||
// normal source path
|
||||
String8 path = {0};
|
||||
path.str = rdi_string_from_idx(parsed, source_file->normal_full_path_string_idx, &path.size);
|
||||
str8_list_pushf(arena, out, "%.*spath: \"%S\"\n", indent_level, rdi_stringize_spaces, path);
|
||||
|
||||
// stringize line map data
|
||||
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, rdi_stringize_spaces);
|
||||
|
||||
@@ -447,7 +462,7 @@ rdi_stringize_udt(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
indent_level, rdi_stringize_spaces, udt->self_type_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, rdi_stringize_spaces);
|
||||
rdi_stringize_user_defined_type_flags(arena, out, udt->flags);
|
||||
rdi_stringize_udt_flags(arena, out, udt->flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
|
||||
if (udt->file_idx != 0){
|
||||
@@ -457,7 +472,7 @@ rdi_stringize_udt(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
}
|
||||
|
||||
// enum members
|
||||
if (udt->flags & RDI_UserDefinedTypeFlag_EnumMembers){
|
||||
if (udt->flags & RDI_UDTFlag_EnumMembers){
|
||||
U32 first_raw = udt->member_first;
|
||||
U32 opl_raw = first_raw + udt->member_count;
|
||||
U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count);
|
||||
@@ -707,38 +722,38 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
str8_list_pushf(arena, out, "\n");
|
||||
}break;
|
||||
|
||||
case RDI_LocationKind_AddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrRegPlusU16:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RDI_LocationRegisterPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrRegisterPlusU16( <invalid-encoding> )\n");
|
||||
if (loc_base_ptr + sizeof(RDI_LocationRegPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrRegPlusU16( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RDI_LocationRegisterPlusU16 *loc = (RDI_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrRegisterPlusU16(reg: %u, off: %u)\n",
|
||||
loc->register_code, loc->offset);
|
||||
RDI_LocationRegPlusU16 *loc = (RDI_LocationRegPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrRegPlusU16(reg: %u, off: %u)\n",
|
||||
loc->reg_code, loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
case RDI_LocationKind_AddrAddrRegisterPlusU16:
|
||||
case RDI_LocationKind_AddrAddrRegPlusU16:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RDI_LocationRegisterPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16( <invalid-encoding> )\n");
|
||||
if (loc_base_ptr + sizeof(RDI_LocationRegPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrAddrRegPlusU16( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RDI_LocationRegisterPlusU16 *loc = (RDI_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
RDI_LocationRegPlusU16 *loc = (RDI_LocationRegPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n",
|
||||
loc->register_code, loc->offset);
|
||||
loc->reg_code, loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
case RDI_LocationKind_ValRegister:
|
||||
case RDI_LocationKind_ValReg:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RDI_LocationRegister) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "ValRegister( <invalid-encoding> )\n");
|
||||
if (loc_base_ptr + sizeof(RDI_LocationReg) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "ValReg( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RDI_LocationRegister *loc = (RDI_LocationRegister*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "ValRegister(reg: %u)\n", loc->register_code);
|
||||
RDI_LocationReg *loc = (RDI_LocationReg*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "ValReg(reg: %u)\n", loc->reg_code);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
@@ -41,19 +41,19 @@ struct RDI_ScopeBundle
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag tag);
|
||||
internal String8 rdi_string_from_arch(RDI_Arch arch);
|
||||
internal String8 rdi_string_from_language(RDI_Language language);
|
||||
internal String8 rdi_string_from_type_kind(RDI_TypeKind type_kind);
|
||||
internal String8 rdi_string_from_member_kind(RDI_MemberKind member_kind);
|
||||
internal String8 rdi_string_from_local_kind(RDI_LocalKind local_kind);
|
||||
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag v);
|
||||
internal String8 rdi_string_from_arch(RDI_Arch v);
|
||||
internal String8 rdi_string_from_language(RDI_Language v);
|
||||
internal String8 rdi_string_from_type_kind(RDI_TypeKind v);
|
||||
internal String8 rdi_string_from_member_kind(RDI_MemberKind v);
|
||||
internal String8 rdi_string_from_local_kind(RDI_LocalKind v);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Flags -> String Functions
|
||||
|
||||
internal void rdi_stringize_binary_section_flags(Arena *arena, String8List *out, RDI_BinarySectionFlags flags);
|
||||
internal void rdi_stringize_type_modifier_flags(Arena *arena, String8List *out, RDI_TypeModifierFlags flags);
|
||||
internal void rdi_stringize_user_defined_type_flags(Arena *arena, String8List *out, RDI_UserDefinedTypeFlags flags);
|
||||
internal void rdi_stringize_udt_flags(Arena *arena, String8List *out, RDI_UDTFlags flags);
|
||||
internal void rdi_stringize_link_flags(Arena *arena, String8List *out, RDI_LinkFlags flags);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
//- rjf: [h]
|
||||
#include "base/base_inc.h"
|
||||
#include "os/os_inc.h"
|
||||
#include "rdi_format_local/rdi_format_local.h"
|
||||
#include "rdi_format/rdi_format_local.h"
|
||||
#include "rdi_dump.h"
|
||||
|
||||
//- rjf: [c]
|
||||
#include "base/base_inc.c"
|
||||
#include "os/os_inc.c"
|
||||
#include "rdi_format_local/rdi_format_local.c"
|
||||
#include "rdi_format/rdi_format_local.c"
|
||||
#include "rdi_dump.c"
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -241,17 +241,17 @@ p2r_rdi_arch_from_cv_arch(CV_Arch cv_arch)
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal RDI_RegisterCode
|
||||
internal RDI_RegCode
|
||||
p2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code)
|
||||
{
|
||||
RDI_RegisterCode result = 0;
|
||||
RDI_RegCode result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
case RDI_Arch_X86:
|
||||
{
|
||||
switch(reg_code)
|
||||
{
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegisterCode_X86_##RDN; break;
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegCodeX86_##RDN; break;
|
||||
CV_Reg_X86_XList(X)
|
||||
#undef X
|
||||
}
|
||||
@@ -260,7 +260,7 @@ p2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code)
|
||||
{
|
||||
switch(reg_code)
|
||||
{
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegisterCode_X64_##RDN; break;
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegCodeX64_##RDN; break;
|
||||
CV_Reg_X64_XList(X)
|
||||
#undef X
|
||||
}
|
||||
@@ -376,7 +376,7 @@ p2r_rdi_type_kind_from_cv_basic_type(CV_BasicType basic_type)
|
||||
//~ rjf: Location Info Building Helpers
|
||||
|
||||
internal RDIM_Location *
|
||||
p2r_location_from_addr_reg_off(Arena *arena, RDI_Arch arch, RDI_RegisterCode reg_code, U32 reg_byte_size, U32 reg_byte_pos, S64 offset, B32 extra_indirection)
|
||||
p2r_location_from_addr_reg_off(Arena *arena, RDI_Arch arch, RDI_RegCode reg_code, U32 reg_byte_size, U32 reg_byte_pos, S64 offset, B32 extra_indirection)
|
||||
{
|
||||
RDIM_Location *result = 0;
|
||||
if(0 <= offset && offset <= (S64)max_U16)
|
||||
@@ -423,10 +423,10 @@ p2r_cv_encoded_fp_reg_from_frameproc(CV_SymFrameproc *frameproc, B32 param_base)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal RDI_RegisterCode
|
||||
internal RDI_RegCode
|
||||
p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg)
|
||||
{
|
||||
RDI_RegisterCode result = 0;
|
||||
RDI_RegCode result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
case RDI_Arch_X86:
|
||||
@@ -440,11 +440,11 @@ p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encod
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_FramePtr:
|
||||
{
|
||||
result = RDI_RegisterCode_X86_ebp;
|
||||
result = RDI_RegCodeX86_ebp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_BasePtr:
|
||||
{
|
||||
result = RDI_RegisterCode_X86_ebx;
|
||||
result = RDI_RegCodeX86_ebx;
|
||||
}break;
|
||||
}
|
||||
}break;
|
||||
@@ -454,15 +454,15 @@ p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encod
|
||||
{
|
||||
case CV_EncodedFramePtrReg_StackPtr:
|
||||
{
|
||||
result = RDI_RegisterCode_X64_rsp;
|
||||
result = RDI_RegCodeX64_rsp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_FramePtr:
|
||||
{
|
||||
result = RDI_RegisterCode_X64_rbp;
|
||||
result = RDI_RegCodeX64_rbp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_BasePtr:
|
||||
{
|
||||
result = RDI_RegisterCode_X64_r13;
|
||||
result = RDI_RegCodeX64_r13;
|
||||
}break;
|
||||
}
|
||||
}break;
|
||||
@@ -2207,13 +2207,13 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
}
|
||||
|
||||
// rjf: get raddbg register code
|
||||
RDI_RegisterCode register_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
RDI_RegCode reg_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
// TODO(rjf): real byte_size & byte_pos from cv_reg goes here
|
||||
U32 byte_size = 8;
|
||||
U32 byte_pos = 0;
|
||||
|
||||
// rjf: set location case
|
||||
RDIM_Location *loc = p2r_location_from_addr_reg_off(arena, in->arch, register_code, byte_size, byte_pos, (S64)(S32)var_off, extra_indirection_to_value);
|
||||
RDIM_Location *loc = p2r_location_from_addr_reg_off(arena, in->arch, reg_code, byte_size, byte_pos, (S64)(S32)var_off, extra_indirection_to_value);
|
||||
RDIM_Rng1U64 voff_range = {0, max_U64};
|
||||
rdim_location_set_push_case(arena, &sym_scopes, &local->locset, voff_range, loc);
|
||||
}
|
||||
@@ -2327,10 +2327,10 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
COFF_SectionHeader *range_section = (0 < range->sec && range->sec <= in->coff_sections->count) ? &in->coff_sections->sections[range->sec-1] : 0;
|
||||
CV_LvarAddrGap *gaps = (CV_LvarAddrGap*)(defrange_register+1);
|
||||
U64 gap_count = ((U8*)sym_data_opl - (U8*)gaps) / sizeof(*gaps);
|
||||
RDI_RegisterCode register_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
RDI_RegCode reg_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
|
||||
// rjf: build location
|
||||
RDIM_Location *location = rdim_push_location_val_reg(arena, register_code);
|
||||
RDIM_Location *location = rdim_push_location_val_reg(arena, reg_code);
|
||||
|
||||
// rjf: emit locations over ranges
|
||||
p2r_location_over_lvar_addr_range(arena, &sym_scopes, defrange_target, location, range, range_section, gaps, gap_count);
|
||||
@@ -2369,7 +2369,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
|
||||
// rjf: select frame pointer register
|
||||
CV_EncodedFramePtrReg encoded_fp_reg = p2r_cv_encoded_fp_reg_from_frameproc(frameproc, defrange_target_is_param);
|
||||
RDI_RegisterCode fp_register_code = p2r_reg_code_from_arch_encoded_fp_reg(in->arch, encoded_fp_reg);
|
||||
RDI_RegCode fp_register_code = p2r_reg_code_from_arch_encoded_fp_reg(in->arch, encoded_fp_reg);
|
||||
|
||||
// rjf: build location
|
||||
B32 extra_indirection = 0;
|
||||
@@ -2399,7 +2399,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
COFF_SectionHeader *range_section = (0 < range->sec && range->sec <= in->coff_sections->count) ? &in->coff_sections->sections[range->sec-1] : 0;
|
||||
CV_LvarAddrGap *gaps = (CV_LvarAddrGap*)(defrange_subfield_register + 1);
|
||||
U64 gap_count = ((U8*)sym_data_opl - (U8*)gaps) / sizeof(*gaps);
|
||||
RDI_RegisterCode register_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
RDI_RegCode reg_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
|
||||
// rjf: skip "subfield" location info - currently not supported
|
||||
if(defrange_subfield_register->field_offset != 0)
|
||||
@@ -2408,7 +2408,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
}
|
||||
|
||||
// rjf: build location
|
||||
RDIM_Location *location = rdim_push_location_val_reg(arena, register_code);
|
||||
RDIM_Location *location = rdim_push_location_val_reg(arena, reg_code);
|
||||
|
||||
// rjf: emit locations over ranges
|
||||
p2r_location_over_lvar_addr_range(arena, &sym_scopes, defrange_target, location, range, range_section, gaps, gap_count);
|
||||
@@ -2441,7 +2441,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
// rjf: unpack sym
|
||||
CV_SymDefrangeFramepointerRelFullScope *defrange_fprel_full_scope = (CV_SymDefrangeFramepointerRelFullScope*)sym_header_struct_base;
|
||||
CV_EncodedFramePtrReg encoded_fp_reg = p2r_cv_encoded_fp_reg_from_frameproc(frameproc, defrange_target_is_param);
|
||||
RDI_RegisterCode fp_register_code = p2r_reg_code_from_arch_encoded_fp_reg(in->arch, encoded_fp_reg);
|
||||
RDI_RegCode fp_register_code = p2r_reg_code_from_arch_encoded_fp_reg(in->arch, encoded_fp_reg);
|
||||
|
||||
// rjf: build location
|
||||
B32 extra_indirection = 0;
|
||||
@@ -2468,7 +2468,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
// rjf: unpack sym
|
||||
CV_SymDefrangeRegisterRel *defrange_register_rel = (CV_SymDefrangeRegisterRel*)sym_header_struct_base;
|
||||
CV_Reg cv_reg = defrange_register_rel->reg;
|
||||
RDI_RegisterCode register_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
RDI_RegCode reg_code = p2r_rdi_reg_code_from_cv_reg_code(in->arch, cv_reg);
|
||||
CV_LvarAddrRange *range = &defrange_register_rel->range;
|
||||
COFF_SectionHeader *range_section = (0 < range->sec && range->sec <= in->coff_sections->count) ? &in->coff_sections->sections[range->sec-1] : 0;
|
||||
CV_LvarAddrGap *gaps = (CV_LvarAddrGap*)(defrange_register_rel + 1);
|
||||
@@ -2480,7 +2480,7 @@ internal TS_TASK_FUNCTION_DEF(p2r_symbol_stream_convert_task__entry_point)
|
||||
U32 byte_pos = 0;
|
||||
B32 extra_indirection_to_value = 0;
|
||||
S64 var_off = defrange_register_rel->reg_off;
|
||||
RDIM_Location *location = p2r_location_from_addr_reg_off(arena, in->arch, register_code, byte_size, byte_pos, var_off, extra_indirection_to_value);
|
||||
RDIM_Location *location = p2r_location_from_addr_reg_off(arena, in->arch, reg_code, byte_size, byte_pos, var_off, extra_indirection_to_value);
|
||||
|
||||
// rjf: emit locations over ranges
|
||||
p2r_location_over_lvar_addr_range(arena, &sym_scopes, defrange_target, location, range, range_section, gaps, gap_count);
|
||||
|
||||
@@ -522,16 +522,16 @@ internal RDI_BinarySectionFlags p2r_rdi_binary_section_flags_from_coff_section_f
|
||||
//~ rjf: CodeView => RDI Canonical Conversions
|
||||
|
||||
internal RDI_Arch p2r_rdi_arch_from_cv_arch(CV_Arch arch);
|
||||
internal RDI_RegisterCode p2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code);
|
||||
internal RDI_RegCode p2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code);
|
||||
internal RDI_Language p2r_rdi_language_from_cv_language(CV_Language language);
|
||||
internal RDI_TypeKind p2r_rdi_type_kind_from_cv_basic_type(CV_BasicType basic_type);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Location Info Building Helpers
|
||||
|
||||
internal RDIM_Location *p2r_location_from_addr_reg_off(Arena *arena, RDI_Arch arch, RDI_RegisterCode reg_code, U32 reg_byte_size, U32 reg_byte_pos, S64 offset, B32 extra_indirection);
|
||||
internal RDIM_Location *p2r_location_from_addr_reg_off(Arena *arena, RDI_Arch arch, RDI_RegCode reg_code, U32 reg_byte_size, U32 reg_byte_pos, S64 offset, B32 extra_indirection);
|
||||
internal CV_EncodedFramePtrReg p2r_cv_encoded_fp_reg_from_frameproc(CV_SymFrameproc *frameproc, B32 param_base);
|
||||
internal RDI_RegisterCode p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg);
|
||||
internal RDI_RegCode p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg);
|
||||
internal void p2r_location_over_lvar_addr_range(Arena *arena, RDIM_ScopeChunkList *scopes, RDIM_LocationSet *locset, RDIM_Location *location, CV_LvarAddrRange *range, COFF_SectionHeader *section, CV_LvarAddrGap *gaps, U64 gap_count);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "base/base_inc.h"
|
||||
#include "os/os_inc.h"
|
||||
#include "task_system/task_system.h"
|
||||
#include "rdi_make_local/rdi_make_local.h"
|
||||
#include "rdi_make/rdi_make_local.h"
|
||||
#include "coff/coff.h"
|
||||
#include "codeview/codeview.h"
|
||||
#include "codeview/codeview_stringize.h"
|
||||
@@ -37,7 +37,7 @@
|
||||
#include "base/base_inc.c"
|
||||
#include "os/os_inc.c"
|
||||
#include "task_system/task_system.c"
|
||||
#include "rdi_make_local/rdi_make_local.c"
|
||||
#include "rdi_make/rdi_make_local.c"
|
||||
#include "coff/coff.c"
|
||||
#include "codeview/codeview.c"
|
||||
#include "codeview/codeview_stringize.c"
|
||||
|
||||
@@ -439,6 +439,7 @@ extern String8 regs_g_reg_code_x86_string_table[61];
|
||||
extern String8 regs_g_alias_code_x86_string_table[36];
|
||||
extern REGS_Rng regs_g_reg_code_x86_rng_table[61];
|
||||
extern REGS_Slice regs_g_alias_code_x86_slice_table[36];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // REGS_META_H
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
|
||||
internal RDI_RegCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
|
||||
{
|
||||
RDI_RegisterCode result = 0;
|
||||
RDI_RegCode result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
default:{}break;
|
||||
@@ -14,82 +14,82 @@ case Architecture_x64:
|
||||
switch(code)
|
||||
{
|
||||
default:{}break;
|
||||
case REGS_RegCodeX64_rax:{result = RDI_RegisterCode_X64_rax;}break;
|
||||
case REGS_RegCodeX64_rcx:{result = RDI_RegisterCode_X64_rcx;}break;
|
||||
case REGS_RegCodeX64_rdx:{result = RDI_RegisterCode_X64_rdx;}break;
|
||||
case REGS_RegCodeX64_rbx:{result = RDI_RegisterCode_X64_rbx;}break;
|
||||
case REGS_RegCodeX64_rsp:{result = RDI_RegisterCode_X64_rsp;}break;
|
||||
case REGS_RegCodeX64_rbp:{result = RDI_RegisterCode_X64_rbp;}break;
|
||||
case REGS_RegCodeX64_rsi:{result = RDI_RegisterCode_X64_rsi;}break;
|
||||
case REGS_RegCodeX64_rdi:{result = RDI_RegisterCode_X64_rdi;}break;
|
||||
case REGS_RegCodeX64_r8:{result = RDI_RegisterCode_X64_r8;}break;
|
||||
case REGS_RegCodeX64_r9:{result = RDI_RegisterCode_X64_r9;}break;
|
||||
case REGS_RegCodeX64_r10:{result = RDI_RegisterCode_X64_r10;}break;
|
||||
case REGS_RegCodeX64_r11:{result = RDI_RegisterCode_X64_r11;}break;
|
||||
case REGS_RegCodeX64_r12:{result = RDI_RegisterCode_X64_r12;}break;
|
||||
case REGS_RegCodeX64_r13:{result = RDI_RegisterCode_X64_r13;}break;
|
||||
case REGS_RegCodeX64_r14:{result = RDI_RegisterCode_X64_r14;}break;
|
||||
case REGS_RegCodeX64_r15:{result = RDI_RegisterCode_X64_r15;}break;
|
||||
case REGS_RegCodeX64_fsbase:{result = RDI_RegisterCode_X64_fsbase;}break;
|
||||
case REGS_RegCodeX64_gsbase:{result = RDI_RegisterCode_X64_gsbase;}break;
|
||||
case REGS_RegCodeX64_rip:{result = RDI_RegisterCode_X64_rip;}break;
|
||||
case REGS_RegCodeX64_rflags:{result = RDI_RegisterCode_X64_rflags;}break;
|
||||
case REGS_RegCodeX64_dr0:{result = RDI_RegisterCode_X64_dr0;}break;
|
||||
case REGS_RegCodeX64_dr1:{result = RDI_RegisterCode_X64_dr1;}break;
|
||||
case REGS_RegCodeX64_dr2:{result = RDI_RegisterCode_X64_dr2;}break;
|
||||
case REGS_RegCodeX64_dr3:{result = RDI_RegisterCode_X64_dr3;}break;
|
||||
case REGS_RegCodeX64_dr4:{result = RDI_RegisterCode_X64_dr4;}break;
|
||||
case REGS_RegCodeX64_dr5:{result = RDI_RegisterCode_X64_dr5;}break;
|
||||
case REGS_RegCodeX64_dr6:{result = RDI_RegisterCode_X64_dr6;}break;
|
||||
case REGS_RegCodeX64_dr7:{result = RDI_RegisterCode_X64_dr7;}break;
|
||||
case REGS_RegCodeX64_fpr0:{result = RDI_RegisterCode_X64_fpr0;}break;
|
||||
case REGS_RegCodeX64_fpr1:{result = RDI_RegisterCode_X64_fpr1;}break;
|
||||
case REGS_RegCodeX64_fpr2:{result = RDI_RegisterCode_X64_fpr2;}break;
|
||||
case REGS_RegCodeX64_fpr3:{result = RDI_RegisterCode_X64_fpr3;}break;
|
||||
case REGS_RegCodeX64_fpr4:{result = RDI_RegisterCode_X64_fpr4;}break;
|
||||
case REGS_RegCodeX64_fpr5:{result = RDI_RegisterCode_X64_fpr5;}break;
|
||||
case REGS_RegCodeX64_fpr6:{result = RDI_RegisterCode_X64_fpr6;}break;
|
||||
case REGS_RegCodeX64_fpr7:{result = RDI_RegisterCode_X64_fpr7;}break;
|
||||
case REGS_RegCodeX64_st0:{result = RDI_RegisterCode_X64_st0;}break;
|
||||
case REGS_RegCodeX64_st1:{result = RDI_RegisterCode_X64_st1;}break;
|
||||
case REGS_RegCodeX64_st2:{result = RDI_RegisterCode_X64_st2;}break;
|
||||
case REGS_RegCodeX64_st3:{result = RDI_RegisterCode_X64_st3;}break;
|
||||
case REGS_RegCodeX64_st4:{result = RDI_RegisterCode_X64_st4;}break;
|
||||
case REGS_RegCodeX64_st5:{result = RDI_RegisterCode_X64_st5;}break;
|
||||
case REGS_RegCodeX64_st6:{result = RDI_RegisterCode_X64_st6;}break;
|
||||
case REGS_RegCodeX64_st7:{result = RDI_RegisterCode_X64_st7;}break;
|
||||
case REGS_RegCodeX64_fcw:{result = RDI_RegisterCode_X64_fcw;}break;
|
||||
case REGS_RegCodeX64_fsw:{result = RDI_RegisterCode_X64_fsw;}break;
|
||||
case REGS_RegCodeX64_ftw:{result = RDI_RegisterCode_X64_ftw;}break;
|
||||
case REGS_RegCodeX64_fop:{result = RDI_RegisterCode_X64_fop;}break;
|
||||
case REGS_RegCodeX64_fcs:{result = RDI_RegisterCode_X64_fcs;}break;
|
||||
case REGS_RegCodeX64_fds:{result = RDI_RegisterCode_X64_fds;}break;
|
||||
case REGS_RegCodeX64_fip:{result = RDI_RegisterCode_X64_fip;}break;
|
||||
case REGS_RegCodeX64_fdp:{result = RDI_RegisterCode_X64_fdp;}break;
|
||||
case REGS_RegCodeX64_mxcsr:{result = RDI_RegisterCode_X64_mxcsr;}break;
|
||||
case REGS_RegCodeX64_mxcsr_mask:{result = RDI_RegisterCode_X64_mxcsr_mask;}break;
|
||||
case REGS_RegCodeX64_ss:{result = RDI_RegisterCode_X64_ss;}break;
|
||||
case REGS_RegCodeX64_cs:{result = RDI_RegisterCode_X64_cs;}break;
|
||||
case REGS_RegCodeX64_ds:{result = RDI_RegisterCode_X64_ds;}break;
|
||||
case REGS_RegCodeX64_es:{result = RDI_RegisterCode_X64_es;}break;
|
||||
case REGS_RegCodeX64_fs:{result = RDI_RegisterCode_X64_fs;}break;
|
||||
case REGS_RegCodeX64_gs:{result = RDI_RegisterCode_X64_gs;}break;
|
||||
case REGS_RegCodeX64_ymm0:{result = RDI_RegisterCode_X64_ymm0;}break;
|
||||
case REGS_RegCodeX64_ymm1:{result = RDI_RegisterCode_X64_ymm1;}break;
|
||||
case REGS_RegCodeX64_ymm2:{result = RDI_RegisterCode_X64_ymm2;}break;
|
||||
case REGS_RegCodeX64_ymm3:{result = RDI_RegisterCode_X64_ymm3;}break;
|
||||
case REGS_RegCodeX64_ymm4:{result = RDI_RegisterCode_X64_ymm4;}break;
|
||||
case REGS_RegCodeX64_ymm5:{result = RDI_RegisterCode_X64_ymm5;}break;
|
||||
case REGS_RegCodeX64_ymm6:{result = RDI_RegisterCode_X64_ymm6;}break;
|
||||
case REGS_RegCodeX64_ymm7:{result = RDI_RegisterCode_X64_ymm7;}break;
|
||||
case REGS_RegCodeX64_ymm8:{result = RDI_RegisterCode_X64_ymm8;}break;
|
||||
case REGS_RegCodeX64_ymm9:{result = RDI_RegisterCode_X64_ymm9;}break;
|
||||
case REGS_RegCodeX64_ymm10:{result = RDI_RegisterCode_X64_ymm10;}break;
|
||||
case REGS_RegCodeX64_ymm11:{result = RDI_RegisterCode_X64_ymm11;}break;
|
||||
case REGS_RegCodeX64_ymm12:{result = RDI_RegisterCode_X64_ymm12;}break;
|
||||
case REGS_RegCodeX64_ymm13:{result = RDI_RegisterCode_X64_ymm13;}break;
|
||||
case REGS_RegCodeX64_ymm14:{result = RDI_RegisterCode_X64_ymm14;}break;
|
||||
case REGS_RegCodeX64_ymm15:{result = RDI_RegisterCode_X64_ymm15;}break;
|
||||
case REGS_RegCodeX64_rax:{result = RDI_RegCodeX64_rax;}break;
|
||||
case REGS_RegCodeX64_rcx:{result = RDI_RegCodeX64_rcx;}break;
|
||||
case REGS_RegCodeX64_rdx:{result = RDI_RegCodeX64_rdx;}break;
|
||||
case REGS_RegCodeX64_rbx:{result = RDI_RegCodeX64_rbx;}break;
|
||||
case REGS_RegCodeX64_rsp:{result = RDI_RegCodeX64_rsp;}break;
|
||||
case REGS_RegCodeX64_rbp:{result = RDI_RegCodeX64_rbp;}break;
|
||||
case REGS_RegCodeX64_rsi:{result = RDI_RegCodeX64_rsi;}break;
|
||||
case REGS_RegCodeX64_rdi:{result = RDI_RegCodeX64_rdi;}break;
|
||||
case REGS_RegCodeX64_r8:{result = RDI_RegCodeX64_r8;}break;
|
||||
case REGS_RegCodeX64_r9:{result = RDI_RegCodeX64_r9;}break;
|
||||
case REGS_RegCodeX64_r10:{result = RDI_RegCodeX64_r10;}break;
|
||||
case REGS_RegCodeX64_r11:{result = RDI_RegCodeX64_r11;}break;
|
||||
case REGS_RegCodeX64_r12:{result = RDI_RegCodeX64_r12;}break;
|
||||
case REGS_RegCodeX64_r13:{result = RDI_RegCodeX64_r13;}break;
|
||||
case REGS_RegCodeX64_r14:{result = RDI_RegCodeX64_r14;}break;
|
||||
case REGS_RegCodeX64_r15:{result = RDI_RegCodeX64_r15;}break;
|
||||
case REGS_RegCodeX64_fsbase:{result = RDI_RegCodeX64_fsbase;}break;
|
||||
case REGS_RegCodeX64_gsbase:{result = RDI_RegCodeX64_gsbase;}break;
|
||||
case REGS_RegCodeX64_rip:{result = RDI_RegCodeX64_rip;}break;
|
||||
case REGS_RegCodeX64_rflags:{result = RDI_RegCodeX64_rflags;}break;
|
||||
case REGS_RegCodeX64_dr0:{result = RDI_RegCodeX64_dr0;}break;
|
||||
case REGS_RegCodeX64_dr1:{result = RDI_RegCodeX64_dr1;}break;
|
||||
case REGS_RegCodeX64_dr2:{result = RDI_RegCodeX64_dr2;}break;
|
||||
case REGS_RegCodeX64_dr3:{result = RDI_RegCodeX64_dr3;}break;
|
||||
case REGS_RegCodeX64_dr4:{result = RDI_RegCodeX64_dr4;}break;
|
||||
case REGS_RegCodeX64_dr5:{result = RDI_RegCodeX64_dr5;}break;
|
||||
case REGS_RegCodeX64_dr6:{result = RDI_RegCodeX64_dr6;}break;
|
||||
case REGS_RegCodeX64_dr7:{result = RDI_RegCodeX64_dr7;}break;
|
||||
case REGS_RegCodeX64_fpr0:{result = RDI_RegCodeX64_fpr0;}break;
|
||||
case REGS_RegCodeX64_fpr1:{result = RDI_RegCodeX64_fpr1;}break;
|
||||
case REGS_RegCodeX64_fpr2:{result = RDI_RegCodeX64_fpr2;}break;
|
||||
case REGS_RegCodeX64_fpr3:{result = RDI_RegCodeX64_fpr3;}break;
|
||||
case REGS_RegCodeX64_fpr4:{result = RDI_RegCodeX64_fpr4;}break;
|
||||
case REGS_RegCodeX64_fpr5:{result = RDI_RegCodeX64_fpr5;}break;
|
||||
case REGS_RegCodeX64_fpr6:{result = RDI_RegCodeX64_fpr6;}break;
|
||||
case REGS_RegCodeX64_fpr7:{result = RDI_RegCodeX64_fpr7;}break;
|
||||
case REGS_RegCodeX64_st0:{result = RDI_RegCodeX64_st0;}break;
|
||||
case REGS_RegCodeX64_st1:{result = RDI_RegCodeX64_st1;}break;
|
||||
case REGS_RegCodeX64_st2:{result = RDI_RegCodeX64_st2;}break;
|
||||
case REGS_RegCodeX64_st3:{result = RDI_RegCodeX64_st3;}break;
|
||||
case REGS_RegCodeX64_st4:{result = RDI_RegCodeX64_st4;}break;
|
||||
case REGS_RegCodeX64_st5:{result = RDI_RegCodeX64_st5;}break;
|
||||
case REGS_RegCodeX64_st6:{result = RDI_RegCodeX64_st6;}break;
|
||||
case REGS_RegCodeX64_st7:{result = RDI_RegCodeX64_st7;}break;
|
||||
case REGS_RegCodeX64_fcw:{result = RDI_RegCodeX64_fcw;}break;
|
||||
case REGS_RegCodeX64_fsw:{result = RDI_RegCodeX64_fsw;}break;
|
||||
case REGS_RegCodeX64_ftw:{result = RDI_RegCodeX64_ftw;}break;
|
||||
case REGS_RegCodeX64_fop:{result = RDI_RegCodeX64_fop;}break;
|
||||
case REGS_RegCodeX64_fcs:{result = RDI_RegCodeX64_fcs;}break;
|
||||
case REGS_RegCodeX64_fds:{result = RDI_RegCodeX64_fds;}break;
|
||||
case REGS_RegCodeX64_fip:{result = RDI_RegCodeX64_fip;}break;
|
||||
case REGS_RegCodeX64_fdp:{result = RDI_RegCodeX64_fdp;}break;
|
||||
case REGS_RegCodeX64_mxcsr:{result = RDI_RegCodeX64_mxcsr;}break;
|
||||
case REGS_RegCodeX64_mxcsr_mask:{result = RDI_RegCodeX64_mxcsr_mask;}break;
|
||||
case REGS_RegCodeX64_ss:{result = RDI_RegCodeX64_ss;}break;
|
||||
case REGS_RegCodeX64_cs:{result = RDI_RegCodeX64_cs;}break;
|
||||
case REGS_RegCodeX64_ds:{result = RDI_RegCodeX64_ds;}break;
|
||||
case REGS_RegCodeX64_es:{result = RDI_RegCodeX64_es;}break;
|
||||
case REGS_RegCodeX64_fs:{result = RDI_RegCodeX64_fs;}break;
|
||||
case REGS_RegCodeX64_gs:{result = RDI_RegCodeX64_gs;}break;
|
||||
case REGS_RegCodeX64_ymm0:{result = RDI_RegCodeX64_ymm0;}break;
|
||||
case REGS_RegCodeX64_ymm1:{result = RDI_RegCodeX64_ymm1;}break;
|
||||
case REGS_RegCodeX64_ymm2:{result = RDI_RegCodeX64_ymm2;}break;
|
||||
case REGS_RegCodeX64_ymm3:{result = RDI_RegCodeX64_ymm3;}break;
|
||||
case REGS_RegCodeX64_ymm4:{result = RDI_RegCodeX64_ymm4;}break;
|
||||
case REGS_RegCodeX64_ymm5:{result = RDI_RegCodeX64_ymm5;}break;
|
||||
case REGS_RegCodeX64_ymm6:{result = RDI_RegCodeX64_ymm6;}break;
|
||||
case REGS_RegCodeX64_ymm7:{result = RDI_RegCodeX64_ymm7;}break;
|
||||
case REGS_RegCodeX64_ymm8:{result = RDI_RegCodeX64_ymm8;}break;
|
||||
case REGS_RegCodeX64_ymm9:{result = RDI_RegCodeX64_ymm9;}break;
|
||||
case REGS_RegCodeX64_ymm10:{result = RDI_RegCodeX64_ymm10;}break;
|
||||
case REGS_RegCodeX64_ymm11:{result = RDI_RegCodeX64_ymm11;}break;
|
||||
case REGS_RegCodeX64_ymm12:{result = RDI_RegCodeX64_ymm12;}break;
|
||||
case REGS_RegCodeX64_ymm13:{result = RDI_RegCodeX64_ymm13;}break;
|
||||
case REGS_RegCodeX64_ymm14:{result = RDI_RegCodeX64_ymm14;}break;
|
||||
case REGS_RegCodeX64_ymm15:{result = RDI_RegCodeX64_ymm15;}break;
|
||||
}
|
||||
}break;
|
||||
case Architecture_x86:
|
||||
@@ -97,72 +97,72 @@ case Architecture_x86:
|
||||
switch(code)
|
||||
{
|
||||
default:{}break;
|
||||
case REGS_RegCodeX86_eax:{result = RDI_RegisterCode_X86_eax;}break;
|
||||
case REGS_RegCodeX86_ecx:{result = RDI_RegisterCode_X86_ecx;}break;
|
||||
case REGS_RegCodeX86_edx:{result = RDI_RegisterCode_X86_edx;}break;
|
||||
case REGS_RegCodeX86_ebx:{result = RDI_RegisterCode_X86_ebx;}break;
|
||||
case REGS_RegCodeX86_esp:{result = RDI_RegisterCode_X86_esp;}break;
|
||||
case REGS_RegCodeX86_ebp:{result = RDI_RegisterCode_X86_ebp;}break;
|
||||
case REGS_RegCodeX86_esi:{result = RDI_RegisterCode_X86_esi;}break;
|
||||
case REGS_RegCodeX86_edi:{result = RDI_RegisterCode_X86_edi;}break;
|
||||
case REGS_RegCodeX86_fsbase:{result = RDI_RegisterCode_X86_fsbase;}break;
|
||||
case REGS_RegCodeX86_gsbase:{result = RDI_RegisterCode_X86_gsbase;}break;
|
||||
case REGS_RegCodeX86_eflags:{result = RDI_RegisterCode_X86_eflags;}break;
|
||||
case REGS_RegCodeX86_eip:{result = RDI_RegisterCode_X86_eip;}break;
|
||||
case REGS_RegCodeX86_dr0:{result = RDI_RegisterCode_X86_dr0;}break;
|
||||
case REGS_RegCodeX86_dr1:{result = RDI_RegisterCode_X86_dr1;}break;
|
||||
case REGS_RegCodeX86_dr2:{result = RDI_RegisterCode_X86_dr2;}break;
|
||||
case REGS_RegCodeX86_dr3:{result = RDI_RegisterCode_X86_dr3;}break;
|
||||
case REGS_RegCodeX86_dr4:{result = RDI_RegisterCode_X86_dr4;}break;
|
||||
case REGS_RegCodeX86_dr5:{result = RDI_RegisterCode_X86_dr5;}break;
|
||||
case REGS_RegCodeX86_dr6:{result = RDI_RegisterCode_X86_dr6;}break;
|
||||
case REGS_RegCodeX86_dr7:{result = RDI_RegisterCode_X86_dr7;}break;
|
||||
case REGS_RegCodeX86_fpr0:{result = RDI_RegisterCode_X86_fpr0;}break;
|
||||
case REGS_RegCodeX86_fpr1:{result = RDI_RegisterCode_X86_fpr1;}break;
|
||||
case REGS_RegCodeX86_fpr2:{result = RDI_RegisterCode_X86_fpr2;}break;
|
||||
case REGS_RegCodeX86_fpr3:{result = RDI_RegisterCode_X86_fpr3;}break;
|
||||
case REGS_RegCodeX86_fpr4:{result = RDI_RegisterCode_X86_fpr4;}break;
|
||||
case REGS_RegCodeX86_fpr5:{result = RDI_RegisterCode_X86_fpr5;}break;
|
||||
case REGS_RegCodeX86_fpr6:{result = RDI_RegisterCode_X86_fpr6;}break;
|
||||
case REGS_RegCodeX86_fpr7:{result = RDI_RegisterCode_X86_fpr7;}break;
|
||||
case REGS_RegCodeX86_st0:{result = RDI_RegisterCode_X86_st0;}break;
|
||||
case REGS_RegCodeX86_st1:{result = RDI_RegisterCode_X86_st1;}break;
|
||||
case REGS_RegCodeX86_st2:{result = RDI_RegisterCode_X86_st2;}break;
|
||||
case REGS_RegCodeX86_st3:{result = RDI_RegisterCode_X86_st3;}break;
|
||||
case REGS_RegCodeX86_st4:{result = RDI_RegisterCode_X86_st4;}break;
|
||||
case REGS_RegCodeX86_st5:{result = RDI_RegisterCode_X86_st5;}break;
|
||||
case REGS_RegCodeX86_st6:{result = RDI_RegisterCode_X86_st6;}break;
|
||||
case REGS_RegCodeX86_st7:{result = RDI_RegisterCode_X86_st7;}break;
|
||||
case REGS_RegCodeX86_fcw:{result = RDI_RegisterCode_X86_fcw;}break;
|
||||
case REGS_RegCodeX86_fsw:{result = RDI_RegisterCode_X86_fsw;}break;
|
||||
case REGS_RegCodeX86_ftw:{result = RDI_RegisterCode_X86_ftw;}break;
|
||||
case REGS_RegCodeX86_fop:{result = RDI_RegisterCode_X86_fop;}break;
|
||||
case REGS_RegCodeX86_fcs:{result = RDI_RegisterCode_X86_fcs;}break;
|
||||
case REGS_RegCodeX86_fds:{result = RDI_RegisterCode_X86_fds;}break;
|
||||
case REGS_RegCodeX86_fip:{result = RDI_RegisterCode_X86_fip;}break;
|
||||
case REGS_RegCodeX86_fdp:{result = RDI_RegisterCode_X86_fdp;}break;
|
||||
case REGS_RegCodeX86_mxcsr:{result = RDI_RegisterCode_X86_mxcsr;}break;
|
||||
case REGS_RegCodeX86_mxcsr_mask:{result = RDI_RegisterCode_X86_mxcsr_mask;}break;
|
||||
case REGS_RegCodeX86_ss:{result = RDI_RegisterCode_X86_ss;}break;
|
||||
case REGS_RegCodeX86_cs:{result = RDI_RegisterCode_X86_cs;}break;
|
||||
case REGS_RegCodeX86_ds:{result = RDI_RegisterCode_X86_ds;}break;
|
||||
case REGS_RegCodeX86_es:{result = RDI_RegisterCode_X86_es;}break;
|
||||
case REGS_RegCodeX86_fs:{result = RDI_RegisterCode_X86_fs;}break;
|
||||
case REGS_RegCodeX86_gs:{result = RDI_RegisterCode_X86_gs;}break;
|
||||
case REGS_RegCodeX86_ymm0:{result = RDI_RegisterCode_X86_ymm0;}break;
|
||||
case REGS_RegCodeX86_ymm1:{result = RDI_RegisterCode_X86_ymm1;}break;
|
||||
case REGS_RegCodeX86_ymm2:{result = RDI_RegisterCode_X86_ymm2;}break;
|
||||
case REGS_RegCodeX86_ymm3:{result = RDI_RegisterCode_X86_ymm3;}break;
|
||||
case REGS_RegCodeX86_ymm4:{result = RDI_RegisterCode_X86_ymm4;}break;
|
||||
case REGS_RegCodeX86_ymm5:{result = RDI_RegisterCode_X86_ymm5;}break;
|
||||
case REGS_RegCodeX86_ymm6:{result = RDI_RegisterCode_X86_ymm6;}break;
|
||||
case REGS_RegCodeX86_ymm7:{result = RDI_RegisterCode_X86_ymm7;}break;
|
||||
case REGS_RegCodeX86_eax:{result = RDI_RegCodeX86_eax;}break;
|
||||
case REGS_RegCodeX86_ecx:{result = RDI_RegCodeX86_ecx;}break;
|
||||
case REGS_RegCodeX86_edx:{result = RDI_RegCodeX86_edx;}break;
|
||||
case REGS_RegCodeX86_ebx:{result = RDI_RegCodeX86_ebx;}break;
|
||||
case REGS_RegCodeX86_esp:{result = RDI_RegCodeX86_esp;}break;
|
||||
case REGS_RegCodeX86_ebp:{result = RDI_RegCodeX86_ebp;}break;
|
||||
case REGS_RegCodeX86_esi:{result = RDI_RegCodeX86_esi;}break;
|
||||
case REGS_RegCodeX86_edi:{result = RDI_RegCodeX86_edi;}break;
|
||||
case REGS_RegCodeX86_fsbase:{result = RDI_RegCodeX86_fsbase;}break;
|
||||
case REGS_RegCodeX86_gsbase:{result = RDI_RegCodeX86_gsbase;}break;
|
||||
case REGS_RegCodeX86_eflags:{result = RDI_RegCodeX86_eflags;}break;
|
||||
case REGS_RegCodeX86_eip:{result = RDI_RegCodeX86_eip;}break;
|
||||
case REGS_RegCodeX86_dr0:{result = RDI_RegCodeX86_dr0;}break;
|
||||
case REGS_RegCodeX86_dr1:{result = RDI_RegCodeX86_dr1;}break;
|
||||
case REGS_RegCodeX86_dr2:{result = RDI_RegCodeX86_dr2;}break;
|
||||
case REGS_RegCodeX86_dr3:{result = RDI_RegCodeX86_dr3;}break;
|
||||
case REGS_RegCodeX86_dr4:{result = RDI_RegCodeX86_dr4;}break;
|
||||
case REGS_RegCodeX86_dr5:{result = RDI_RegCodeX86_dr5;}break;
|
||||
case REGS_RegCodeX86_dr6:{result = RDI_RegCodeX86_dr6;}break;
|
||||
case REGS_RegCodeX86_dr7:{result = RDI_RegCodeX86_dr7;}break;
|
||||
case REGS_RegCodeX86_fpr0:{result = RDI_RegCodeX86_fpr0;}break;
|
||||
case REGS_RegCodeX86_fpr1:{result = RDI_RegCodeX86_fpr1;}break;
|
||||
case REGS_RegCodeX86_fpr2:{result = RDI_RegCodeX86_fpr2;}break;
|
||||
case REGS_RegCodeX86_fpr3:{result = RDI_RegCodeX86_fpr3;}break;
|
||||
case REGS_RegCodeX86_fpr4:{result = RDI_RegCodeX86_fpr4;}break;
|
||||
case REGS_RegCodeX86_fpr5:{result = RDI_RegCodeX86_fpr5;}break;
|
||||
case REGS_RegCodeX86_fpr6:{result = RDI_RegCodeX86_fpr6;}break;
|
||||
case REGS_RegCodeX86_fpr7:{result = RDI_RegCodeX86_fpr7;}break;
|
||||
case REGS_RegCodeX86_st0:{result = RDI_RegCodeX86_st0;}break;
|
||||
case REGS_RegCodeX86_st1:{result = RDI_RegCodeX86_st1;}break;
|
||||
case REGS_RegCodeX86_st2:{result = RDI_RegCodeX86_st2;}break;
|
||||
case REGS_RegCodeX86_st3:{result = RDI_RegCodeX86_st3;}break;
|
||||
case REGS_RegCodeX86_st4:{result = RDI_RegCodeX86_st4;}break;
|
||||
case REGS_RegCodeX86_st5:{result = RDI_RegCodeX86_st5;}break;
|
||||
case REGS_RegCodeX86_st6:{result = RDI_RegCodeX86_st6;}break;
|
||||
case REGS_RegCodeX86_st7:{result = RDI_RegCodeX86_st7;}break;
|
||||
case REGS_RegCodeX86_fcw:{result = RDI_RegCodeX86_fcw;}break;
|
||||
case REGS_RegCodeX86_fsw:{result = RDI_RegCodeX86_fsw;}break;
|
||||
case REGS_RegCodeX86_ftw:{result = RDI_RegCodeX86_ftw;}break;
|
||||
case REGS_RegCodeX86_fop:{result = RDI_RegCodeX86_fop;}break;
|
||||
case REGS_RegCodeX86_fcs:{result = RDI_RegCodeX86_fcs;}break;
|
||||
case REGS_RegCodeX86_fds:{result = RDI_RegCodeX86_fds;}break;
|
||||
case REGS_RegCodeX86_fip:{result = RDI_RegCodeX86_fip;}break;
|
||||
case REGS_RegCodeX86_fdp:{result = RDI_RegCodeX86_fdp;}break;
|
||||
case REGS_RegCodeX86_mxcsr:{result = RDI_RegCodeX86_mxcsr;}break;
|
||||
case REGS_RegCodeX86_mxcsr_mask:{result = RDI_RegCodeX86_mxcsr_mask;}break;
|
||||
case REGS_RegCodeX86_ss:{result = RDI_RegCodeX86_ss;}break;
|
||||
case REGS_RegCodeX86_cs:{result = RDI_RegCodeX86_cs;}break;
|
||||
case REGS_RegCodeX86_ds:{result = RDI_RegCodeX86_ds;}break;
|
||||
case REGS_RegCodeX86_es:{result = RDI_RegCodeX86_es;}break;
|
||||
case REGS_RegCodeX86_fs:{result = RDI_RegCodeX86_fs;}break;
|
||||
case REGS_RegCodeX86_gs:{result = RDI_RegCodeX86_gs;}break;
|
||||
case REGS_RegCodeX86_ymm0:{result = RDI_RegCodeX86_ymm0;}break;
|
||||
case REGS_RegCodeX86_ymm1:{result = RDI_RegCodeX86_ymm1;}break;
|
||||
case REGS_RegCodeX86_ymm2:{result = RDI_RegCodeX86_ymm2;}break;
|
||||
case REGS_RegCodeX86_ymm3:{result = RDI_RegCodeX86_ymm3;}break;
|
||||
case REGS_RegCodeX86_ymm4:{result = RDI_RegCodeX86_ymm4;}break;
|
||||
case REGS_RegCodeX86_ymm5:{result = RDI_RegCodeX86_ymm5;}break;
|
||||
case REGS_RegCodeX86_ymm6:{result = RDI_RegCodeX86_ymm6;}break;
|
||||
case REGS_RegCodeX86_ymm7:{result = RDI_RegCodeX86_ymm7;}break;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode code)
|
||||
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegCode code)
|
||||
{
|
||||
REGS_RegCode result = 0;
|
||||
switch(arch)
|
||||
@@ -173,82 +173,82 @@ case Architecture_x64:
|
||||
switch(code)
|
||||
{
|
||||
default:{}break;
|
||||
case RDI_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
|
||||
case RDI_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
|
||||
case RDI_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
|
||||
case RDI_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
|
||||
case RDI_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
|
||||
case RDI_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
|
||||
case RDI_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
|
||||
case RDI_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
|
||||
case RDI_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
|
||||
case RDI_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
|
||||
case RDI_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
|
||||
case RDI_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
|
||||
case RDI_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
|
||||
case RDI_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
|
||||
case RDI_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
|
||||
case RDI_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
|
||||
case RDI_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
|
||||
case RDI_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
|
||||
case RDI_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
|
||||
case RDI_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
|
||||
case RDI_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
|
||||
case RDI_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
|
||||
case RDI_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
|
||||
case RDI_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
|
||||
case RDI_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
|
||||
case RDI_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
|
||||
case RDI_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
|
||||
case RDI_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
|
||||
case RDI_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
|
||||
case RDI_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
|
||||
case RDI_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
|
||||
case RDI_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
|
||||
case RDI_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
|
||||
case RDI_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
|
||||
case RDI_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
|
||||
case RDI_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
|
||||
case RDI_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
|
||||
case RDI_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
|
||||
case RDI_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
|
||||
case RDI_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
|
||||
case RDI_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
|
||||
case RDI_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
|
||||
case RDI_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
|
||||
case RDI_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
|
||||
case RDI_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
|
||||
case RDI_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
|
||||
case RDI_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
|
||||
case RDI_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
|
||||
case RDI_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
|
||||
case RDI_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
|
||||
case RDI_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
|
||||
case RDI_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
|
||||
case RDI_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
|
||||
case RDI_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
|
||||
case RDI_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
|
||||
case RDI_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
|
||||
case RDI_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
|
||||
case RDI_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
|
||||
case RDI_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
|
||||
case RDI_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
|
||||
case RDI_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
|
||||
case RDI_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
|
||||
case RDI_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
|
||||
case RDI_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
|
||||
case RDI_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
|
||||
case RDI_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
|
||||
case RDI_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
|
||||
case RDI_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
|
||||
case RDI_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
|
||||
case RDI_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
|
||||
case RDI_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
|
||||
case RDI_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
|
||||
case RDI_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
|
||||
case RDI_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
|
||||
case RDI_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
|
||||
case RDI_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
|
||||
case RDI_RegCodeX64_rax:{result = REGS_RegCodeX64_rax;}break;
|
||||
case RDI_RegCodeX64_rcx:{result = REGS_RegCodeX64_rcx;}break;
|
||||
case RDI_RegCodeX64_rdx:{result = REGS_RegCodeX64_rdx;}break;
|
||||
case RDI_RegCodeX64_rbx:{result = REGS_RegCodeX64_rbx;}break;
|
||||
case RDI_RegCodeX64_rsp:{result = REGS_RegCodeX64_rsp;}break;
|
||||
case RDI_RegCodeX64_rbp:{result = REGS_RegCodeX64_rbp;}break;
|
||||
case RDI_RegCodeX64_rsi:{result = REGS_RegCodeX64_rsi;}break;
|
||||
case RDI_RegCodeX64_rdi:{result = REGS_RegCodeX64_rdi;}break;
|
||||
case RDI_RegCodeX64_r8:{result = REGS_RegCodeX64_r8;}break;
|
||||
case RDI_RegCodeX64_r9:{result = REGS_RegCodeX64_r9;}break;
|
||||
case RDI_RegCodeX64_r10:{result = REGS_RegCodeX64_r10;}break;
|
||||
case RDI_RegCodeX64_r11:{result = REGS_RegCodeX64_r11;}break;
|
||||
case RDI_RegCodeX64_r12:{result = REGS_RegCodeX64_r12;}break;
|
||||
case RDI_RegCodeX64_r13:{result = REGS_RegCodeX64_r13;}break;
|
||||
case RDI_RegCodeX64_r14:{result = REGS_RegCodeX64_r14;}break;
|
||||
case RDI_RegCodeX64_r15:{result = REGS_RegCodeX64_r15;}break;
|
||||
case RDI_RegCodeX64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
|
||||
case RDI_RegCodeX64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
|
||||
case RDI_RegCodeX64_rip:{result = REGS_RegCodeX64_rip;}break;
|
||||
case RDI_RegCodeX64_rflags:{result = REGS_RegCodeX64_rflags;}break;
|
||||
case RDI_RegCodeX64_dr0:{result = REGS_RegCodeX64_dr0;}break;
|
||||
case RDI_RegCodeX64_dr1:{result = REGS_RegCodeX64_dr1;}break;
|
||||
case RDI_RegCodeX64_dr2:{result = REGS_RegCodeX64_dr2;}break;
|
||||
case RDI_RegCodeX64_dr3:{result = REGS_RegCodeX64_dr3;}break;
|
||||
case RDI_RegCodeX64_dr4:{result = REGS_RegCodeX64_dr4;}break;
|
||||
case RDI_RegCodeX64_dr5:{result = REGS_RegCodeX64_dr5;}break;
|
||||
case RDI_RegCodeX64_dr6:{result = REGS_RegCodeX64_dr6;}break;
|
||||
case RDI_RegCodeX64_dr7:{result = REGS_RegCodeX64_dr7;}break;
|
||||
case RDI_RegCodeX64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
|
||||
case RDI_RegCodeX64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
|
||||
case RDI_RegCodeX64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
|
||||
case RDI_RegCodeX64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
|
||||
case RDI_RegCodeX64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
|
||||
case RDI_RegCodeX64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
|
||||
case RDI_RegCodeX64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
|
||||
case RDI_RegCodeX64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
|
||||
case RDI_RegCodeX64_st0:{result = REGS_RegCodeX64_st0;}break;
|
||||
case RDI_RegCodeX64_st1:{result = REGS_RegCodeX64_st1;}break;
|
||||
case RDI_RegCodeX64_st2:{result = REGS_RegCodeX64_st2;}break;
|
||||
case RDI_RegCodeX64_st3:{result = REGS_RegCodeX64_st3;}break;
|
||||
case RDI_RegCodeX64_st4:{result = REGS_RegCodeX64_st4;}break;
|
||||
case RDI_RegCodeX64_st5:{result = REGS_RegCodeX64_st5;}break;
|
||||
case RDI_RegCodeX64_st6:{result = REGS_RegCodeX64_st6;}break;
|
||||
case RDI_RegCodeX64_st7:{result = REGS_RegCodeX64_st7;}break;
|
||||
case RDI_RegCodeX64_fcw:{result = REGS_RegCodeX64_fcw;}break;
|
||||
case RDI_RegCodeX64_fsw:{result = REGS_RegCodeX64_fsw;}break;
|
||||
case RDI_RegCodeX64_ftw:{result = REGS_RegCodeX64_ftw;}break;
|
||||
case RDI_RegCodeX64_fop:{result = REGS_RegCodeX64_fop;}break;
|
||||
case RDI_RegCodeX64_fcs:{result = REGS_RegCodeX64_fcs;}break;
|
||||
case RDI_RegCodeX64_fds:{result = REGS_RegCodeX64_fds;}break;
|
||||
case RDI_RegCodeX64_fip:{result = REGS_RegCodeX64_fip;}break;
|
||||
case RDI_RegCodeX64_fdp:{result = REGS_RegCodeX64_fdp;}break;
|
||||
case RDI_RegCodeX64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
|
||||
case RDI_RegCodeX64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
|
||||
case RDI_RegCodeX64_ss:{result = REGS_RegCodeX64_ss;}break;
|
||||
case RDI_RegCodeX64_cs:{result = REGS_RegCodeX64_cs;}break;
|
||||
case RDI_RegCodeX64_ds:{result = REGS_RegCodeX64_ds;}break;
|
||||
case RDI_RegCodeX64_es:{result = REGS_RegCodeX64_es;}break;
|
||||
case RDI_RegCodeX64_fs:{result = REGS_RegCodeX64_fs;}break;
|
||||
case RDI_RegCodeX64_gs:{result = REGS_RegCodeX64_gs;}break;
|
||||
case RDI_RegCodeX64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
|
||||
case RDI_RegCodeX64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
|
||||
case RDI_RegCodeX64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
|
||||
case RDI_RegCodeX64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
|
||||
case RDI_RegCodeX64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
|
||||
case RDI_RegCodeX64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
|
||||
case RDI_RegCodeX64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
|
||||
case RDI_RegCodeX64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
|
||||
case RDI_RegCodeX64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
|
||||
case RDI_RegCodeX64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
|
||||
case RDI_RegCodeX64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
|
||||
case RDI_RegCodeX64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
|
||||
case RDI_RegCodeX64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
|
||||
case RDI_RegCodeX64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
|
||||
case RDI_RegCodeX64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
|
||||
case RDI_RegCodeX64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
|
||||
}
|
||||
}break;
|
||||
case Architecture_x86:
|
||||
@@ -256,71 +256,68 @@ case Architecture_x86:
|
||||
switch(code)
|
||||
{
|
||||
default:{}break;
|
||||
case RDI_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
|
||||
case RDI_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
|
||||
case RDI_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
|
||||
case RDI_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
|
||||
case RDI_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
|
||||
case RDI_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
|
||||
case RDI_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
|
||||
case RDI_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
|
||||
case RDI_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
|
||||
case RDI_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
|
||||
case RDI_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
|
||||
case RDI_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
|
||||
case RDI_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
|
||||
case RDI_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
|
||||
case RDI_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
|
||||
case RDI_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
|
||||
case RDI_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
|
||||
case RDI_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
|
||||
case RDI_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
|
||||
case RDI_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
|
||||
case RDI_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
|
||||
case RDI_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
|
||||
case RDI_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
|
||||
case RDI_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
|
||||
case RDI_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
|
||||
case RDI_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
|
||||
case RDI_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
|
||||
case RDI_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
|
||||
case RDI_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
|
||||
case RDI_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
|
||||
case RDI_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
|
||||
case RDI_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
|
||||
case RDI_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
|
||||
case RDI_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
|
||||
case RDI_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
|
||||
case RDI_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
|
||||
case RDI_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
|
||||
case RDI_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
|
||||
case RDI_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
|
||||
case RDI_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
|
||||
case RDI_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
|
||||
case RDI_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
|
||||
case RDI_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
|
||||
case RDI_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
|
||||
case RDI_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
|
||||
case RDI_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
|
||||
case RDI_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
|
||||
case RDI_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
|
||||
case RDI_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
|
||||
case RDI_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
|
||||
case RDI_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
|
||||
case RDI_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
|
||||
case RDI_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
|
||||
case RDI_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
|
||||
case RDI_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
|
||||
case RDI_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
|
||||
case RDI_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
|
||||
case RDI_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
|
||||
case RDI_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
|
||||
case RDI_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
|
||||
case RDI_RegCodeX86_eax:{result = REGS_RegCodeX86_eax;}break;
|
||||
case RDI_RegCodeX86_ecx:{result = REGS_RegCodeX86_ecx;}break;
|
||||
case RDI_RegCodeX86_edx:{result = REGS_RegCodeX86_edx;}break;
|
||||
case RDI_RegCodeX86_ebx:{result = REGS_RegCodeX86_ebx;}break;
|
||||
case RDI_RegCodeX86_esp:{result = REGS_RegCodeX86_esp;}break;
|
||||
case RDI_RegCodeX86_ebp:{result = REGS_RegCodeX86_ebp;}break;
|
||||
case RDI_RegCodeX86_esi:{result = REGS_RegCodeX86_esi;}break;
|
||||
case RDI_RegCodeX86_edi:{result = REGS_RegCodeX86_edi;}break;
|
||||
case RDI_RegCodeX86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
|
||||
case RDI_RegCodeX86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
|
||||
case RDI_RegCodeX86_eflags:{result = REGS_RegCodeX86_eflags;}break;
|
||||
case RDI_RegCodeX86_eip:{result = REGS_RegCodeX86_eip;}break;
|
||||
case RDI_RegCodeX86_dr0:{result = REGS_RegCodeX86_dr0;}break;
|
||||
case RDI_RegCodeX86_dr1:{result = REGS_RegCodeX86_dr1;}break;
|
||||
case RDI_RegCodeX86_dr2:{result = REGS_RegCodeX86_dr2;}break;
|
||||
case RDI_RegCodeX86_dr3:{result = REGS_RegCodeX86_dr3;}break;
|
||||
case RDI_RegCodeX86_dr4:{result = REGS_RegCodeX86_dr4;}break;
|
||||
case RDI_RegCodeX86_dr5:{result = REGS_RegCodeX86_dr5;}break;
|
||||
case RDI_RegCodeX86_dr6:{result = REGS_RegCodeX86_dr6;}break;
|
||||
case RDI_RegCodeX86_dr7:{result = REGS_RegCodeX86_dr7;}break;
|
||||
case RDI_RegCodeX86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
|
||||
case RDI_RegCodeX86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
|
||||
case RDI_RegCodeX86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
|
||||
case RDI_RegCodeX86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
|
||||
case RDI_RegCodeX86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
|
||||
case RDI_RegCodeX86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
|
||||
case RDI_RegCodeX86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
|
||||
case RDI_RegCodeX86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
|
||||
case RDI_RegCodeX86_st0:{result = REGS_RegCodeX86_st0;}break;
|
||||
case RDI_RegCodeX86_st1:{result = REGS_RegCodeX86_st1;}break;
|
||||
case RDI_RegCodeX86_st2:{result = REGS_RegCodeX86_st2;}break;
|
||||
case RDI_RegCodeX86_st3:{result = REGS_RegCodeX86_st3;}break;
|
||||
case RDI_RegCodeX86_st4:{result = REGS_RegCodeX86_st4;}break;
|
||||
case RDI_RegCodeX86_st5:{result = REGS_RegCodeX86_st5;}break;
|
||||
case RDI_RegCodeX86_st6:{result = REGS_RegCodeX86_st6;}break;
|
||||
case RDI_RegCodeX86_st7:{result = REGS_RegCodeX86_st7;}break;
|
||||
case RDI_RegCodeX86_fcw:{result = REGS_RegCodeX86_fcw;}break;
|
||||
case RDI_RegCodeX86_fsw:{result = REGS_RegCodeX86_fsw;}break;
|
||||
case RDI_RegCodeX86_ftw:{result = REGS_RegCodeX86_ftw;}break;
|
||||
case RDI_RegCodeX86_fop:{result = REGS_RegCodeX86_fop;}break;
|
||||
case RDI_RegCodeX86_fcs:{result = REGS_RegCodeX86_fcs;}break;
|
||||
case RDI_RegCodeX86_fds:{result = REGS_RegCodeX86_fds;}break;
|
||||
case RDI_RegCodeX86_fip:{result = REGS_RegCodeX86_fip;}break;
|
||||
case RDI_RegCodeX86_fdp:{result = REGS_RegCodeX86_fdp;}break;
|
||||
case RDI_RegCodeX86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
|
||||
case RDI_RegCodeX86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
|
||||
case RDI_RegCodeX86_ss:{result = REGS_RegCodeX86_ss;}break;
|
||||
case RDI_RegCodeX86_cs:{result = REGS_RegCodeX86_cs;}break;
|
||||
case RDI_RegCodeX86_ds:{result = REGS_RegCodeX86_ds;}break;
|
||||
case RDI_RegCodeX86_es:{result = REGS_RegCodeX86_es;}break;
|
||||
case RDI_RegCodeX86_fs:{result = REGS_RegCodeX86_fs;}break;
|
||||
case RDI_RegCodeX86_gs:{result = REGS_RegCodeX86_gs;}break;
|
||||
case RDI_RegCodeX86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
|
||||
case RDI_RegCodeX86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
|
||||
case RDI_RegCodeX86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
|
||||
case RDI_RegCodeX86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
|
||||
case RDI_RegCodeX86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
|
||||
case RDI_RegCodeX86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
|
||||
case RDI_RegCodeX86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
|
||||
case RDI_RegCodeX86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
@@ -6,7 +6,4 @@
|
||||
#ifndef REGS_RDI_META_H
|
||||
#define REGS_RDI_META_H
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // REGS_RDI_META_H
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#ifndef REGS_RDI_H
|
||||
#define REGS_RDI_H
|
||||
|
||||
internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
|
||||
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode reg);
|
||||
internal RDI_RegCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
|
||||
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegCode reg);
|
||||
|
||||
#endif //REGS_RDI_H
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
@gen @c_file
|
||||
{
|
||||
`internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`;
|
||||
`internal RDI_RegCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`;
|
||||
`{`;
|
||||
`RDI_RegisterCode result = 0;`;
|
||||
`RDI_RegCode result = 0;`;
|
||||
`switch(arch)`;
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@@ -17,7 +17,7 @@
|
||||
`switch(code)`
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RDI_RegisterCode_X64_$(a.name);}break;`;
|
||||
@expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RDI_RegCodeX64_$(a.name);}break;`;
|
||||
`}`;
|
||||
`}break;`;
|
||||
`case Architecture_x86:`;
|
||||
@@ -25,7 +25,7 @@
|
||||
`switch(code)`
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RDI_RegisterCode_X86_$(a.name);}break;`;
|
||||
@expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RDI_RegCodeX86_$(a.name);}break;`;
|
||||
`}`;
|
||||
`}break;`;
|
||||
`}`;
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
@gen @c_file
|
||||
{
|
||||
`internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode code)`;
|
||||
`internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegCode code)`;
|
||||
`{`;
|
||||
`REGS_RegCode result = 0;`;
|
||||
`switch(arch)`;
|
||||
@@ -46,7 +46,7 @@
|
||||
`switch(code)`
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@expand(REGS_RegTableX64 a) `case RDI_RegisterCode_X64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`;
|
||||
@expand(REGS_RegTableX64 a) `case RDI_RegCodeX64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`;
|
||||
`}`;
|
||||
`}break;`;
|
||||
`case Architecture_x86:`;
|
||||
@@ -54,7 +54,7 @@
|
||||
`switch(code)`
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@expand(REGS_RegTableX86 a) `case RDI_RegisterCode_X86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`;
|
||||
@expand(REGS_RegTableX86 a) `case RDI_RegCodeX86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`;
|
||||
`}`;
|
||||
`}break;`;
|
||||
`}`;
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
//- GENERATED CODE
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
String8 r_d3d11_g_vshad_kind_source_table[5] =
|
||||
String8* r_d3d11_g_vshad_kind_source_table[5] =
|
||||
{
|
||||
r_d3d11_g_rect_shader_src,
|
||||
r_d3d11_g_blur_shader_src,
|
||||
r_d3d11_g_mesh_shader_src,
|
||||
r_d3d11_g_geo3dcomposite_shader_src,
|
||||
r_d3d11_g_finalize_shader_src,
|
||||
&r_d3d11_g_rect_shader_src,
|
||||
&r_d3d11_g_blur_shader_src,
|
||||
&r_d3d11_g_mesh_shader_src,
|
||||
&r_d3d11_g_geo3dcomposite_shader_src,
|
||||
&r_d3d11_g_finalize_shader_src,
|
||||
};
|
||||
|
||||
String8 r_d3d11_g_vshad_kind_source_name_table[5] =
|
||||
@@ -40,13 +40,13 @@ ArrayCount(r_d3d11_g_mesh_ilay_elements) ,
|
||||
0,
|
||||
};
|
||||
|
||||
String8 r_d3d11_g_pshad_kind_source_table[5] =
|
||||
String8* r_d3d11_g_pshad_kind_source_table[5] =
|
||||
{
|
||||
r_d3d11_g_rect_shader_src,
|
||||
r_d3d11_g_blur_shader_src,
|
||||
r_d3d11_g_mesh_shader_src,
|
||||
r_d3d11_g_geo3dcomposite_shader_src,
|
||||
r_d3d11_g_finalize_shader_src,
|
||||
&r_d3d11_g_rect_shader_src,
|
||||
&r_d3d11_g_blur_shader_src,
|
||||
&r_d3d11_g_mesh_shader_src,
|
||||
&r_d3d11_g_geo3dcomposite_shader_src,
|
||||
&r_d3d11_g_finalize_shader_src,
|
||||
};
|
||||
|
||||
String8 r_d3d11_g_pshad_kind_source_name_table[5] =
|
||||
|
||||
@@ -462,6 +462,7 @@ str8_lit_comp(
|
||||
""
|
||||
);
|
||||
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // RENDER_D3D11_META_H
|
||||
|
||||
@@ -114,7 +114,7 @@ r_d3d11_instance_buffer_from_size(U64 size)
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
}
|
||||
HRESULT error = r_d3d11_state->device->CreateBuffer(&desc, 0, &buffer);
|
||||
HRESULT error = r_d3d11_state->device->lpVtbl->CreateBuffer(r_d3d11_state->device, &desc, 0, &buffer);
|
||||
}
|
||||
|
||||
// rjf: push buffer to flush list
|
||||
@@ -213,24 +213,24 @@ r_init(CmdLine *cmdln)
|
||||
if(cmd_line_has_flag(cmdln, str8_lit("d3d11_debug")))
|
||||
{
|
||||
ID3D11InfoQueue *info = 0;
|
||||
error = r_d3d11_state->base_device->QueryInterface(__uuidof(ID3D11InfoQueue), (void **)(&info));
|
||||
error = r_d3d11_state->base_device->lpVtbl->QueryInterface(r_d3d11_state->base_device, &IID_ID3D11InfoQueue, (void **)(&info));
|
||||
if(SUCCEEDED(error))
|
||||
{
|
||||
error = info->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, TRUE);
|
||||
error = info->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, TRUE);
|
||||
info->Release();
|
||||
error = info->lpVtbl->SetBreakOnSeverity(info, D3D11_MESSAGE_SEVERITY_CORRUPTION, TRUE);
|
||||
error = info->lpVtbl->SetBreakOnSeverity(info, D3D11_MESSAGE_SEVERITY_ERROR, TRUE);
|
||||
info->lpVtbl->Release(info);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//- rjf: get main device
|
||||
error = r_d3d11_state->base_device->QueryInterface(__uuidof(ID3D11Device1), (void **)(&r_d3d11_state->device));
|
||||
error = r_d3d11_state->base_device_ctx->QueryInterface(__uuidof(ID3D11DeviceContext1), (void **)(&r_d3d11_state->device_ctx));
|
||||
error = r_d3d11_state->base_device->lpVtbl->QueryInterface(r_d3d11_state->base_device, &IID_ID3D11Device1, (void **)(&r_d3d11_state->device));
|
||||
error = r_d3d11_state->base_device_ctx->lpVtbl->QueryInterface(r_d3d11_state->base_device_ctx, &IID_ID3D11DeviceContext1, (void **)(&r_d3d11_state->device_ctx));
|
||||
|
||||
//- rjf: get dxgi device/adapter/factory
|
||||
error = r_d3d11_state->device->QueryInterface(__uuidof(IDXGIDevice1), (void **)(&r_d3d11_state->dxgi_device));
|
||||
error = r_d3d11_state->dxgi_device->GetAdapter(&r_d3d11_state->dxgi_adapter);
|
||||
error = r_d3d11_state->dxgi_adapter->GetParent(__uuidof(IDXGIFactory2), (void **)(&r_d3d11_state->dxgi_factory));
|
||||
error = r_d3d11_state->device->lpVtbl->QueryInterface(r_d3d11_state->device, &IID_IDXGIDevice1, (void **)(&r_d3d11_state->dxgi_device));
|
||||
error = r_d3d11_state->dxgi_device->lpVtbl->GetAdapter(r_d3d11_state->dxgi_device, &r_d3d11_state->dxgi_adapter);
|
||||
error = r_d3d11_state->dxgi_adapter->lpVtbl->GetParent(r_d3d11_state->dxgi_adapter, &IID_IDXGIFactory2, (void **)(&r_d3d11_state->dxgi_factory));
|
||||
|
||||
//- rjf: create main rasterizer
|
||||
{
|
||||
@@ -240,7 +240,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.CullMode = D3D11_CULL_BACK;
|
||||
desc.ScissorEnable = 1;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateRasterizerState1(&desc, &r_d3d11_state->main_rasterizer);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateRasterizerState1(r_d3d11_state->device, &desc, &r_d3d11_state->main_rasterizer);
|
||||
}
|
||||
|
||||
//- rjf: create main blend state
|
||||
@@ -256,7 +256,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
|
||||
desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateBlendState(&desc, &r_d3d11_state->main_blend_state);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateBlendState(r_d3d11_state->device, &desc, &r_d3d11_state->main_blend_state);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -265,7 +265,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.RenderTarget[0].BlendEnable = FALSE;
|
||||
desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateBlendState(&desc, &r_d3d11_state->no_blend_state);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateBlendState(r_d3d11_state->device, &desc, &r_d3d11_state->no_blend_state);
|
||||
}
|
||||
|
||||
//- rjf: create nearest-neighbor sampler
|
||||
@@ -278,7 +278,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
|
||||
desc.ComparisonFunc = D3D11_COMPARISON_NEVER;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateSamplerState(&desc, &r_d3d11_state->samplers[R_Tex2DSampleKind_Nearest]);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateSamplerState(r_d3d11_state->device, &desc, &r_d3d11_state->samplers[R_Tex2DSampleKind_Nearest]);
|
||||
}
|
||||
|
||||
//- rjf: create bilinear sampler
|
||||
@@ -291,7 +291,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
|
||||
desc.ComparisonFunc = D3D11_COMPARISON_NEVER;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateSamplerState(&desc, &r_d3d11_state->samplers[R_Tex2DSampleKind_Linear]);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateSamplerState(r_d3d11_state->device, &desc, &r_d3d11_state->samplers[R_Tex2DSampleKind_Linear]);
|
||||
}
|
||||
|
||||
//- rjf: create noop depth/stencil state
|
||||
@@ -302,7 +302,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
|
||||
desc.DepthFunc = D3D11_COMPARISON_LESS;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateDepthStencilState(&desc, &r_d3d11_state->noop_depth_stencil);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateDepthStencilState(r_d3d11_state->device, &desc, &r_d3d11_state->noop_depth_stencil);
|
||||
}
|
||||
|
||||
//- rjf: create plain depth/stencil state
|
||||
@@ -313,7 +313,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
|
||||
desc.DepthFunc = D3D11_COMPARISON_LESS;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateDepthStencilState(&desc, &r_d3d11_state->plain_depth_stencil);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateDepthStencilState(r_d3d11_state->device, &desc, &r_d3d11_state->plain_depth_stencil);
|
||||
}
|
||||
|
||||
//- rjf: create buffers
|
||||
@@ -325,7 +325,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
}
|
||||
error = r_d3d11_state->device->CreateBuffer(&desc, 0, &r_d3d11_state->instance_scratch_buffer_64kb);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateBuffer(r_d3d11_state->device, &desc, 0, &r_d3d11_state->instance_scratch_buffer_64kb);
|
||||
}
|
||||
|
||||
//- rjf: build vertex shaders & input layouts
|
||||
@@ -333,7 +333,7 @@ r_init(CmdLine *cmdln)
|
||||
kind < R_D3D11_VShadKind_COUNT;
|
||||
kind = (R_D3D11_VShadKind)(kind+1))
|
||||
{
|
||||
String8 source = r_d3d11_g_vshad_kind_source_table[kind];
|
||||
String8 source = *r_d3d11_g_vshad_kind_source_table[kind];
|
||||
String8 source_name = r_d3d11_g_vshad_kind_source_name_table[kind];
|
||||
D3D11_INPUT_ELEMENT_DESC *ilay_elements = r_d3d11_g_vshad_kind_elements_ptr_table[kind];
|
||||
U64 ilay_elements_count = r_d3d11_g_vshad_kind_elements_count_table[kind];
|
||||
@@ -357,13 +357,13 @@ r_init(CmdLine *cmdln)
|
||||
String8 errors = {0};
|
||||
if(FAILED(error))
|
||||
{
|
||||
errors = str8((U8 *)vshad_source_errors->GetBufferPointer(),
|
||||
(U64)vshad_source_errors->GetBufferSize());
|
||||
errors = str8((U8 *)vshad_source_errors->lpVtbl->GetBufferPointer(vshad_source_errors),
|
||||
(U64)vshad_source_errors->lpVtbl->GetBufferSize(vshad_source_errors));
|
||||
os_graphical_message(1, str8_lit("Vertex Shader Compilation Failure"), errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
error = r_d3d11_state->device->CreateVertexShader(vshad_source_blob->GetBufferPointer(), vshad_source_blob->GetBufferSize(), 0, &vshad);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateVertexShader(r_d3d11_state->device, vshad_source_blob->lpVtbl->GetBufferPointer(vshad_source_blob), vshad_source_blob->lpVtbl->GetBufferSize(vshad_source_blob), 0, &vshad);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -371,13 +371,13 @@ r_init(CmdLine *cmdln)
|
||||
ID3D11InputLayout *ilay = 0;
|
||||
if(ilay_elements != 0)
|
||||
{
|
||||
error = r_d3d11_state->device->CreateInputLayout(ilay_elements, ilay_elements_count,
|
||||
vshad_source_blob->GetBufferPointer(),
|
||||
vshad_source_blob->GetBufferSize(),
|
||||
&ilay);
|
||||
error = r_d3d11_state->device->lpVtbl->CreateInputLayout(r_d3d11_state->device, ilay_elements, ilay_elements_count,
|
||||
vshad_source_blob->lpVtbl->GetBufferPointer(vshad_source_blob),
|
||||
vshad_source_blob->lpVtbl->GetBufferSize(vshad_source_blob),
|
||||
&ilay);
|
||||
}
|
||||
|
||||
vshad_source_blob->Release();
|
||||
vshad_source_blob->lpVtbl->Release(vshad_source_blob);
|
||||
|
||||
// rjf: store
|
||||
r_d3d11_state->vshads[kind] = vshad;
|
||||
@@ -389,7 +389,7 @@ r_init(CmdLine *cmdln)
|
||||
kind < R_D3D11_PShadKind_COUNT;
|
||||
kind = (R_D3D11_PShadKind)(kind+1))
|
||||
{
|
||||
String8 source = r_d3d11_g_pshad_kind_source_table[kind];
|
||||
String8 source = *r_d3d11_g_pshad_kind_source_table[kind];
|
||||
String8 source_name = r_d3d11_g_pshad_kind_source_name_table[kind];
|
||||
|
||||
// rjf: compile pixel shader
|
||||
@@ -411,17 +411,17 @@ r_init(CmdLine *cmdln)
|
||||
String8 errors = {0};
|
||||
if(FAILED(error))
|
||||
{
|
||||
errors = str8((U8 *)pshad_source_errors->GetBufferPointer(),
|
||||
(U64)pshad_source_errors->GetBufferSize());
|
||||
errors = str8((U8 *)pshad_source_errors->lpVtbl->GetBufferPointer(pshad_source_errors),
|
||||
(U64)pshad_source_errors->lpVtbl->GetBufferSize(pshad_source_errors));
|
||||
os_graphical_message(1, str8_lit("Pixel Shader Compilation Failure"), errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
error = r_d3d11_state->device->CreatePixelShader(pshad_source_blob->GetBufferPointer(), pshad_source_blob->GetBufferSize(), 0, &pshad);
|
||||
error = r_d3d11_state->device->lpVtbl->CreatePixelShader(r_d3d11_state->device, pshad_source_blob->lpVtbl->GetBufferPointer(pshad_source_blob), pshad_source_blob->lpVtbl->GetBufferSize(pshad_source_blob), 0, &pshad);
|
||||
}
|
||||
}
|
||||
|
||||
pshad_source_blob->Release();
|
||||
pshad_source_blob->lpVtbl->Release(pshad_source_blob);
|
||||
|
||||
// rjf: store
|
||||
r_d3d11_state->pshads[kind] = pshad;
|
||||
@@ -443,7 +443,7 @@ r_init(CmdLine *cmdln)
|
||||
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
}
|
||||
r_d3d11_state->device->CreateBuffer(&desc, 0, &buffer);
|
||||
r_d3d11_state->device->lpVtbl->CreateBuffer(r_d3d11_state->device, &desc, 0, &buffer);
|
||||
}
|
||||
r_d3d11_state->uniform_type_kind_buffers[kind] = buffer;
|
||||
}
|
||||
@@ -515,7 +515,7 @@ r_window_equip(OS_Handle handle)
|
||||
swapchain_desc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;
|
||||
swapchain_desc.Flags = 0;
|
||||
}
|
||||
HRESULT error = r_d3d11_state->dxgi_factory->CreateSwapChainForHwnd(r_d3d11_state->device, hwnd, &swapchain_desc, 0, 0, &window->swapchain);
|
||||
HRESULT error = r_d3d11_state->dxgi_factory->lpVtbl->CreateSwapChainForHwnd(r_d3d11_state->dxgi_factory, (IUnknown *)r_d3d11_state->device, hwnd, &swapchain_desc, 0, 0, &window->swapchain);
|
||||
if(FAILED(error))
|
||||
{
|
||||
char buffer[256] = {0};
|
||||
@@ -524,11 +524,11 @@ r_window_equip(OS_Handle handle)
|
||||
os_exit_process(1);
|
||||
}
|
||||
|
||||
r_d3d11_state->dxgi_factory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);
|
||||
r_d3d11_state->dxgi_factory->lpVtbl->MakeWindowAssociation(r_d3d11_state->dxgi_factory, hwnd, DXGI_MWA_NO_ALT_ENTER);
|
||||
|
||||
//- rjf: create framebuffer & view
|
||||
window->swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void **)(&window->framebuffer));
|
||||
r_d3d11_state->device->CreateRenderTargetView(window->framebuffer, 0, &window->framebuffer_rtv);
|
||||
window->swapchain->lpVtbl->GetBuffer(window->swapchain, 0, &IID_ID3D11Texture2D, (void **)(&window->framebuffer));
|
||||
r_d3d11_state->device->lpVtbl->CreateRenderTargetView(r_d3d11_state->device, (ID3D11Resource *)window->framebuffer, 0, &window->framebuffer_rtv);
|
||||
|
||||
result = r_d3d11_handle_from_window(window);
|
||||
}
|
||||
@@ -543,15 +543,15 @@ r_window_unequip(OS_Handle handle, R_Handle equip_handle)
|
||||
OS_MutexScopeW(r_d3d11_state->device_rw_mutex)
|
||||
{
|
||||
R_D3D11_Window *window = r_d3d11_window_from_handle(equip_handle);
|
||||
window->stage_color_srv->Release();
|
||||
window->stage_color_rtv->Release();
|
||||
window->stage_color->Release();
|
||||
window->stage_scratch_color_srv->Release();
|
||||
window->stage_scratch_color_rtv->Release();
|
||||
window->stage_scratch_color->Release();
|
||||
window->framebuffer_rtv->Release();
|
||||
window->framebuffer->Release();
|
||||
window->swapchain->Release();
|
||||
window->stage_color_srv->lpVtbl->Release(window->stage_color_srv);
|
||||
window->stage_color_rtv->lpVtbl->Release(window->stage_color_rtv);
|
||||
window->stage_color->lpVtbl->Release(window->stage_color);
|
||||
window->stage_scratch_color_srv->lpVtbl->Release(window->stage_scratch_color_srv);
|
||||
window->stage_scratch_color_rtv->lpVtbl->Release(window->stage_scratch_color_rtv);
|
||||
window->stage_scratch_color->lpVtbl->Release(window->stage_scratch_color);
|
||||
window->framebuffer_rtv->lpVtbl->Release(window->framebuffer_rtv);
|
||||
window->framebuffer->lpVtbl->Release(window->framebuffer);
|
||||
window->swapchain->lpVtbl->Release(window->swapchain);
|
||||
window->generation += 1;
|
||||
SLLStackPush(r_d3d11_state->first_free_window, window);
|
||||
}
|
||||
@@ -633,10 +633,10 @@ r_tex2d_alloc(R_ResourceKind kind, Vec2S32 size, R_Tex2DFormat format, void *dat
|
||||
texture_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
texture_desc.CPUAccessFlags = cpu_access_flags;
|
||||
}
|
||||
r_d3d11_state->device->CreateTexture2D(&texture_desc, initial_data, &texture->texture);
|
||||
r_d3d11_state->device->lpVtbl->CreateTexture2D(r_d3d11_state->device, &texture_desc, initial_data, &texture->texture);
|
||||
|
||||
//- rjf: create texture srv
|
||||
r_d3d11_state->device->CreateShaderResourceView(texture->texture, 0, &texture->view);
|
||||
r_d3d11_state->device->lpVtbl->CreateShaderResourceView(r_d3d11_state->device, (ID3D11Resource *)texture->texture, 0, &texture->view);
|
||||
|
||||
//- rjf: fill basics
|
||||
{
|
||||
@@ -698,7 +698,7 @@ r_fill_tex2d_region(R_Handle handle, Rng2S32 subrect, void *data)
|
||||
(UINT)subrect.x0, (UINT)subrect.y0, 0,
|
||||
(UINT)subrect.x1, (UINT)subrect.y1, 1,
|
||||
};
|
||||
r_d3d11_state->device_ctx->UpdateSubresource(texture->texture, 0, &dst_box, data, dim.x*bytes_per_pixel, 0);
|
||||
r_d3d11_state->device_ctx->lpVtbl->UpdateSubresource(r_d3d11_state->device_ctx, (ID3D11Resource *)texture->texture, 0, &dst_box, data, dim.x*bytes_per_pixel, 0);
|
||||
}
|
||||
ProfEnd();
|
||||
}
|
||||
@@ -754,7 +754,7 @@ r_buffer_alloc(R_ResourceKind kind, U64 size, void *data)
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER|D3D11_BIND_INDEX_BUFFER;
|
||||
desc.CPUAccessFlags = cpu_access_flags;
|
||||
}
|
||||
r_d3d11_state->device->CreateBuffer(&desc, initial_data, &buffer->buffer);
|
||||
r_d3d11_state->device->lpVtbl->CreateBuffer(r_d3d11_state->device, &desc, initial_data, &buffer->buffer);
|
||||
|
||||
//- rjf: fill basics
|
||||
{
|
||||
@@ -797,15 +797,15 @@ r_end_frame(void)
|
||||
{
|
||||
for(R_D3D11_FlushBuffer *buffer = r_d3d11_state->first_buffer_to_flush; buffer != 0; buffer = buffer->next)
|
||||
{
|
||||
buffer->buffer->Release();
|
||||
buffer->buffer->lpVtbl->Release(buffer->buffer);
|
||||
}
|
||||
for(R_D3D11_Tex2D *tex = r_d3d11_state->first_to_free_tex2d, *next = 0;
|
||||
tex != 0;
|
||||
tex = next)
|
||||
{
|
||||
next = tex->next;
|
||||
tex->view->Release();
|
||||
tex->texture->Release();
|
||||
tex->view->lpVtbl->Release(tex->view);
|
||||
tex->texture->lpVtbl->Release(tex->texture);
|
||||
tex->generation += 1;
|
||||
SLLStackPush(r_d3d11_state->first_free_tex2d, tex);
|
||||
}
|
||||
@@ -814,7 +814,7 @@ r_end_frame(void)
|
||||
buf = next)
|
||||
{
|
||||
next = buf->next;
|
||||
buf->buffer->Release();
|
||||
buf->buffer->lpVtbl->Release(buf->buffer);
|
||||
buf->generation += 1;
|
||||
SLLStackPush(r_d3d11_state->first_free_buffer, buf);
|
||||
}
|
||||
@@ -847,108 +847,108 @@ r_window_begin_frame(OS_Handle window, R_Handle window_equip)
|
||||
wnd->last_resolution = resolution;
|
||||
|
||||
// rjf: release screen-sized render target resources, if there
|
||||
if(wnd->stage_scratch_color_srv){wnd->stage_scratch_color_srv->Release();}
|
||||
if(wnd->stage_scratch_color_rtv){wnd->stage_scratch_color_rtv->Release();}
|
||||
if(wnd->stage_scratch_color) {wnd->stage_scratch_color->Release();}
|
||||
if(wnd->stage_color_srv) {wnd->stage_color_srv->Release();}
|
||||
if(wnd->stage_color_rtv) {wnd->stage_color_rtv->Release();}
|
||||
if(wnd->stage_color) {wnd->stage_color->Release();}
|
||||
if(wnd->geo3d_color_srv) {wnd->geo3d_color_srv->Release();}
|
||||
if(wnd->geo3d_color_rtv) {wnd->geo3d_color_rtv->Release();}
|
||||
if(wnd->geo3d_color) {wnd->geo3d_color->Release();}
|
||||
if(wnd->geo3d_depth_srv) {wnd->geo3d_depth_srv->Release();}
|
||||
if(wnd->geo3d_depth_dsv) {wnd->geo3d_depth_dsv->Release();}
|
||||
if(wnd->geo3d_depth) {wnd->geo3d_depth->Release();}
|
||||
if(wnd->stage_scratch_color_srv){wnd->stage_scratch_color_srv->lpVtbl->Release(wnd->stage_scratch_color_srv);}
|
||||
if(wnd->stage_scratch_color_rtv){wnd->stage_scratch_color_rtv->lpVtbl->Release(wnd->stage_scratch_color_rtv);}
|
||||
if(wnd->stage_scratch_color) {wnd->stage_scratch_color->lpVtbl->Release(wnd->stage_scratch_color);}
|
||||
if(wnd->stage_color_srv) {wnd->stage_color_srv->lpVtbl->Release(wnd->stage_color_srv);}
|
||||
if(wnd->stage_color_rtv) {wnd->stage_color_rtv->lpVtbl->Release(wnd->stage_color_rtv);}
|
||||
if(wnd->stage_color) {wnd->stage_color->lpVtbl->Release(wnd->stage_color);}
|
||||
if(wnd->geo3d_color_srv) {wnd->geo3d_color_srv->lpVtbl->Release(wnd->geo3d_color_srv);}
|
||||
if(wnd->geo3d_color_rtv) {wnd->geo3d_color_rtv->lpVtbl->Release(wnd->geo3d_color_rtv);}
|
||||
if(wnd->geo3d_color) {wnd->geo3d_color->lpVtbl->Release(wnd->geo3d_color);}
|
||||
if(wnd->geo3d_depth_srv) {wnd->geo3d_depth_srv->lpVtbl->Release(wnd->geo3d_depth_srv);}
|
||||
if(wnd->geo3d_depth_dsv) {wnd->geo3d_depth_dsv->lpVtbl->Release(wnd->geo3d_depth_dsv);}
|
||||
if(wnd->geo3d_depth) {wnd->geo3d_depth->lpVtbl->Release(wnd->geo3d_depth);}
|
||||
|
||||
// rjf: resize swapchain & main framebuffer
|
||||
wnd->framebuffer_rtv->Release();
|
||||
wnd->framebuffer->Release();
|
||||
wnd->swapchain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);
|
||||
wnd->swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void **)(&wnd->framebuffer));
|
||||
r_d3d11_state->device->CreateRenderTargetView(wnd->framebuffer, 0, &wnd->framebuffer_rtv);
|
||||
wnd->framebuffer_rtv->lpVtbl->Release(wnd->framebuffer_rtv);
|
||||
wnd->framebuffer->lpVtbl->Release(wnd->framebuffer);
|
||||
wnd->swapchain->lpVtbl->ResizeBuffers(wnd->swapchain, 0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);
|
||||
wnd->swapchain->lpVtbl->GetBuffer(wnd->swapchain, 0, &IID_ID3D11Texture2D, (void **)(&wnd->framebuffer));
|
||||
r_d3d11_state->device->lpVtbl->CreateRenderTargetView(r_d3d11_state->device, (ID3D11Resource *)wnd->framebuffer, 0, &wnd->framebuffer_rtv);
|
||||
|
||||
// rjf: create stage color targets
|
||||
{
|
||||
D3D11_TEXTURE2D_DESC color_desc = {};
|
||||
D3D11_TEXTURE2D_DESC color_desc = zero_struct;
|
||||
{
|
||||
wnd->framebuffer->GetDesc(&color_desc);
|
||||
wnd->framebuffer->lpVtbl->GetDesc(wnd->framebuffer, &color_desc);
|
||||
color_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
color_desc.BindFlags = D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE;
|
||||
}
|
||||
D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = {};
|
||||
D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = zero_struct;
|
||||
{
|
||||
rtv_desc.Format = color_desc.Format;
|
||||
rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
|
||||
}
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = {};
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = zero_struct;
|
||||
{
|
||||
srv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
srv_desc.Texture2D.MipLevels = -1;
|
||||
}
|
||||
r_d3d11_state->device->CreateTexture2D(&color_desc, 0, &wnd->stage_color);
|
||||
r_d3d11_state->device->CreateRenderTargetView(wnd->stage_color, &rtv_desc, &wnd->stage_color_rtv);
|
||||
r_d3d11_state->device->CreateShaderResourceView(wnd->stage_color, &srv_desc, &wnd->stage_color_srv);
|
||||
r_d3d11_state->device->CreateTexture2D(&color_desc, 0, &wnd->stage_scratch_color);
|
||||
r_d3d11_state->device->CreateRenderTargetView(wnd->stage_scratch_color, &rtv_desc, &wnd->stage_scratch_color_rtv);
|
||||
r_d3d11_state->device->CreateShaderResourceView(wnd->stage_scratch_color, &srv_desc, &wnd->stage_scratch_color_srv);
|
||||
r_d3d11_state->device->lpVtbl->CreateTexture2D(r_d3d11_state->device, &color_desc, 0, &wnd->stage_color);
|
||||
r_d3d11_state->device->lpVtbl->CreateRenderTargetView(r_d3d11_state->device, (ID3D11Resource *)wnd->stage_color, &rtv_desc, &wnd->stage_color_rtv);
|
||||
r_d3d11_state->device->lpVtbl->CreateShaderResourceView(r_d3d11_state->device, (ID3D11Resource *)wnd->stage_color, &srv_desc, &wnd->stage_color_srv);
|
||||
r_d3d11_state->device->lpVtbl->CreateTexture2D(r_d3d11_state->device, &color_desc, 0, &wnd->stage_scratch_color);
|
||||
r_d3d11_state->device->lpVtbl->CreateRenderTargetView(r_d3d11_state->device, (ID3D11Resource *)wnd->stage_scratch_color, &rtv_desc, &wnd->stage_scratch_color_rtv);
|
||||
r_d3d11_state->device->lpVtbl->CreateShaderResourceView(r_d3d11_state->device, (ID3D11Resource *)wnd->stage_scratch_color, &srv_desc, &wnd->stage_scratch_color_srv);
|
||||
}
|
||||
|
||||
// rjf: create geo3d targets
|
||||
{
|
||||
D3D11_TEXTURE2D_DESC color_desc = {};
|
||||
D3D11_TEXTURE2D_DESC color_desc = zero_struct;
|
||||
{
|
||||
wnd->framebuffer->GetDesc(&color_desc);
|
||||
wnd->framebuffer->lpVtbl->GetDesc(wnd->framebuffer, &color_desc);
|
||||
color_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
color_desc.BindFlags = D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE;
|
||||
}
|
||||
D3D11_RENDER_TARGET_VIEW_DESC color_rtv_desc = {};
|
||||
D3D11_RENDER_TARGET_VIEW_DESC color_rtv_desc = zero_struct;
|
||||
{
|
||||
color_rtv_desc.Format = color_desc.Format;
|
||||
color_rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
|
||||
}
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC color_srv_desc = {};
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC color_srv_desc = zero_struct;
|
||||
{
|
||||
color_srv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
color_srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
color_srv_desc.Texture2D.MipLevels = -1;
|
||||
}
|
||||
D3D11_TEXTURE2D_DESC depth_desc = {};
|
||||
D3D11_TEXTURE2D_DESC depth_desc = zero_struct;
|
||||
{
|
||||
wnd->framebuffer->GetDesc(&depth_desc);
|
||||
wnd->framebuffer->lpVtbl->GetDesc(wnd->framebuffer, &depth_desc);
|
||||
depth_desc.Format = DXGI_FORMAT_R24G8_TYPELESS;
|
||||
depth_desc.BindFlags = D3D11_BIND_DEPTH_STENCIL|D3D11_BIND_SHADER_RESOURCE;
|
||||
}
|
||||
D3D11_DEPTH_STENCIL_VIEW_DESC depth_dsv_desc = {};
|
||||
D3D11_DEPTH_STENCIL_VIEW_DESC depth_dsv_desc = zero_struct;
|
||||
{
|
||||
depth_dsv_desc.Flags = 0;
|
||||
depth_dsv_desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
|
||||
depth_dsv_desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
|
||||
depth_dsv_desc.Texture2D.MipSlice = 0;
|
||||
}
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC depth_srv_desc = {};
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC depth_srv_desc = zero_struct;
|
||||
{
|
||||
depth_srv_desc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
|
||||
depth_srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
depth_srv_desc.Texture2D.MostDetailedMip = 0;
|
||||
depth_srv_desc.Texture2D.MipLevels = -1;
|
||||
}
|
||||
r_d3d11_state->device->CreateTexture2D(&color_desc, 0, &wnd->geo3d_color);
|
||||
r_d3d11_state->device->CreateRenderTargetView(wnd->geo3d_color, &color_rtv_desc, &wnd->geo3d_color_rtv);
|
||||
r_d3d11_state->device->CreateShaderResourceView(wnd->geo3d_color, &color_srv_desc, &wnd->geo3d_color_srv);
|
||||
r_d3d11_state->device->CreateTexture2D(&depth_desc, 0, &wnd->geo3d_depth);
|
||||
r_d3d11_state->device->CreateDepthStencilView(wnd->geo3d_depth, &depth_dsv_desc, &wnd->geo3d_depth_dsv);
|
||||
r_d3d11_state->device->CreateShaderResourceView(wnd->geo3d_depth, &depth_srv_desc, &wnd->geo3d_depth_srv);
|
||||
r_d3d11_state->device->lpVtbl->CreateTexture2D(r_d3d11_state->device, &color_desc, 0, &wnd->geo3d_color);
|
||||
r_d3d11_state->device->lpVtbl->CreateRenderTargetView(r_d3d11_state->device, (ID3D11Resource *)wnd->geo3d_color, &color_rtv_desc, &wnd->geo3d_color_rtv);
|
||||
r_d3d11_state->device->lpVtbl->CreateShaderResourceView(r_d3d11_state->device, (ID3D11Resource *)wnd->geo3d_color, &color_srv_desc, &wnd->geo3d_color_srv);
|
||||
r_d3d11_state->device->lpVtbl->CreateTexture2D(r_d3d11_state->device, &depth_desc, 0, &wnd->geo3d_depth);
|
||||
r_d3d11_state->device->lpVtbl->CreateDepthStencilView(r_d3d11_state->device, (ID3D11Resource *)wnd->geo3d_depth, &depth_dsv_desc, &wnd->geo3d_depth_dsv);
|
||||
r_d3d11_state->device->lpVtbl->CreateShaderResourceView(r_d3d11_state->device, (ID3D11Resource *)wnd->geo3d_depth, &depth_srv_desc, &wnd->geo3d_depth_srv);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: clear framebuffers
|
||||
Vec4F32 clear_color = {0, 0, 0, 0};
|
||||
d_ctx->ClearRenderTargetView(wnd->framebuffer_rtv, clear_color.v);
|
||||
d_ctx->ClearRenderTargetView(wnd->stage_color_rtv, clear_color.v);
|
||||
d_ctx->lpVtbl->ClearRenderTargetView(d_ctx, wnd->framebuffer_rtv, clear_color.v);
|
||||
d_ctx->lpVtbl->ClearRenderTargetView(d_ctx, wnd->stage_color_rtv, clear_color.v);
|
||||
if(resize_done)
|
||||
{
|
||||
d_ctx->Flush();
|
||||
d_ctx->lpVtbl->Flush(d_ctx);
|
||||
}
|
||||
}
|
||||
ProfEnd();
|
||||
@@ -972,25 +972,25 @@ r_window_end_frame(OS_Handle window, R_Handle window_equip)
|
||||
ID3D11PixelShader *pshad = r_d3d11_state->pshads[R_D3D11_PShadKind_Finalize];
|
||||
|
||||
// rjf: setup output merger
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->framebuffer_rtv, 0);
|
||||
d_ctx->OMSetDepthStencilState(r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->OMSetBlendState(r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->framebuffer_rtv, 0);
|
||||
d_ctx->lpVtbl->OMSetDepthStencilState(d_ctx, r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->lpVtbl->OMSetBlendState(d_ctx, r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
|
||||
// rjf: set up rasterizer
|
||||
Vec2S32 resolution = wnd->last_resolution;
|
||||
D3D11_VIEWPORT viewport = { 0.0f, 0.0f, (F32)resolution.x, (F32)resolution.y, 0.0f, 1.0f };
|
||||
d_ctx->RSSetViewports(1, &viewport);
|
||||
d_ctx->RSSetState(r_d3d11_state->main_rasterizer);
|
||||
d_ctx->lpVtbl->RSSetViewports(d_ctx, 1, &viewport);
|
||||
d_ctx->lpVtbl->RSSetState(d_ctx, (ID3D11RasterizerState *)r_d3d11_state->main_rasterizer);
|
||||
|
||||
// rjf: setup input assembly
|
||||
d_ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->IASetInputLayout(0);
|
||||
d_ctx->lpVtbl->IASetPrimitiveTopology(d_ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->lpVtbl->IASetInputLayout(d_ctx, 0);
|
||||
|
||||
// rjf: setup shaders
|
||||
d_ctx->VSSetShader(vshad, 0, 0);
|
||||
d_ctx->PSSetShader(pshad, 0, 0);
|
||||
d_ctx->PSSetShaderResources(0, 1, &wnd->stage_color_srv);
|
||||
d_ctx->PSSetSamplers(0, 1, &sampler);
|
||||
d_ctx->lpVtbl->VSSetShader(d_ctx, vshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetShader(d_ctx, pshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &wnd->stage_color_srv);
|
||||
d_ctx->lpVtbl->PSSetSamplers(d_ctx, 0, 1, &sampler);
|
||||
|
||||
// rjf: setup scissor rect
|
||||
{
|
||||
@@ -999,17 +999,17 @@ r_window_end_frame(OS_Handle window, R_Handle window_equip)
|
||||
rect.right = (LONG)wnd->last_resolution.x;
|
||||
rect.top = 0;
|
||||
rect.bottom = (LONG)wnd->last_resolution.y;
|
||||
d_ctx->RSSetScissorRects(1, &rect);
|
||||
d_ctx->lpVtbl->RSSetScissorRects(d_ctx, 1, &rect);
|
||||
}
|
||||
|
||||
// rjf: draw
|
||||
d_ctx->Draw(4, 0);
|
||||
d_ctx->lpVtbl->Draw(d_ctx, 4, 0);
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: present
|
||||
//
|
||||
HRESULT error = wnd->swapchain->Present(1, 0);
|
||||
HRESULT error = wnd->swapchain->lpVtbl->Present(wnd->swapchain, 1, 0);
|
||||
if(FAILED(error))
|
||||
{
|
||||
char buffer[256] = {0};
|
||||
@@ -1017,7 +1017,7 @@ r_window_end_frame(OS_Handle window, R_Handle window_equip)
|
||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
os_exit_process(1);
|
||||
}
|
||||
d_ctx->ClearState();
|
||||
d_ctx->lpVtbl->ClearState(d_ctx);
|
||||
}
|
||||
ProfEnd();
|
||||
}
|
||||
@@ -1058,8 +1058,8 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
//- rjf: set up rasterizer
|
||||
Vec2S32 resolution = wnd->last_resolution;
|
||||
D3D11_VIEWPORT viewport = { 0.0f, 0.0f, (F32)resolution.x, (F32)resolution.y, 0.0f, 1.0f };
|
||||
d_ctx->RSSetViewports(1, &viewport);
|
||||
d_ctx->RSSetState(r_d3d11_state->main_rasterizer);
|
||||
d_ctx->lpVtbl->RSSetViewports(d_ctx, 1, &viewport);
|
||||
d_ctx->lpVtbl->RSSetState(d_ctx, (ID3D11RasterizerState *)r_d3d11_state->main_rasterizer);
|
||||
|
||||
//- rjf: draw each batch group
|
||||
for(R_BatchGroup2DNode *group_n = rect_batch_groups->first; group_n != 0; group_n = group_n->next)
|
||||
@@ -1078,7 +1078,7 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
ID3D11Buffer *buffer = r_d3d11_instance_buffer_from_size(batches->byte_count);
|
||||
{
|
||||
D3D11_MAPPED_SUBRESOURCE sub_rsrc = {0};
|
||||
r_d3d11_state->device_ctx->Map(buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
d_ctx->lpVtbl->Map(d_ctx, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
U8 *dst_ptr = (U8 *)sub_rsrc.pData;
|
||||
U64 off = 0;
|
||||
for(R_BatchNode *batch_n = batches->first; batch_n != 0; batch_n = batch_n->next)
|
||||
@@ -1086,7 +1086,7 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
MemoryCopy(dst_ptr+off, batch_n->v.v, batch_n->v.byte_count);
|
||||
off += batch_n->v.byte_count;
|
||||
}
|
||||
r_d3d11_state->device_ctx->Unmap(buffer, 0);
|
||||
d_ctx->lpVtbl->Unmap(d_ctx, (ID3D11Resource *)buffer, 0);
|
||||
}
|
||||
|
||||
// rjf: get texture
|
||||
@@ -1132,30 +1132,30 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
}
|
||||
{
|
||||
D3D11_MAPPED_SUBRESOURCE sub_rsrc = {0};
|
||||
r_d3d11_state->device_ctx->Map(uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
d_ctx->lpVtbl->Map(d_ctx, (ID3D11Resource *)uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
MemoryCopy((U8 *)sub_rsrc.pData, &uniforms, sizeof(uniforms));
|
||||
r_d3d11_state->device_ctx->Unmap(uniforms_buffer, 0);
|
||||
d_ctx->lpVtbl->Unmap(d_ctx, (ID3D11Resource *)uniforms_buffer, 0);
|
||||
}
|
||||
|
||||
// rjf: setup output merger
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->OMSetDepthStencilState(r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->OMSetBlendState(r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->lpVtbl->OMSetDepthStencilState(d_ctx, r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->lpVtbl->OMSetBlendState(d_ctx, r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
|
||||
// rjf: setup input assembly
|
||||
U32 stride = batches->bytes_per_inst;
|
||||
U32 offset = 0;
|
||||
d_ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->IASetInputLayout(ilay);
|
||||
d_ctx->IASetVertexBuffers(0, 1, &buffer, &stride, &offset);
|
||||
d_ctx->lpVtbl->IASetPrimitiveTopology(d_ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->lpVtbl->IASetInputLayout(d_ctx, ilay);
|
||||
d_ctx->lpVtbl->IASetVertexBuffers(d_ctx, 0, 1, &buffer, &stride, &offset);
|
||||
|
||||
// rjf: setup shaders
|
||||
d_ctx->VSSetShader(vshad, 0, 0);
|
||||
d_ctx->VSSetConstantBuffers(0, 1, &uniforms_buffer);
|
||||
d_ctx->PSSetShader(pshad, 0, 0);
|
||||
d_ctx->PSSetConstantBuffers(0, 1, &uniforms_buffer);
|
||||
d_ctx->PSSetShaderResources(0, 1, &texture->view);
|
||||
d_ctx->PSSetSamplers(0, 1, &sampler);
|
||||
d_ctx->lpVtbl->VSSetShader(d_ctx, vshad, 0, 0);
|
||||
d_ctx->lpVtbl->VSSetConstantBuffers(d_ctx, 0, 1, &uniforms_buffer);
|
||||
d_ctx->lpVtbl->PSSetShader(d_ctx, pshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetConstantBuffers(d_ctx, 0, 1, &uniforms_buffer);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &texture->view);
|
||||
d_ctx->lpVtbl->PSSetSamplers(d_ctx, 0, 1, &sampler);
|
||||
|
||||
// rjf: setup scissor rect
|
||||
{
|
||||
@@ -1184,11 +1184,11 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
rect.bottom = (LONG)clip.y1;
|
||||
}
|
||||
}
|
||||
d_ctx->RSSetScissorRects(1, &rect);
|
||||
d_ctx->lpVtbl->RSSetScissorRects(d_ctx, 1, &rect);
|
||||
}
|
||||
|
||||
// rjf: draw
|
||||
d_ctx->DrawInstanced(4, batches->byte_count / batches->bytes_per_inst, 0, 0);
|
||||
d_ctx->lpVtbl->DrawInstanced(d_ctx, 4, batches->byte_count / batches->bytes_per_inst, 0, 0);
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -1204,24 +1204,24 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
ID3D11Buffer *uniforms_buffer = r_d3d11_state->uniform_type_kind_buffers[R_D3D11_VShadKind_Blur];
|
||||
|
||||
// rjf: setup output merger
|
||||
d_ctx->OMSetDepthStencilState(r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->OMSetBlendState(r_d3d11_state->no_blend_state, 0, 0xffffffff);
|
||||
d_ctx->lpVtbl->OMSetDepthStencilState(d_ctx, r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->lpVtbl->OMSetBlendState(d_ctx, r_d3d11_state->no_blend_state, 0, 0xffffffff);
|
||||
|
||||
// rjf: set up viewport
|
||||
Vec2S32 resolution = wnd->last_resolution;
|
||||
D3D11_VIEWPORT viewport = { 0.0f, 0.0f, (F32)resolution.x, (F32)resolution.y, 0.0f, 1.0f };
|
||||
d_ctx->RSSetViewports(1, &viewport);
|
||||
d_ctx->RSSetState(r_d3d11_state->main_rasterizer);
|
||||
d_ctx->lpVtbl->RSSetViewports(d_ctx, 1, &viewport);
|
||||
d_ctx->lpVtbl->RSSetState(d_ctx, (ID3D11RasterizerState *)r_d3d11_state->main_rasterizer);
|
||||
|
||||
// rjf: setup input assembly
|
||||
d_ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->IASetInputLayout(0);
|
||||
d_ctx->lpVtbl->IASetPrimitiveTopology(d_ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->lpVtbl->IASetInputLayout(d_ctx, 0);
|
||||
|
||||
// rjf: setup shaders
|
||||
d_ctx->VSSetShader(vshad, 0, 0);
|
||||
d_ctx->VSSetConstantBuffers(0, 1, &uniforms_buffer);
|
||||
d_ctx->PSSetShader(pshad, 0, 0);
|
||||
d_ctx->PSSetSamplers(0, 1, &sampler);
|
||||
d_ctx->lpVtbl->VSSetShader(d_ctx, vshad, 0, 0);
|
||||
d_ctx->lpVtbl->VSSetConstantBuffers(d_ctx, 0, 1, &uniforms_buffer);
|
||||
d_ctx->lpVtbl->PSSetShader(d_ctx, pshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetSamplers(d_ctx, 0, 1, &sampler);
|
||||
|
||||
// rjf: setup scissor rect
|
||||
{
|
||||
@@ -1230,7 +1230,7 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
rect.right = (LONG)wnd->last_resolution.x;
|
||||
rect.top = 0;
|
||||
rect.bottom = (LONG)wnd->last_resolution.y;
|
||||
d_ctx->RSSetScissorRects(1, &rect);
|
||||
d_ctx->lpVtbl->RSSetScissorRects(d_ctx, 1, &rect);
|
||||
}
|
||||
|
||||
// rjf: set up uniforms
|
||||
@@ -1297,12 +1297,12 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
MemoryCopyArray(uniforms.passes[Axis2_Y].corner_radii.v, params->corner_radii);
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE sub_rsrc = {0};
|
||||
r_d3d11_state->device_ctx->Map(uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
d_ctx->lpVtbl->Map(d_ctx, (ID3D11Resource *)uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
MemoryCopy((U8 *)sub_rsrc.pData, &uniforms, sizeof(uniforms));
|
||||
r_d3d11_state->device_ctx->Unmap(uniforms_buffer, 0);
|
||||
d_ctx->lpVtbl->Unmap(d_ctx, (ID3D11Resource *)uniforms_buffer, 0);
|
||||
}
|
||||
|
||||
ID3D11Buffer* uniforms_buffers[] = { uniforms_buffer, uniforms_buffer };
|
||||
ID3D11Buffer *uniforms_buffers[] = { uniforms_buffer, uniforms_buffer };
|
||||
|
||||
U32 uniform_offset[Axis2_COUNT][2] =
|
||||
{
|
||||
@@ -1320,18 +1320,18 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
ID3D11ShaderResourceView* srv = 0;
|
||||
|
||||
// horizontal pass
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->stage_scratch_color_rtv, 0);
|
||||
d_ctx->PSSetConstantBuffers1(0, ArrayCount(uniforms_buffers), uniforms_buffers, uniform_offset[Axis2_X], uniform_count[Axis2_X]);
|
||||
d_ctx->PSSetShaderResources(0, 1, &wnd->stage_color_srv);
|
||||
d_ctx->Draw(4, 0);
|
||||
d_ctx->PSSetShaderResources(0, 1, &srv);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->stage_scratch_color_rtv, 0);
|
||||
d_ctx->lpVtbl->PSSetConstantBuffers1(d_ctx, 0, ArrayCount(uniforms_buffers), uniforms_buffers, uniform_offset[Axis2_X], uniform_count[Axis2_X]);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &wnd->stage_color_srv);
|
||||
d_ctx->lpVtbl->Draw(d_ctx, 4, 0);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &srv);
|
||||
|
||||
// vertical pass
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->PSSetConstantBuffers1(0, ArrayCount(uniforms_buffers), uniforms_buffers, uniform_offset[Axis2_Y], uniform_count[Axis2_Y]);
|
||||
d_ctx->PSSetShaderResources(0, 1, &wnd->stage_scratch_color_srv);
|
||||
d_ctx->Draw(4, 0);
|
||||
d_ctx->PSSetShaderResources(0, 1, &srv);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->lpVtbl->PSSetConstantBuffers1(d_ctx, 0, ArrayCount(uniforms_buffers), uniforms_buffers, uniform_offset[Axis2_Y], uniform_count[Axis2_Y]);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &wnd->stage_scratch_color_srv);
|
||||
d_ctx->lpVtbl->Draw(d_ctx, 4, 0);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &srv);
|
||||
}break;
|
||||
|
||||
|
||||
@@ -1347,14 +1347,14 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
//- rjf: set up rasterizer
|
||||
Vec2F32 viewport_dim = dim_2f32(params->viewport);
|
||||
D3D11_VIEWPORT viewport = { params->viewport.x0, params->viewport.y0, viewport_dim.x, viewport_dim.y, 0.f, 1.f };
|
||||
d_ctx->RSSetViewports(1, &viewport);
|
||||
d_ctx->RSSetState(r_d3d11_state->main_rasterizer);
|
||||
d_ctx->lpVtbl->RSSetViewports(d_ctx, 1, &viewport);
|
||||
d_ctx->lpVtbl->RSSetState(d_ctx, (ID3D11RasterizerState *)r_d3d11_state->main_rasterizer);
|
||||
|
||||
//- rjf: clear render targets
|
||||
{
|
||||
Vec4F32 bg_color = v4f32(0, 0, 0, 0);
|
||||
d_ctx->ClearRenderTargetView(wnd->geo3d_color_rtv, bg_color.v);
|
||||
d_ctx->ClearDepthStencilView(wnd->geo3d_depth_dsv, D3D11_CLEAR_DEPTH, 1.f, 0);
|
||||
d_ctx->lpVtbl->ClearRenderTargetView(d_ctx, wnd->geo3d_color_rtv, bg_color.v);
|
||||
d_ctx->lpVtbl->ClearDepthStencilView(d_ctx, wnd->geo3d_depth_dsv, D3D11_CLEAR_DEPTH, 1.f, 0);
|
||||
}
|
||||
|
||||
//- rjf: draw mesh batches
|
||||
@@ -1366,9 +1366,9 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
ID3D11Buffer *uniforms_buffer = r_d3d11_state->uniform_type_kind_buffers[R_D3D11_VShadKind_Mesh];
|
||||
|
||||
// rjf: setup output merger
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->geo3d_color_rtv, wnd->geo3d_depth_dsv);
|
||||
d_ctx->OMSetDepthStencilState(r_d3d11_state->plain_depth_stencil, 0);
|
||||
d_ctx->OMSetBlendState(r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->geo3d_color_rtv, wnd->geo3d_depth_dsv);
|
||||
d_ctx->lpVtbl->OMSetDepthStencilState(d_ctx, r_d3d11_state->plain_depth_stencil, 0);
|
||||
d_ctx->lpVtbl->OMSetBlendState(d_ctx, r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
|
||||
// rjf: draw all batches
|
||||
for(U64 slot_idx = 0; slot_idx < mesh_group_map->slots_count; slot_idx += 1)
|
||||
@@ -1384,10 +1384,10 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
// rjf: setup input assembly
|
||||
U32 stride = 11 * sizeof(F32);
|
||||
U32 offset = 0;
|
||||
d_ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
d_ctx->IASetInputLayout(ilay);
|
||||
d_ctx->IASetVertexBuffers(0, 1, &mesh_vertices->buffer, &stride, &offset);
|
||||
d_ctx->IASetIndexBuffer(mesh_indices->buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
d_ctx->lpVtbl->IASetPrimitiveTopology(d_ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
d_ctx->lpVtbl->IASetInputLayout(d_ctx, ilay);
|
||||
d_ctx->lpVtbl->IASetVertexBuffers(d_ctx, 0, 1, &mesh_vertices->buffer, &stride, &offset);
|
||||
d_ctx->lpVtbl->IASetIndexBuffer(d_ctx, mesh_indices->buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
// rjf: setup uniforms buffer
|
||||
R_D3D11_Uniforms_Mesh uniforms = {0};
|
||||
@@ -1396,17 +1396,17 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
}
|
||||
{
|
||||
D3D11_MAPPED_SUBRESOURCE sub_rsrc = {0};
|
||||
r_d3d11_state->device_ctx->Map(uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
d_ctx->lpVtbl->Map(d_ctx, (ID3D11Resource *)uniforms_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &sub_rsrc);
|
||||
MemoryCopy((U8 *)sub_rsrc.pData, &uniforms, sizeof(uniforms));
|
||||
r_d3d11_state->device_ctx->Unmap(uniforms_buffer, 0);
|
||||
d_ctx->lpVtbl->Unmap(d_ctx, (ID3D11Resource *)uniforms_buffer, 0);
|
||||
}
|
||||
|
||||
|
||||
// rjf: setup shaders
|
||||
d_ctx->VSSetShader(vshad, 0, 0);
|
||||
d_ctx->VSSetConstantBuffers(0, 1, &uniforms_buffer);
|
||||
d_ctx->PSSetShader(pshad, 0, 0);
|
||||
d_ctx->PSSetConstantBuffers(0, 1, &uniforms_buffer);
|
||||
d_ctx->lpVtbl->VSSetShader(d_ctx, vshad, 0, 0);
|
||||
d_ctx->lpVtbl->VSSetConstantBuffers(d_ctx, 0, 1, &uniforms_buffer);
|
||||
d_ctx->lpVtbl->PSSetShader(d_ctx, pshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetConstantBuffers(d_ctx, 0, 1, &uniforms_buffer);
|
||||
|
||||
// rjf: setup scissor rect
|
||||
{
|
||||
@@ -1417,11 +1417,11 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
rect.top = 0;
|
||||
rect.bottom = (LONG)wnd->last_resolution.y;
|
||||
}
|
||||
d_ctx->RSSetScissorRects(1, &rect);
|
||||
d_ctx->lpVtbl->RSSetScissorRects(d_ctx, 1, &rect);
|
||||
}
|
||||
|
||||
// rjf: draw
|
||||
d_ctx->DrawIndexed(mesh_indices->size/sizeof(U32), 0, 0);
|
||||
d_ctx->lpVtbl->DrawIndexed(d_ctx, mesh_indices->size/sizeof(U32), 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1433,25 +1433,25 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
ID3D11PixelShader *pshad = r_d3d11_state->pshads[R_D3D11_PShadKind_Geo3DComposite];
|
||||
|
||||
// rjf: setup output merger
|
||||
d_ctx->OMSetRenderTargets(1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->OMSetDepthStencilState(r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->OMSetBlendState(r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
d_ctx->lpVtbl->OMSetRenderTargets(d_ctx, 1, &wnd->stage_color_rtv, 0);
|
||||
d_ctx->lpVtbl->OMSetDepthStencilState(d_ctx, r_d3d11_state->noop_depth_stencil, 0);
|
||||
d_ctx->lpVtbl->OMSetBlendState(d_ctx, r_d3d11_state->main_blend_state, 0, 0xffffffff);
|
||||
|
||||
// rjf: set up rasterizer
|
||||
Vec2S32 resolution = wnd->last_resolution;
|
||||
D3D11_VIEWPORT viewport = { 0.0f, 0.0f, (F32)resolution.x, (F32)resolution.y, 0.0f, 1.0f };
|
||||
d_ctx->RSSetViewports(1, &viewport);
|
||||
d_ctx->RSSetState(r_d3d11_state->main_rasterizer);
|
||||
d_ctx->lpVtbl->RSSetViewports(d_ctx, 1, &viewport);
|
||||
d_ctx->lpVtbl->RSSetState(d_ctx, (ID3D11RasterizerState *)r_d3d11_state->main_rasterizer);
|
||||
|
||||
// rjf: setup input assembly
|
||||
d_ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->IASetInputLayout(0);
|
||||
d_ctx->lpVtbl->IASetPrimitiveTopology(d_ctx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
d_ctx->lpVtbl->IASetInputLayout(d_ctx, 0);
|
||||
|
||||
// rjf: setup shaders
|
||||
d_ctx->VSSetShader(vshad, 0, 0);
|
||||
d_ctx->PSSetShader(pshad, 0, 0);
|
||||
d_ctx->PSSetShaderResources(0, 1, &wnd->geo3d_color_srv);
|
||||
d_ctx->PSSetSamplers(0, 1, &sampler);
|
||||
d_ctx->lpVtbl->VSSetShader(d_ctx, vshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetShader(d_ctx, pshad, 0, 0);
|
||||
d_ctx->lpVtbl->PSSetShaderResources(d_ctx, 0, 1, &wnd->geo3d_color_srv);
|
||||
d_ctx->lpVtbl->PSSetSamplers(d_ctx, 0, 1, &sampler);
|
||||
|
||||
// rjf: setup scissor rect
|
||||
{
|
||||
@@ -1478,11 +1478,11 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
|
||||
rect.top = (LONG)clip.y0;
|
||||
rect.bottom = (LONG)clip.y1;
|
||||
}
|
||||
d_ctx->RSSetScissorRects(1, &rect);
|
||||
d_ctx->lpVtbl->RSSetScissorRects(d_ctx, 1, &rect);
|
||||
}
|
||||
|
||||
// rjf: draw
|
||||
d_ctx->Draw(4, 0);
|
||||
d_ctx->lpVtbl->Draw(d_ctx, 4, 0);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
@@ -20,6 +20,7 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: C-side Shader Types
|
||||
|
||||
typedef struct R_D3D11_Uniforms_Rect R_D3D11_Uniforms_Rect;
|
||||
struct R_D3D11_Uniforms_Rect
|
||||
{
|
||||
Vec2F32 viewport_size;
|
||||
@@ -32,6 +33,7 @@ struct R_D3D11_Uniforms_Rect
|
||||
Vec2F32 xform_scale;
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_Uniforms_BlurPass R_D3D11_Uniforms_BlurPass;
|
||||
struct R_D3D11_Uniforms_BlurPass
|
||||
{
|
||||
Rng2F32 rect;
|
||||
@@ -43,12 +45,14 @@ struct R_D3D11_Uniforms_BlurPass
|
||||
};
|
||||
StaticAssert(sizeof(R_D3D11_Uniforms_BlurPass) % 256 == 0, NotAligned); // constant count/offset must be aligned to 256 bytes
|
||||
|
||||
typedef struct R_D3D11_Uniforms_Blur R_D3D11_Uniforms_Blur;
|
||||
struct R_D3D11_Uniforms_Blur
|
||||
{
|
||||
R_D3D11_Uniforms_BlurPass passes[Axis2_COUNT];
|
||||
Vec4F32 kernel[32];
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_Uniforms_Mesh R_D3D11_Uniforms_Mesh;
|
||||
struct R_D3D11_Uniforms_Mesh
|
||||
{
|
||||
Mat4x4F32 xform;
|
||||
@@ -57,6 +61,7 @@ struct R_D3D11_Uniforms_Mesh
|
||||
////////////////////////////////
|
||||
//~ rjf: Main State Types
|
||||
|
||||
typedef struct R_D3D11_Tex2D R_D3D11_Tex2D;
|
||||
struct R_D3D11_Tex2D
|
||||
{
|
||||
R_D3D11_Tex2D *next;
|
||||
@@ -68,6 +73,7 @@ struct R_D3D11_Tex2D
|
||||
R_Tex2DFormat format;
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_Buffer R_D3D11_Buffer;
|
||||
struct R_D3D11_Buffer
|
||||
{
|
||||
R_D3D11_Buffer *next;
|
||||
@@ -77,6 +83,7 @@ struct R_D3D11_Buffer
|
||||
U64 size;
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_Window R_D3D11_Window;
|
||||
struct R_D3D11_Window
|
||||
{
|
||||
R_D3D11_Window *next;
|
||||
@@ -107,12 +114,14 @@ struct R_D3D11_Window
|
||||
Vec2S32 last_resolution;
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_FlushBuffer R_D3D11_FlushBuffer;
|
||||
struct R_D3D11_FlushBuffer
|
||||
{
|
||||
R_D3D11_FlushBuffer *next;
|
||||
ID3D11Buffer *buffer;
|
||||
};
|
||||
|
||||
typedef struct R_D3D11_State R_D3D11_State;
|
||||
struct R_D3D11_State
|
||||
{
|
||||
// rjf: state
|
||||
|
||||
@@ -480,10 +480,10 @@ ps_main(Vertex2Pixel v2p) : SV_TARGET
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@c_file @data(String8)
|
||||
@c_file @data(`String8*`)
|
||||
r_d3d11_g_vshad_kind_source_table:
|
||||
{
|
||||
@expand(R_D3D11_VShadTable a) `$(a.source)`;
|
||||
@expand(R_D3D11_VShadTable a) `&$(a.source)`;
|
||||
}
|
||||
|
||||
@c_file @data(String8)
|
||||
@@ -504,10 +504,10 @@ r_d3d11_g_vshad_kind_elements_count_table:
|
||||
@expand(R_D3D11_VShadTable a) `$(a.ilay_table != 0 -> "ArrayCount("..a.ilay_table..")") $(a.ilay_table == 0 -> "0")`;
|
||||
}
|
||||
|
||||
@c_file @data(String8)
|
||||
@c_file @data(`String8*`)
|
||||
r_d3d11_g_pshad_kind_source_table:
|
||||
{
|
||||
@expand(R_D3D11_PShadTable a) `$(a.source)`;
|
||||
@expand(R_D3D11_PShadTable a) `&$(a.source)`;
|
||||
}
|
||||
|
||||
@c_file @data(String8)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#define BUILD_SUPPLEMENTARY_UNIT 1
|
||||
#define OS_FEATURE_GRAPHICAL 1
|
||||
|
||||
#include "base/base_inc.h"
|
||||
#include "os/os_inc.h"
|
||||
#include "render/render_core.h"
|
||||
|
||||
#include "render_d3d11.h"
|
||||
#include "render_d3d11.cpp"
|
||||
|
||||
#include "base/base_inc.c"
|
||||
#include "os/os_inc.c"
|
||||
#include "render/render_core.c"
|
||||
@@ -59,6 +59,7 @@ extern String8 r_tex2d_kind_display_string_table[1];
|
||||
extern String8 r_tex2d_sample_kind_display_string_table[2];
|
||||
extern String8 r_pass_kind_display_string_table[3];
|
||||
extern U8 r_pass_kind_batch_table[3];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // RENDER_META_H
|
||||
|
||||
@@ -3,12 +3,10 @@
|
||||
|
||||
#include "render_core.c"
|
||||
|
||||
#if LANG_CPP
|
||||
# if R_BACKEND == R_BACKEND_STUB
|
||||
# include "stub/render_stub.c"
|
||||
# elif R_BACKEND == R_BACKEND_D3D11
|
||||
# include "d3d11/render_d3d11.cpp"
|
||||
# else
|
||||
# error Renderer backend not specified.
|
||||
# endif
|
||||
#if R_BACKEND == R_BACKEND_STUB
|
||||
# include "stub/render_stub.c"
|
||||
#elif R_BACKEND == R_BACKEND_D3D11
|
||||
# include "d3d11/render_d3d11.c"
|
||||
#else
|
||||
# error Renderer backend not specified.
|
||||
#endif
|
||||
|
||||
@@ -25,14 +25,12 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Backend Includes
|
||||
|
||||
#if LANG_CPP
|
||||
# if R_BACKEND == R_BACKEND_STUB
|
||||
# include "stub/render_stub.h"
|
||||
# elif R_BACKEND == R_BACKEND_D3D11
|
||||
# include "d3d11/render_d3d11.h"
|
||||
# else
|
||||
# error Renderer backend not specified.
|
||||
# endif
|
||||
#if R_BACKEND == R_BACKEND_STUB
|
||||
# include "stub/render_stub.h"
|
||||
#elif R_BACKEND == R_BACKEND_D3D11
|
||||
# include "d3d11/render_d3d11.h"
|
||||
#else
|
||||
# error Renderer backend not specified.
|
||||
#endif
|
||||
|
||||
#endif // RENDER_INC_H
|
||||
|
||||
@@ -78,6 +78,7 @@ TG_Kind_LastIncomplete = TG_Kind_IncompleteEnum,
|
||||
C_LINKAGE_BEGIN
|
||||
extern U8 tg_kind_basic_byte_size_table[54];
|
||||
extern String8 tg_kind_basic_string_table[54];
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // TYPE_GRAPH_META_H
|
||||
|
||||
@@ -191,6 +191,3 @@ internal F32 ui_set_next_corner_radius_11(F32 v) { UI_StackSetNextImpl(ui_state,
|
||||
internal F32 ui_set_next_blur_size(F32 v) { UI_StackSetNextImpl(ui_state, BlurSize, blur_size, F32, v) }
|
||||
internal F32 ui_set_next_text_padding(F32 v) { UI_StackSetNextImpl(ui_state, TextPadding, text_padding, F32, v) }
|
||||
internal UI_TextAlign ui_set_next_text_alignment(UI_TextAlign v) { UI_StackSetNextImpl(ui_state, TextAlignment, text_alignment, UI_TextAlign, v) }
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
@@ -361,7 +361,4 @@ internal F32 ui_set_next_corner_radius_11(F32 v);
|
||||
internal F32 ui_set_next_blur_size(F32 v);
|
||||
internal F32 ui_set_next_text_padding(F32 v);
|
||||
internal UI_TextAlign ui_set_next_text_alignment(UI_TextAlign v);
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // UI_META_H
|
||||
|
||||
Reference in New Issue
Block a user