diff --git a/src/nouveau/vulkan/nvk_queue.c b/src/nouveau/vulkan/nvk_queue.c index 14e0fbd0504..4ddc6118c47 100644 --- a/src/nouveau/vulkan/nvk_queue.c +++ b/src/nouveau/vulkan/nvk_queue.c @@ -28,8 +28,10 @@ nvk_queue_state_finish(struct nvk_device *dev, nouveau_ws_bo_destroy(qs->samplers.bo); if (qs->slm.bo) nouveau_ws_bo_destroy(qs->slm.bo); - if (qs->push.bo) + if (qs->push.bo) { + nouveau_ws_bo_unmap(qs->push.bo, qs->push.bo_map); nouveau_ws_bo_destroy(qs->push.bo); + } } VkResult @@ -211,12 +213,13 @@ nvk_queue_state_update(struct nvk_device *dev, */ P_IMMD(p, NV9097, SET_SHADER_LOCAL_MEMORY_WINDOW, 0xff << 24); - nouveau_ws_bo_unmap(push_bo, push_map); - - if (qs->push.bo) + if (qs->push.bo) { + nouveau_ws_bo_unmap(qs->push.bo, qs->push.bo_map); nouveau_ws_bo_destroy(qs->push.bo); + } qs->push.bo = push_bo; + qs->push.bo_map = push_map; qs->push.dw_count = nv_push_dw_count(&push); return VK_SUCCESS; diff --git a/src/nouveau/vulkan/nvk_queue.h b/src/nouveau/vulkan/nvk_queue.h index 953841087e3..e578b458a28 100644 --- a/src/nouveau/vulkan/nvk_queue.h +++ b/src/nouveau/vulkan/nvk_queue.h @@ -28,6 +28,7 @@ struct nvk_queue_state { struct { struct nouveau_ws_bo *bo; + void *bo_map; uint32_t dw_count; } push; };