Moved grime to its own dedicated file
This commit is contained in:
		@@ -1,5 +0,0 @@
 | 
			
		||||
package sectr
 | 
			
		||||
 | 
			
		||||
import rl "vendor:raylib"
 | 
			
		||||
 | 
			
		||||
Font :: rl.Font
 | 
			
		||||
@@ -24,31 +24,11 @@ ModuleAPI :: struct {
 | 
			
		||||
	clean_temp : type_of( clean_temp ),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
memory_chunk_size      :: 2 * Gigabyte
 | 
			
		||||
memory_persistent_size :: 128 * Megabyte
 | 
			
		||||
memory_trans_temp_size :: (memory_chunk_size - memory_persistent_size ) / 2
 | 
			
		||||
 | 
			
		||||
Memory :: struct {
 | 
			
		||||
	live       : ^ virtual.Arena,
 | 
			
		||||
	snapshot   : ^ virtual.Arena,
 | 
			
		||||
	persistent : ^ TrackedAllocator,
 | 
			
		||||
	transient  : ^ TrackedAllocator,
 | 
			
		||||
	temp       : ^ TrackedAllocator
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
memory : Memory
 | 
			
		||||
 | 
			
		||||
@export
 | 
			
		||||
startup :: proc( live_mem, snapshot_mem : ^ virtual.Arena )
 | 
			
		||||
{
 | 
			
		||||
	// Setup memory for the first time
 | 
			
		||||
	{
 | 
			
		||||
		Arena              :: mem.Arena
 | 
			
		||||
		Tracking_Allocator :: mem.Tracking_Allocator
 | 
			
		||||
		arena_allocator    :: mem.arena_allocator
 | 
			
		||||
		arena_init         :: mem.arena_init
 | 
			
		||||
		slice_ptr          :: mem.slice_ptr
 | 
			
		||||
 | 
			
		||||
		arena_size     :: size_of( mem.Arena)
 | 
			
		||||
		internals_size :: 4 * Megabyte
 | 
			
		||||
 | 
			
		||||
@@ -110,11 +90,6 @@ sectr_shutdown :: proc()
 | 
			
		||||
@export
 | 
			
		||||
reload :: proc( live_mem, snapshot_mem : ^ virtual.Arena )
 | 
			
		||||
{
 | 
			
		||||
	Arena              :: mem.Arena
 | 
			
		||||
	Tracking_Allocator :: mem.Tracking_Allocator
 | 
			
		||||
	arena_allocator    :: mem.arena_allocator
 | 
			
		||||
	slice_ptr          :: mem.slice_ptr
 | 
			
		||||
 | 
			
		||||
	using memory;
 | 
			
		||||
	block := live_mem.curr_block
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,22 @@
 | 
			
		||||
package sectr
 | 
			
		||||
 | 
			
		||||
import "core:mem/virtual"
 | 
			
		||||
 | 
			
		||||
memory : Memory
 | 
			
		||||
 | 
			
		||||
memory_chunk_size      :: 2 * Gigabyte
 | 
			
		||||
memory_persistent_size :: 128 * Megabyte
 | 
			
		||||
memory_trans_temp_size :: (memory_chunk_size - memory_persistent_size ) / 2
 | 
			
		||||
 | 
			
		||||
Memory :: struct {
 | 
			
		||||
	live       : ^ virtual.Arena,
 | 
			
		||||
	snapshot   : ^ virtual.Arena,
 | 
			
		||||
	persistent : ^ TrackedAllocator,
 | 
			
		||||
	transient  : ^ TrackedAllocator,
 | 
			
		||||
	temp       : ^ TrackedAllocator
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
State :: struct {
 | 
			
		||||
	project : Project,
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								code/grime.odin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								code/grime.odin
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
 | 
			
		||||
package sectr
 | 
			
		||||
// At least its less than C/C++ ...
 | 
			
		||||
 | 
			
		||||
import "core:mem"
 | 
			
		||||
import "core:mem/virtual"
 | 
			
		||||
 | 
			
		||||
Byte     :: 1
 | 
			
		||||
Kilobyte :: 1024 * Byte
 | 
			
		||||
Megabyte :: 1024 * Kilobyte
 | 
			
		||||
Gigabyte :: 1024 * Megabyte
 | 
			
		||||
Terabyte :: 1024 * Gigabyte
 | 
			
		||||
Petabyte :: 1024 * Terabyte
 | 
			
		||||
Exabyte  :: 1024 * Petabyte
 | 
			
		||||
 | 
			
		||||
kilobytes :: proc ( kb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return kb * Kilobyte
 | 
			
		||||
}
 | 
			
		||||
megabytes :: proc ( mb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return mb * Megabyte
 | 
			
		||||
}
 | 
			
		||||
gigabyte  :: proc ( gb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return gb * Gigabyte
 | 
			
		||||
}
 | 
			
		||||
terabyte  :: proc ( tb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return tb * Terabyte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Allocator               :: mem.Allocator
 | 
			
		||||
alloc                   :: mem.alloc
 | 
			
		||||
Arena                   :: mem.Arena
 | 
			
		||||
arena_allocator         :: mem.arena_allocator
 | 
			
		||||
arena_init              :: mem.arena_init
 | 
			
		||||
ptr_offset              :: mem.ptr_offset
 | 
			
		||||
slice_ptr               :: mem.slice_ptr
 | 
			
		||||
Tracking_Allocator      :: mem.Tracking_Allocator
 | 
			
		||||
tracking_allocator      :: mem.tracking_allocator
 | 
			
		||||
tracking_allocator_init :: mem.tracking_allocator_init
 | 
			
		||||
 | 
			
		||||
import rl "vendor:raylib"
 | 
			
		||||
 | 
			
		||||
Font :: rl.Font
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -6,70 +6,43 @@ import "core:mem/virtual"
 | 
			
		||||
import "core:runtime"
 | 
			
		||||
import "core:os"
 | 
			
		||||
 | 
			
		||||
Byte     :: 1
 | 
			
		||||
Kilobyte :: 1024 * Byte
 | 
			
		||||
Megabyte :: 1024 * Kilobyte
 | 
			
		||||
Gigabyte :: 1024 * Megabyte
 | 
			
		||||
Terabyte :: 1024 * Gigabyte
 | 
			
		||||
Petabyte :: 1024 * Terabyte
 | 
			
		||||
Exabyte  :: 1024 * Petabyte
 | 
			
		||||
 | 
			
		||||
kilobytes :: proc ( kb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return kb * Kilobyte
 | 
			
		||||
}
 | 
			
		||||
megabytes :: proc ( mb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return mb * Megabyte
 | 
			
		||||
}
 | 
			
		||||
gigabyte  :: proc ( gb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return gb * Gigabyte
 | 
			
		||||
}
 | 
			
		||||
terabyte  :: proc ( tb : $ integer_type ) -> integer_type {
 | 
			
		||||
	return tb * Terabyte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Initialize a sub-section of our virtual memory as a sub-arena
 | 
			
		||||
sub_arena_init :: proc( address : ^ byte, size : int ) -> ( ^ mem.Arena) {
 | 
			
		||||
sub_arena_init :: proc( address : ^ byte, size : int ) -> ( ^ Arena) {
 | 
			
		||||
	Arena :: mem.Arena
 | 
			
		||||
 | 
			
		||||
	arena_size :: size_of( Arena)
 | 
			
		||||
	sub_arena  := cast( ^ Arena ) address
 | 
			
		||||
	mem_slice  := mem.slice_ptr( mem.ptr_offset( address, arena_size), size )
 | 
			
		||||
	mem.arena_init( sub_arena, mem_slice )
 | 
			
		||||
	mem_slice  := slice_ptr( ptr_offset( address, arena_size), size )
 | 
			
		||||
	arena_init( sub_arena, mem_slice )
 | 
			
		||||
	return sub_arena
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Helper to get the the beginning of memory after a slice
 | 
			
		||||
memory_after :: proc( slice : []byte ) -> ( ^ byte) {
 | 
			
		||||
	return mem.ptr_offset( & slice[0], len(slice) )
 | 
			
		||||
	return ptr_offset( & slice[0], len(slice) )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Since this is a prototype, all memory is always tracked. No arena is is interfaced directly.
 | 
			
		||||
TrackedAllocator :: struct {
 | 
			
		||||
	backing   : mem.Arena,
 | 
			
		||||
	internals : mem.Arena,
 | 
			
		||||
	tracker   : mem.Tracking_Allocator,
 | 
			
		||||
	backing   : Arena,
 | 
			
		||||
	internals : Arena,
 | 
			
		||||
	tracker   : Tracking_Allocator,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tracked_allocator :: proc ( self : ^ TrackedAllocator ) -> mem.Allocator {
 | 
			
		||||
	return mem.tracking_allocator( & self.tracker )
 | 
			
		||||
tracked_allocator :: proc ( self : ^ TrackedAllocator ) -> Allocator {
 | 
			
		||||
	return tracking_allocator( & self.tracker )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tracked_allocator_init :: proc( size, internals_size : int, allocator := context.allocator ) -> TrackedAllocator
 | 
			
		||||
{
 | 
			
		||||
	result : TrackedAllocator
 | 
			
		||||
 | 
			
		||||
	Arena              :: mem.Arena
 | 
			
		||||
	Tracking_Allocator :: mem.Tracking_Allocator
 | 
			
		||||
	arena_allocator    :: mem.arena_allocator
 | 
			
		||||
	arena_init         :: mem.arena_init
 | 
			
		||||
	slice_ptr          :: mem.slice_ptr
 | 
			
		||||
	arena_size     :: size_of( Arena)
 | 
			
		||||
	backing_size   := size           + arena_size
 | 
			
		||||
	internals_size := internals_size + arena_size
 | 
			
		||||
	raw_size       := backing_size + internals_size
 | 
			
		||||
 | 
			
		||||
	arena_size              :: size_of( Arena)
 | 
			
		||||
	backing_size            := size           + arena_size
 | 
			
		||||
	internals_size          := internals_size + arena_size
 | 
			
		||||
	raw_size                := backing_size + internals_size
 | 
			
		||||
 | 
			
		||||
	raw_mem, raw_mem_code := mem.alloc( raw_size, mem.DEFAULT_ALIGNMENT, allocator )
 | 
			
		||||
	raw_mem, raw_mem_code := alloc( raw_size, mem.DEFAULT_ALIGNMENT, allocator )
 | 
			
		||||
	if ( raw_mem_code != mem.Allocator_Error.None )
 | 
			
		||||
	{
 | 
			
		||||
		// TODO(Ed) : Setup a proper logging interface
 | 
			
		||||
@@ -83,20 +56,12 @@ tracked_allocator_init :: proc( size, internals_size : int, allocator := context
 | 
			
		||||
 | 
			
		||||
	backing_allocator   := arena_allocator( & result.backing )
 | 
			
		||||
	internals_allocator := arena_allocator( & result.internals )
 | 
			
		||||
	mem.tracking_allocator_init( & result.tracker, backing_allocator, internals_allocator )
 | 
			
		||||
	tracking_allocator_init( & result.tracker, backing_allocator, internals_allocator )
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tracked_allocator_init_vmem :: proc( vmem : [] byte, internals_size : int ) -> ^ TrackedAllocator
 | 
			
		||||
{
 | 
			
		||||
	Arena                  :: mem.Arena
 | 
			
		||||
	Tracking_Allocator     :: mem.Tracking_Allocator
 | 
			
		||||
	arena_allocator        :: mem.arena_allocator
 | 
			
		||||
	arena_init             :: mem.arena_init
 | 
			
		||||
	tracking_alloator_init :: mem.tracking_allocator_init
 | 
			
		||||
	ptr_offset             :: mem.ptr_offset
 | 
			
		||||
	slice_ptr              :: mem.slice_ptr
 | 
			
		||||
 | 
			
		||||
	arena_size              :: size_of( Arena)
 | 
			
		||||
	tracking_allocator_size :: size_of( Tracking_Allocator )
 | 
			
		||||
	backing_size            := len(vmem)    - internals_size
 | 
			
		||||
@@ -121,6 +86,6 @@ tracked_allocator_init_vmem :: proc( vmem : [] byte, internals_size : int ) -> ^
 | 
			
		||||
	arena_init( backing,   backing_slice )
 | 
			
		||||
	arena_init( internals, internals_slice )
 | 
			
		||||
 | 
			
		||||
	tracking_alloator_init( & result.tracker, arena_allocator( backing ), arena_allocator( internals ) )
 | 
			
		||||
	tracking_allocator_init( & result.tracker, arena_allocator( backing ), arena_allocator( internals ) )
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user