diff --git a/librashader-runtime-mtl/src/buffer.rs b/librashader-runtime-mtl/src/buffer.rs
index 0b7fd91..608e58b 100644
--- a/librashader-runtime-mtl/src/buffer.rs
+++ b/librashader-runtime-mtl/src/buffer.rs
@@ -24,7 +24,7 @@ impl AsRef<ProtocolObject<dyn MTLBuffer>> for MetalBuffer {
 impl MetalBuffer {
     pub fn new(
         device: &ProtocolObject<dyn MTLDevice>,
-        size: usize,
+        mut size: usize,
         label: &str,
     ) -> error::Result<Self> {
         let storage_mode = if cfg!(all(target_arch = "aarch64", target_vendor = "apple")) {
@@ -33,6 +33,11 @@ impl MetalBuffer {
             MTLResourceStorageModeManaged
         };
 
+        // Can't create buffer of size 0.
+        if size == 0 {
+            size = 16;
+        };
+
         let buffer = device
             .newBufferWithLength_options(size, storage_mode)
             .ok_or(FilterChainError::BufferError)?;