add buffer creation utility function
diff --git a/examples/HelloDepthStencil.cpp b/examples/HelloDepthStencil.cpp
index c2c6c30..a23fc35 100644
--- a/examples/HelloDepthStencil.cpp
+++ b/examples/HelloDepthStencil.cpp
@@ -58,13 +58,7 @@
         20, 21, 22,
         20, 22, 23
     };
-    indexBuffer = device.CreateBufferBuilder()
-        .SetAllowedUsage(nxt::BufferUsageBit::Mapped | nxt::BufferUsageBit::Index)
-        .SetInitialUsage(nxt::BufferUsageBit::Mapped)
-        .SetSize(sizeof(indexData))
-        .GetResult();
-    indexBuffer.SetSubData(0, sizeof(indexData) / sizeof(uint32_t), indexData);
-    indexBuffer.FreezeUsage(nxt::BufferUsageBit::Index);
+    indexBuffer = CreateFrozenBufferFromData(device, (void*)indexData, sizeof(indexData), nxt::BufferUsageBit::Index);
 
     static const float vertexData[6 * 4 * 6] = {
         -1.0, -1.0,  1.0,    1.0, 0.0, 0.0,
@@ -97,15 +91,7 @@
         -1.0,  1.0,  1.0,    1.0, 1.0, 1.0,
         -1.0,  1.0, -1.0,    1.0, 1.0, 1.0
     };
-
-    vertexBuffer = device.CreateBufferBuilder()
-        .SetAllowedUsage(nxt::BufferUsageBit::Mapped | nxt::BufferUsageBit::Vertex)
-        .SetInitialUsage(nxt::BufferUsageBit::Mapped)
-        .SetSize(sizeof(vertexData))
-        .GetResult();
-    vertexBuffer.SetSubData(0, sizeof(vertexData) / sizeof(uint32_t),
-            reinterpret_cast<const uint32_t*>(vertexData));
-    vertexBuffer.FreezeUsage(nxt::BufferUsageBit::Vertex);
+    vertexBuffer = CreateFrozenBufferFromData(device, (void*)vertexData, sizeof(vertexData), nxt::BufferUsageBit::Vertex);
 
     static const float planeData[6 * 4] = {
         -2.0, -1.0, -2.0,    0.5, 0.5, 0.5,
@@ -113,15 +99,7 @@
         2.0, -1.0,  2.0,    0.5, 0.5, 0.5,
         -2.0, -1.0,  2.0,    0.5, 0.5, 0.5,
     };
-
-    planeBuffer = device.CreateBufferBuilder()
-        .SetAllowedUsage(nxt::BufferUsageBit::Mapped | nxt::BufferUsageBit::Vertex)
-        .SetInitialUsage(nxt::BufferUsageBit::Mapped)
-        .SetSize(sizeof(planeData))
-        .GetResult();
-    planeBuffer.SetSubData(0, sizeof(planeData) / sizeof(uint32_t),
-        reinterpret_cast<const uint32_t*>(planeData));
-    planeBuffer.FreezeUsage(nxt::BufferUsageBit::Vertex);
+    planeBuffer = CreateFrozenBufferFromData(device, (void*)planeData, sizeof(planeData), nxt::BufferUsageBit::Vertex);
 }
 
 struct {
diff --git a/examples/Utils.cpp b/examples/Utils.cpp
index 9d344a1..289bfc8 100644
--- a/examples/Utils.cpp
+++ b/examples/Utils.cpp
@@ -245,6 +245,17 @@
         .GetResult();
 }
 
+nxt::Buffer CreateFrozenBufferFromData(const nxt::Device& device, void* data, uint32_t size, nxt::BufferUsageBit usage) {
+    nxt::Buffer buffer = device.CreateBufferBuilder()
+        .SetAllowedUsage(nxt::BufferUsageBit::Mapped | usage)
+        .SetInitialUsage(nxt::BufferUsageBit::Mapped)
+        .SetSize(size)
+        .GetResult();
+    buffer.SetSubData(0, size / sizeof(uint32_t), reinterpret_cast<const uint32_t*>(data));
+    buffer.FreezeUsage(usage);
+    return buffer;
+}
+
 extern "C" {
     bool InitUtils(int argc, const char** argv) {
         for (int i = 0; i < argc; i++) {
@@ -296,6 +307,10 @@
         return CreateShaderModule(device, static_cast<nxt::ShaderStage>(stage), source).Release();
     }
 
+    nxtBuffer CreateFrozenBufferFromData(nxtDevice device, void* data, uint32_t size, nxtBufferUsageBit usage) {
+        return CreateFrozenBufferFromData(device, data, size, usage);
+    }
+
     void DoSwapBuffers() {
         if (cmdBufType == CmdBufType::Terrible) {
             c2sBuf->Flush();
diff --git a/examples/Utils.h b/examples/Utils.h
index b49eb20..df4c183 100644
--- a/examples/Utils.h
+++ b/examples/Utils.h
@@ -34,7 +34,9 @@
     nxt::Device CreateCppNXTDevice();
     nxt::ShaderModule CreateShaderModule(const nxt::Device& device, nxt::ShaderStage stage, const char* source);
     void CreateDefaultRenderPass(const nxt::Device& device, nxt::RenderPass* renderPass, nxt::Framebuffer* framebuffer);
+    nxt::Buffer CreateFrozenBufferFromData(const nxt::Device& device, void* data, uint32_t size, nxt::BufferUsageBit usage);
 #else
     nxtDevice CreateNXTDevice();
     nxtShaderModule CreateShaderModule(nxtDevice device, nxtShaderStage stage, const char* source);
+    nxtBuffer CreateFrozenBufferFromData(nxtDevice device, void* data, uint32_t size, nxtBufferUsageBit usage);
 #endif