Commit: 165c5a52597e02ada0505a893fb97b7b724d0298
Author: Julian Eisel
Date: Wed Jul 17 14:02:59 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB165c5a52597e02ada0505a893fb97b7b724d0298
Fix possible OpenXR swapchain leak by using new unique_oxr_ptr
===================================================================
M intern/ghost/intern/GHOST_XrSession.cpp
===================================================================
diff --git a/intern/ghost/intern/GHOST_XrSession.cpp
b/intern/ghost/intern/GHOST_XrSession.cpp
index 986e119ea90..2e85c22faad 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -234,12 +234,12 @@ static std::vector<XrSwapchainImageBaseHeader *>
swapchain_images_create(
return images;
}
-static XrSwapchain swapchain_create(const XrSession session,
- GHOST_IXrGraphicsBinding *gpu_binding,
- const XrViewConfigurationView *xr_view)
+static unique_oxr_ptr<XrSwapchain> swapchain_create(const XrSession session,
+ GHOST_IXrGraphicsBinding
*gpu_binding,
+ const
XrViewConfigurationView *xr_view)
{
XrSwapchainCreateInfo create_info{XR_TYPE_SWAPCHAIN_CREATE_INFO};
- XrSwapchain swapchain;
+ unique_oxr_ptr<XrSwapchain> swapchain(xrDestroySwapchain);
uint32_t format_count = 0;
int64_t chosen_format;
@@ -264,7 +264,7 @@ static XrSwapchain swapchain_create(const XrSession session,
create_info.faceCount = 1;
create_info.arraySize = 1;
create_info.mipCount = 1;
- CHECK_XR(xrCreateSwapchain(session, &create_info, &swapchain),
+ CHECK_XR(swapchain.construct(xrCreateSwapchain, session, &create_info),
"Failed to create OpenXR swapchain.");
return swapchain;
@@ -289,13 +289,16 @@ void GHOST_XrSession::prepareDrawing()
"Failed to get count of view configurations.");
for (const XrViewConfigurationView &view : view_configs) {
- XrSwapchain swapchain = swapchain_create(m_oxr->session,
m_gpu_binding.get(), &view);
- auto images = swapchain_images_create(swapchain, m_gpu_binding.get());
+ unique_oxr_ptr<XrSwapchain> swapchain = swapchain_create(
+ m_oxr->session, m_gpu_binding.get(), &view);
+ auto images = swapchain_images_create(swapchain.get(),
m_gpu_binding.get());
m_oxr->swapchain_image_width = view.recommendedImageRectWidth;
m_oxr->swapchain_image_height = view.recommendedImageRectHeight;
- m_oxr->swapchains.push_back(swapchain);
- m_oxr->swapchain_images.insert(std::make_pair(swapchain,
std::move(images)));
+ m_oxr->swapchains.push_back(swapchain.get());
+ m_oxr->swapchain_images.insert(std::make_pair(swapchain.get(),
std::move(images)));
+
+ swapchain.release();
}
m_oxr->views.resize(view_count, {XR_TYPE_VIEW});
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs