diff --git a/src/vulkan/gpu_pass.c b/src/vulkan/gpu_pass.c
index 2fd7819c2dd1b179d75aed3d3a094f59cc95cf0d..4b80f949de451f854739de43eb13dbc8a1ec5b4a 100644
--- a/src/vulkan/gpu_pass.c
+++ b/src/vulkan/gpu_pass.c
@@ -191,8 +191,8 @@ static VkResult vk_recreate_pipelines(struct vk_ctx *vk, pl_pass pass,
     // The old pipeline might still be in use, so we have to destroy it
     // asynchronously with a device idle callback
     if (*out_pipe) {
-        vk_dev_callback(vk, (vk_cb) destroy_pipeline, vk, *out_pipe);
-        *out_pipe = NULL;
+        vk_dev_callback(vk, (vk_cb) destroy_pipeline, vk, (void*)(uintptr_t)*out_pipe);
+        *out_pipe = VK_NULL_HANDLE;
     }
 
     VkPipelineCreateFlags flags = 0;
@@ -612,7 +612,7 @@ no_descriptors: ;
 
     // Create the graphics/compute pipeline
     VkPipeline *pipe = has_spec ? &pass_vk->base : &pass_vk->pipe;
-    VK(vk_recreate_pipelines(vk, pass, has_spec, NULL, pipe));
+    VK(vk_recreate_pipelines(vk, pass, has_spec, VK_NULL_HANDLE, pipe));
     pl_log_cpu_time(gpu->log, after_compilation, clock(), "creating pipeline");
 
     if (!has_spec) {
diff --git a/src/vulkan/malloc.c b/src/vulkan/malloc.c
index 3f5fea809275196968d21ae3b821c802c2d82614..6981f114a86e75c61ab08f19770d400ac7b2f2d9 100644
--- a/src/vulkan/malloc.c
+++ b/src/vulkan/malloc.c
@@ -864,7 +864,7 @@ static bool vk_malloc_import(struct vk_malloc *ma, struct vk_memslice *out,
         goto error;
     }
 
-    VkDeviceMemory vkmem = NULL;
+    VkDeviceMemory vkmem = VK_NULL_HANDLE;
     VK(vk->AllocateMemory(vk->dev, &ainfo, PL_VK_ALLOC, &vkmem));
 
     slab = pl_alloc_ptr(NULL, slab);
diff --git a/src/vulkan/swapchain.c b/src/vulkan/swapchain.c
index 6bdd73b627c9a5eeb5d33a3fe77760c71d18fde9..f29437821f885ec41480287389d6adc525ea0cf4 100644
--- a/src/vulkan/swapchain.c
+++ b/src/vulkan/swapchain.c
@@ -597,7 +597,7 @@ static bool vk_sw_recreate(pl_swapchain sw, int w, int h)
 
     // If needed, allocate some more semaphores
     while (num_images > p->sems.num) {
-        VkSemaphore sem_in = NULL, sem_out = NULL;
+        VkSemaphore sem_in = VK_NULL_HANDLE, sem_out = VK_NULL_HANDLE;
         static const VkSemaphoreCreateInfo seminfo = {
             .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
         };