From e8aa68beb4bfc785ffa52b1b7c7a3afcf1e32863 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 2 Apr 2025 22:19:19 +0800 Subject: [PATCH] update Vulkan implementation headers --- .../include/windows/vulkan/d3d_context.h | 4 +- .../include/windows/vulkan/d3d_texture.h | 2 +- .../native/include/windows/vulkan/import.h | 4 +- .../include/windows/vulkan/vulkan_context.h | 114 +++++------------- .../include/windows/vulkan/vulkan_platform.h | 49 ++++++++ .../include/windows/vulkan/vulkan_texture.h | 4 +- 6 files changed, 86 insertions(+), 91 deletions(-) create mode 100644 thermion_dart/native/include/windows/vulkan/vulkan_platform.h diff --git a/thermion_dart/native/include/windows/vulkan/d3d_context.h b/thermion_dart/native/include/windows/vulkan/d3d_context.h index 85ccd9b1..d23c39cb 100644 --- a/thermion_dart/native/include/windows/vulkan/d3d_context.h +++ b/thermion_dart/native/include/windows/vulkan/d3d_context.h @@ -10,11 +10,9 @@ #include #include - - namespace thermion::windows::d3d { - class EMSCRIPTEN_KEEPALIVE D3DContext { + class DLL_EXPORT D3DContext { public: D3DContext(); ~D3DContext(); diff --git a/thermion_dart/native/include/windows/vulkan/d3d_texture.h b/thermion_dart/native/include/windows/vulkan/d3d_texture.h index b87ecb0b..e5b36db6 100644 --- a/thermion_dart/native/include/windows/vulkan/d3d_texture.h +++ b/thermion_dart/native/include/windows/vulkan/d3d_texture.h @@ -15,7 +15,7 @@ namespace thermion::windows::d3d { -class EMSCRIPTEN_KEEPALIVE D3DTexture { +class DLL_EXPORT D3DTexture { public: D3DTexture( Microsoft::WRL::ComPtr d3dTexture2D, diff --git a/thermion_dart/native/include/windows/vulkan/import.h b/thermion_dart/native/include/windows/vulkan/import.h index 9644b8a4..a511eb3d 100644 --- a/thermion_dart/native/include/windows/vulkan/import.h +++ b/thermion_dart/native/include/windows/vulkan/import.h @@ -1,5 +1,5 @@ #ifdef THERMION_WIN32_KHR_BUILD -#define EMSCRIPTEN_KEEPALIVE __declspec(dllimport) +#define DLL_EXPORT __declspec(dllimport) #else -#define EMSCRIPTEN_KEEPALIVE __declspec(dllexport) +#define DLL_EXPORT __declspec(dllexport) #endif \ No newline at end of file diff --git a/thermion_dart/native/include/windows/vulkan/vulkan_context.h b/thermion_dart/native/include/windows/vulkan/vulkan_context.h index 06d1ac25..03689e47 100644 --- a/thermion_dart/native/include/windows/vulkan/vulkan_context.h +++ b/thermion_dart/native/include/windows/vulkan/vulkan_context.h @@ -1,24 +1,19 @@ #pragma once #include "d3d_context.h" - #include "vulkan_texture.h" - +#include "vulkan_platform.h" #include "utils.h" -#include - -#include -#include #include -#include -#include - +#include #include #include #include -#include #include +#include +#include +#include #include @@ -29,80 +24,31 @@ namespace thermion::windows::vulkan { - class TVulkanPlatform : public filament::backend::VulkanPlatform { - public: - - TVulkanPlatform() { - _customization.gpu.index = 0; - } - - virtual VulkanPlatform::Customization getCustomization() const noexcept override { - return _customization; - } - - SwapChainPtr createSwapChain(void* nativeWindow, uint64_t flags, - VkExtent2D extent = {0, 0}) override { - std::lock_guard lock(mutex); - current = filament::backend::VulkanPlatform::createSwapChain(nativeWindow, flags, extent); - std::cout << "Created swap chain with flags " << flags << std::endl; - return current; - } + class DLL_EXPORT ThermionVulkanContext { + public: + ThermionVulkanContext(); + ~ThermionVulkanContext(); + + HANDLE CreateRenderingSurface(uint32_t width, uint32_t height, uint32_t left, uint32_t top); + + void DestroyRenderingSurface(HANDLE handle); + + void ResizeRenderingSurface(uint32_t width, uint32_t height, uint32_t left, uint32_t top); + + void Flush(); - void destroy(SwapChainPtr handle) override { - std::lock_guard lock(mutex); - current = nullptr; - std::cout << "Destroyed swap chain" << std::endl; - } - - VkResult present(SwapChainPtr handle, uint32_t index, VkSemaphore finishedDrawing) override { - auto result = filament::backend::VulkanPlatform::present(handle, index, finishedDrawing); - currentColorIndex = index; - return result; - } - SwapChainPtr current; - std::mutex mutex; - uint32_t currentColorIndex = 0; - - private: - filament::backend::VulkanPlatform::Customization _customization; - -}; - -class EMSCRIPTEN_KEEPALIVE ThermionVulkanContext { -public: - ThermionVulkanContext(); - void* GetSharedContext(); - HANDLE CreateRenderingSurface(uint32_t width, uint32_t height, uint32_t left, uint32_t top); - void DestroyRenderingSurface(HANDLE handle); - void ResizeRenderingSurface(uint32_t width, uint32_t height, uint32_t left, uint32_t top); - void Flush(); - - filament::backend::VulkanPlatform *GetPlatform() { - return _platform; - } - - void BlitFromSwapchain(); - - void readPixelsFromImage( - uint32_t width, - uint32_t height, - std::vector& outPixels - ); - - -private: - VkInstance instance = VK_NULL_HANDLE; - VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; - VkDevice device = VK_NULL_HANDLE; - VkCommandPool commandPool = VK_NULL_HANDLE; - VkQueue queue = VK_NULL_HANDLE; - - std::unique_ptr _d3dContext; - - std::vector> _d3dTextures; - std::vector> _vulkanTextures; - - TVulkanPlatform *_platform; -}; + filament::backend::VulkanPlatform *GetPlatform(); + + void BlitFromSwapchain(); + + void readPixelsFromImage( + uint32_t width, + uint32_t height, + std::vector& outPixels); + + private: + class Impl; + std::unique_ptr pImpl; + }; } diff --git a/thermion_dart/native/include/windows/vulkan/vulkan_platform.h b/thermion_dart/native/include/windows/vulkan/vulkan_platform.h new file mode 100644 index 00000000..9dfcc2d0 --- /dev/null +++ b/thermion_dart/native/include/windows/vulkan/vulkan_platform.h @@ -0,0 +1,49 @@ +#pragma once + +#include "d3d_context.h" +#include "vulkan_texture.h" +#include "utils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "filament/backend/Platform.h" +#include "filament/backend/platforms/VulkanPlatform.h" + +#include "import.h" + +namespace thermion::windows::vulkan { + +class TVulkanPlatform : public filament::backend::VulkanPlatform { + public: + + TVulkanPlatform(); + ~TVulkanPlatform(); + + virtual VulkanPlatform::Customization getCustomization() const noexcept; + + SwapChainPtr createSwapChain(void* nativeWindow, uint64_t flags, + VkExtent2D extent = {0, 0}) override; + + void destroy(SwapChainPtr handle) override; + + VkResult present(SwapChainPtr handle, uint32_t index, VkSemaphore finishedDrawing) override; + + SwapChainPtr current; + std::mutex mutex; + uint32_t currentColorIndex = 0; + + private: + filament::backend::VulkanPlatform::Customization _customization; + + }; +} \ No newline at end of file diff --git a/thermion_dart/native/include/windows/vulkan/vulkan_texture.h b/thermion_dart/native/include/windows/vulkan/vulkan_texture.h index 9d481ece..f841334e 100644 --- a/thermion_dart/native/include/windows/vulkan/vulkan_texture.h +++ b/thermion_dart/native/include/windows/vulkan/vulkan_texture.h @@ -1,3 +1,5 @@ +#pragma once + #include #include #include "bluevk/BlueVK.h" @@ -8,7 +10,7 @@ namespace thermion::windows::vulkan { typedef void *HANDLE; -class EMSCRIPTEN_KEEPALIVE VulkanTexture { +class DLL_EXPORT VulkanTexture { public: VulkanTexture(VkImage image, VkDevice device, VkDeviceMemory imageMemory, uint32_t width, uint32_t height, HANDLE d3dTextureHandle); ~VulkanTexture();