enforce alignment
authorhgn <hgodden00@gmail.com>
Mon, 26 Dec 2022 15:39:25 +0000 (15:39 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 26 Dec 2022 15:39:25 +0000 (15:39 +0000)
submodules/SDL
vg.h
vg_audio.h
vg_mem.h
vg_ui.h

index eef4d3c86a653f91b7221c80809ba8ab56f94cf1..06492c598158cf825a18aececaf7511d7fd04f48 160000 (submodule)
@@ -1 +1 @@
-Subproject commit eef4d3c86a653f91b7221c80809ba8ab56f94cf1
+Subproject commit 06492c598158cf825a18aececaf7511d7fd04f48
diff --git a/vg.h b/vg.h
index 1945b823b67dbf91c238f182fcf4f7b3abb34307..ada54695aee189dc37a0583dceabc5cd6c17786d 100644 (file)
--- a/vg.h
+++ b/vg.h
@@ -626,7 +626,7 @@ VG_STATIC void _vg_process_launch_opts_internal( int argc, char *argv[] )
 
       if(  vg_long_opt( "use-libc-malloc" ) )
       {
-         vg_mem.use_libc_malloc = atoi( arg );
+         vg_mem.use_libc_malloc = 1;
       }
 
       if( vg_long_opt( "high-performance" ) )
index fc09d103aa5338167100acdd0738679d656e3aba..aeb05a4f9e0926b1ca44d6c5f534362bf76c7ddf 100644 (file)
@@ -816,7 +816,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
           data_size      = length_samples * sizeof(i16);
 
       audio_lock();
-      clip->data = vg_linear_alloc( lin_alloc, data_size );
+      clip->data = vg_linear_alloc( lin_alloc, vg_align8(data_size) );
       clip->size = length_samples;
       audio_unlock();
 
index 3a7a49da06814fe9c2c7d1d1b082ee6cc6a8ed5a..a21467488d5a47972bcc84a32bba6f1e599838b3 100644 (file)
--- a/vg_mem.h
+++ b/vg_mem.h
@@ -90,6 +90,12 @@ VG_STATIC void vg_fatal_exit_loop( const char *error );
 VG_STATIC void vg_error(const char *fmt, ...);
 VG_STATIC void vg_info(const char *fmt, ...);
 
+VG_STATIC u32 vg_align8( u32 s )
+{
+   u32 m = (s + 7) >> 3;
+   return m << 3;
+}
+
 /* Returns allocator structure from data pointer */
 static vg_linear_allocator *vg_linear_header( void *data )
 {
@@ -103,6 +109,12 @@ static vg_linear_allocator *vg_linear_header( void *data )
 __attribute__((warn_unused_result))
 VG_STATIC void *vg_linear_alloc( void *buffer, u32 size )
 {
+   if( size % 8 )
+   {
+      vg_error( "Requested size: %u\n", size );
+      vg_fatal_exit_loop( "8 byte alignment required" );
+   }
+
    vg_linear_allocator *alloc = vg_linear_header( buffer );
 
    if( (alloc->cur + size) > alloc->size )
diff --git a/vg_ui.h b/vg_ui.h
index 8e73da5a1ab5a208432ba27e359a9b77f6653da2..0c88b2f26e566dc5eac01b84b7c2071b26d81fac 100644 (file)
--- a/vg_ui.h
+++ b/vg_ui.h
@@ -227,7 +227,7 @@ VG_STATIC void _vg_ui_init(void)
 
        /* Alloc RAM default context */
    u32 vert_size = vg_uictx.max_verts*sizeof(struct ui_vert),
-       inds_size = vg_uictx.max_indices*sizeof(u16);
+       inds_size = vg_align8( vg_uictx.max_indices*sizeof(u16) );
    
    vg_uictx.vertex_buffer = vg_linear_alloc( vg_mem.rtmemory, vert_size );
    vg_uictx.indice_buffer = vg_linear_alloc( vg_mem.rtmemory, inds_size );