Cleanup: Vulkan/OpenXR: Pass Blender context via constructor
Similar to Direct3D. Pull Request: https://projects.blender.org/blender/blender/pulls/137254
This commit is contained in:
@@ -542,7 +542,7 @@ std::unique_ptr<GHOST_IXrGraphicsBinding> GHOST_XrGraphicsBindingCreateFromType(
|
||||
return std::make_unique<GHOST_XrGraphicsBindingOpenGL>();
|
||||
#ifdef WITH_VULKAN_BACKEND
|
||||
case GHOST_kXrGraphicsVulkan:
|
||||
return std::make_unique<GHOST_XrGraphicsBindingVulkan>();
|
||||
return std::make_unique<GHOST_XrGraphicsBindingVulkan>(context);
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
case GHOST_kXrGraphicsOpenGLD3D11:
|
||||
|
||||
@@ -28,14 +28,23 @@ PFN_xrCreateVulkanInstanceKHR GHOST_XrGraphicsBindingVulkan::s_xrCreateVulkanIns
|
||||
nullptr;
|
||||
PFN_xrCreateVulkanDeviceKHR GHOST_XrGraphicsBindingVulkan::s_xrCreateVulkanDeviceKHR_fn = nullptr;
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Constructor
|
||||
* \{ */
|
||||
|
||||
GHOST_XrGraphicsBindingVulkan::GHOST_XrGraphicsBindingVulkan(GHOST_Context &ghost_ctx)
|
||||
: GHOST_IXrGraphicsBinding(), m_ghost_ctx(static_cast<GHOST_ContextVK &>(ghost_ctx))
|
||||
{
|
||||
}
|
||||
|
||||
/* \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Destroying resources.
|
||||
* \{ */
|
||||
|
||||
GHOST_XrGraphicsBindingVulkan::~GHOST_XrGraphicsBindingVulkan()
|
||||
{
|
||||
m_ghost_ctx = nullptr;
|
||||
|
||||
/* Destroy buffer */
|
||||
if (m_vk_buffer != VK_NULL_HANDLE) {
|
||||
vmaUnmapMemory(m_vma_allocator, m_vk_buffer_allocation);
|
||||
@@ -137,11 +146,10 @@ bool GHOST_XrGraphicsBindingVulkan::checkVersionRequirements(GHOST_Context &ghos
|
||||
return true;
|
||||
}
|
||||
|
||||
void GHOST_XrGraphicsBindingVulkan::initFromGhostContext(GHOST_Context &ghost_ctx,
|
||||
void GHOST_XrGraphicsBindingVulkan::initFromGhostContext(GHOST_Context & /*ghost_ctx*/,
|
||||
XrInstance instance,
|
||||
XrSystemId system_id)
|
||||
{
|
||||
m_ghost_ctx = static_cast<GHOST_ContextVK *>(&ghost_ctx);
|
||||
/* Create a new VkInstance that is compatible with OpenXR */
|
||||
VkApplicationInfo vk_application_info = {VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
||||
nullptr,
|
||||
@@ -268,7 +276,7 @@ void GHOST_XrGraphicsBindingVulkan::initFromGhostContext(GHOST_Context &ghost_ct
|
||||
GHOST_TVulkanXRModes GHOST_XrGraphicsBindingVulkan::choseDataTransferMode()
|
||||
{
|
||||
GHOST_VulkanHandles vulkan_handles;
|
||||
m_ghost_ctx->getVulkanHandles(vulkan_handles);
|
||||
m_ghost_ctx.getVulkanHandles(vulkan_handles);
|
||||
|
||||
/* Retrieve the Context physical device properties. */
|
||||
VkPhysicalDeviceVulkan11Properties vk_physical_device_vulkan11_properties = {
|
||||
@@ -436,7 +444,7 @@ void GHOST_XrGraphicsBindingVulkan::submitToSwapchainImageCpu(
|
||||
{
|
||||
/* Acquire frame buffer image. */
|
||||
GHOST_VulkanOpenXRData openxr_data = {GHOST_kVulkanXRModeCPU};
|
||||
m_ghost_ctx->openxr_acquire_framebuffer_image_callback_(&openxr_data);
|
||||
m_ghost_ctx.openxr_acquire_framebuffer_image_callback_(&openxr_data);
|
||||
|
||||
/* Import render result. */
|
||||
VkDeviceSize component_size = 4 * sizeof(uint8_t);
|
||||
@@ -542,7 +550,7 @@ void GHOST_XrGraphicsBindingVulkan::submitToSwapchainImageCpu(
|
||||
vkResetCommandBuffer(vk_command_buffer, 0);
|
||||
|
||||
/* Release frame buffer image. */
|
||||
m_ghost_ctx->openxr_release_framebuffer_image_callback_(&openxr_data);
|
||||
m_ghost_ctx.openxr_release_framebuffer_image_callback_(&openxr_data);
|
||||
}
|
||||
|
||||
/* \} */
|
||||
@@ -555,7 +563,7 @@ void GHOST_XrGraphicsBindingVulkan::submitToSwapchainImageGpu(
|
||||
XrSwapchainImageVulkan2KHR &swapchain_image, const GHOST_XrDrawViewInfo &draw_info)
|
||||
{
|
||||
GHOST_VulkanOpenXRData openxr_data = {m_data_transfer_mode};
|
||||
m_ghost_ctx->openxr_acquire_framebuffer_image_callback_(&openxr_data);
|
||||
m_ghost_ctx.openxr_acquire_framebuffer_image_callback_(&openxr_data);
|
||||
|
||||
/* Create an image handle */
|
||||
VkExternalMemoryImageCreateInfo vk_external_memory_image_info = {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
class GHOST_XrGraphicsBindingVulkan : public GHOST_IXrGraphicsBinding {
|
||||
public:
|
||||
GHOST_XrGraphicsBindingVulkan(GHOST_Context &ghost_ctx);
|
||||
~GHOST_XrGraphicsBindingVulkan() override;
|
||||
|
||||
/**
|
||||
@@ -41,7 +42,7 @@ class GHOST_XrGraphicsBindingVulkan : public GHOST_IXrGraphicsBinding {
|
||||
bool needsUpsideDownDrawing(GHOST_Context &ghost_ctx) const override;
|
||||
|
||||
private:
|
||||
GHOST_ContextVK *m_ghost_ctx = nullptr;
|
||||
GHOST_ContextVK &m_ghost_ctx;
|
||||
|
||||
VkInstance m_vk_instance = VK_NULL_HANDLE;
|
||||
VkPhysicalDevice m_vk_physical_device = VK_NULL_HANDLE;
|
||||
|
||||
Reference in New Issue
Block a user