diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
index 9a0f07a..ec9cae6 100644
--- a/vulkan/nulldrv/null_driver.cpp
+++ b/vulkan/nulldrv/null_driver.cpp
@@ -119,6 +119,21 @@
 
 namespace null_driver {
 
+template <typename HandleT>
+struct HandleTraits {};
+
+template <typename HandleT>
+typename HandleTraits<HandleT>::PointerType GetObjectFromHandle(
+    const HandleT& h) {
+    return reinterpret_cast<typename HandleTraits<HandleT>::PointerType>(
+        uintptr_t(h.handle));
+}
+
+template <typename T>
+typename T::HandleType GetHandleToObject(const T* obj) {
+    return typename T::HandleType(reinterpret_cast<uintptr_t>(obj));
+}
+
 // -----------------------------------------------------------------------------
 // Global
 
@@ -222,6 +237,49 @@
 }
 
 // -----------------------------------------------------------------------------
+// Buffer
+
+struct Buffer {
+    typedef VkBuffer HandleType;
+    VkDeviceSize size;
+};
+template <>
+struct HandleTraits<VkBuffer> {
+    typedef Buffer* PointerType;
+};
+
+VkResult CreateBuffer(VkDevice device,
+                      const VkBufferCreateInfo* create_info,
+                      VkBuffer* buffer_handle) {
+    const VkAllocCallbacks* alloc = device->instance->alloc;
+    Buffer* buffer = static_cast<Buffer*>(
+        alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer),
+                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
+    if (!buffer)
+        return VK_ERROR_OUT_OF_HOST_MEMORY;
+    buffer->size = create_info->size;
+    *buffer_handle = GetHandleToObject(buffer);
+    return VK_SUCCESS;
+}
+
+VkResult GetBufferMemoryRequirements(VkDevice,
+                                     VkBuffer buffer_handle,
+                                     VkMemoryRequirements* requirements) {
+    Buffer* buffer = GetObjectFromHandle(buffer_handle);
+    requirements->size = buffer->size;
+    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
+    requirements->memoryTypeBits = 0x1;
+    return VK_SUCCESS;
+}
+
+VkResult DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
+    const VkAllocCallbacks* alloc = device->instance->alloc;
+    Buffer* buffer = GetObjectFromHandle(buffer_handle);
+    alloc->pfnFree(alloc->pUserData, buffer);
+    return VK_SUCCESS;
+}
+
+// -----------------------------------------------------------------------------
 // No-op entrypoints
 
 // clang-format off
@@ -323,11 +381,6 @@
     return VK_SUCCESS;
 }
 
-VkResult GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-    return VK_SUCCESS;
-}
-
 VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
     ALOGV("TODO: vk%s", __FUNCTION__);
     return VK_SUCCESS;
@@ -453,16 +506,6 @@
     return VK_SUCCESS;
 }
 
-VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-    return VK_SUCCESS;
-}
-
-VkResult DestroyBuffer(VkDevice device, VkBuffer buffer) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-    return VK_SUCCESS;
-}
-
 VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView) {
     ALOGV("TODO: vk%s", __FUNCTION__);
     return VK_SUCCESS;
