/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/ThirdParty/Jolt/Compute/VK/ComputeSystemVK.h
100 строк
4 KB
Jan Krassnigg
Updated Jolt (#1921)
28 апр 2026, 12:24
Не верифицирован
28 апр 2026, 12:24
600d1da
Код
Авторство
О чём код?
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics) // SPDX-FileCopyrightText: 2025 Jorrit Rouwe // SPDX-License-Identifier: MIT #pragma once #include <Jolt/Compute/ComputeSystem.h> #ifdef JPH_USE_VK #include <Jolt/Compute/VK/ComputeQueueVK.h> JPH_NAMESPACE_BEGIN /// Interface to run a workload on the GPU using Vulkan. /// Minimal implementation that can integrate with your own Vulkan setup. class JPH_EXPORT ComputeSystemVK : public ComputeSystem { public: JPH_DECLARE_RTTI_ABSTRACT(JPH_EXPORT, ComputeSystemVK) // Initialize / shutdown the compute system bool Initialize(VkPhysicalDevice inPhysicalDevice, PFN_vkGetDeviceProcAddr inVkGetDeviceProcAddr, VkDevice inDevice, uint32 inComputeQueueIndex, ComputeSystemResult &outResult); void Shutdown(); // See: ComputeSystem virtual ComputeShaderResult CreateComputeShader(const char *inName, uint32 inGroupSizeX, uint32 inGroupSizeY, uint32 inGroupSizeZ) override; virtual ComputeBufferResult CreateComputeBuffer(ComputeBuffer::EType inType, uint64 inSize, uint inStride, const void *inData = nullptr) override; virtual ComputeQueueResult CreateComputeQueue() override; /// Access to the Vulkan device VkDevice GetDevice() const { return mDevice; } /// Allow the application to override buffer creation and memory mapping in case it uses its own allocator virtual bool CreateBuffer(VkDeviceSize inSize, VkBufferUsageFlags inUsage, VkMemoryPropertyFlags inProperties, BufferVK &outBuffer) = 0; virtual void FreeBuffer(BufferVK &ioBuffer) = 0; virtual void * MapBuffer(BufferVK &ioBuffer) = 0; virtual void UnmapBuffer(BufferVK &ioBuffer) = 0; // Vulkan device function pointers PFN_vkAllocateCommandBuffers mVkAllocateCommandBuffers = nullptr; PFN_vkAllocateDescriptorSets mVkAllocateDescriptorSets = nullptr; PFN_vkAllocateMemory mVkAllocateMemory = nullptr; PFN_vkBeginCommandBuffer mVkBeginCommandBuffer = nullptr; PFN_vkBindBufferMemory mVkBindBufferMemory = nullptr; PFN_vkCmdBindDescriptorSets mVkCmdBindDescriptorSets = nullptr; PFN_vkCmdBindPipeline mVkCmdBindPipeline = nullptr; PFN_vkCmdCopyBuffer mVkCmdCopyBuffer = nullptr; PFN_vkCmdDispatch mVkCmdDispatch = nullptr; PFN_vkCmdPipelineBarrier mVkCmdPipelineBarrier = nullptr; PFN_vkCreateBuffer mVkCreateBuffer = nullptr; PFN_vkCreateCommandPool mVkCreateCommandPool = nullptr; PFN_vkCreateComputePipelines mVkCreateComputePipelines = nullptr; PFN_vkCreateDescriptorPool mVkCreateDescriptorPool = nullptr; PFN_vkCreateDescriptorSetLayout mVkCreateDescriptorSetLayout = nullptr; PFN_vkCreateFence mVkCreateFence = nullptr; PFN_vkCreatePipelineLayout mVkCreatePipelineLayout = nullptr; PFN_vkCreateShaderModule mVkCreateShaderModule = nullptr; PFN_vkDestroyBuffer mVkDestroyBuffer = nullptr; PFN_vkDestroyCommandPool mVkDestroyCommandPool = nullptr; PFN_vkDestroyDescriptorPool mVkDestroyDescriptorPool = nullptr; PFN_vkDestroyDescriptorSetLayout mVkDestroyDescriptorSetLayout = nullptr; PFN_vkDestroyDevice mVkDestroyDevice = nullptr; PFN_vkDestroyFence mVkDestroyFence = nullptr; PFN_vkDestroyPipeline mVkDestroyPipeline = nullptr; PFN_vkDestroyPipelineLayout mVkDestroyPipelineLayout = nullptr; PFN_vkDestroyShaderModule mVkDestroyShaderModule = nullptr; PFN_vkDeviceWaitIdle mVkDeviceWaitIdle = nullptr; PFN_vkEndCommandBuffer mVkEndCommandBuffer = nullptr; PFN_vkFreeCommandBuffers mVkFreeCommandBuffers = nullptr; PFN_vkFreeMemory mVkFreeMemory = nullptr; PFN_vkGetBufferMemoryRequirements mVkGetBufferMemoryRequirements = nullptr; PFN_vkGetDeviceQueue mVkGetDeviceQueue = nullptr; PFN_vkMapMemory mVkMapMemory = nullptr; PFN_vkQueueSubmit mVkQueueSubmit = nullptr; PFN_vkResetCommandBuffer mVkResetCommandBuffer = nullptr; PFN_vkResetDescriptorPool mVkResetDescriptorPool = nullptr; PFN_vkResetFences mVkResetFences = nullptr; PFN_vkSetDebugUtilsObjectNameEXT mVkSetDebugUtilsObjectNameEXT = nullptr; PFN_vkUnmapMemory mVkUnmapMemory = nullptr; PFN_vkUpdateDescriptorSets mVkUpdateDescriptorSets = nullptr; PFN_vkWaitForFences mVkWaitForFences = nullptr; protected: /// Initialize / shutdown the memory subsystem virtual bool InitializeMemory() = 0; virtual void ShutdownMemory() = 0; VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE; VkDevice mDevice = VK_NULL_HANDLE; uint32 mComputeQueueIndex = 0; private: // Buffer that can be bound when we have no buffer BufferVK mDummyBuffer; }; JPH_NAMESPACE_END #endif // JPH_USE_VK