Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
ComputeSystemVK.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2025 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
8
9#ifdef JPH_USE_VK
10
12
14
17class JPH_EXPORT ComputeSystemVK : public ComputeSystem
18{
19public:
21
22 // Initialize / shutdown the compute system
23 bool Initialize(VkPhysicalDevice inPhysicalDevice, PFN_vkGetDeviceProcAddr inVkGetDeviceProcAddr, VkDevice inDevice, uint32 inComputeQueueIndex, ComputeSystemResult &outResult);
24 void Shutdown();
25
26 // See: ComputeSystem
27 virtual ComputeShaderResult CreateComputeShader(const char *inName, uint32 inGroupSizeX, uint32 inGroupSizeY, uint32 inGroupSizeZ) override;
28 virtual ComputeBufferResult CreateComputeBuffer(ComputeBuffer::EType inType, uint64 inSize, uint inStride, const void *inData = nullptr) override;
29 virtual ComputeQueueResult CreateComputeQueue() override;
30
32 VkDevice GetDevice() const { return mDevice; }
33
35 virtual bool CreateBuffer(VkDeviceSize inSize, VkBufferUsageFlags inUsage, VkMemoryPropertyFlags inProperties, BufferVK &outBuffer) = 0;
36 virtual void FreeBuffer(BufferVK &ioBuffer) = 0;
37 virtual void * MapBuffer(BufferVK &ioBuffer) = 0;
38 virtual void UnmapBuffer(BufferVK &ioBuffer) = 0;
39
40 // Vulkan device function pointers
41 PFN_vkAllocateCommandBuffers mVkAllocateCommandBuffers = nullptr;
42 PFN_vkAllocateDescriptorSets mVkAllocateDescriptorSets = nullptr;
43 PFN_vkAllocateMemory mVkAllocateMemory = nullptr;
44 PFN_vkBeginCommandBuffer mVkBeginCommandBuffer = nullptr;
45 PFN_vkBindBufferMemory mVkBindBufferMemory = nullptr;
46 PFN_vkCmdBindDescriptorSets mVkCmdBindDescriptorSets = nullptr;
47 PFN_vkCmdBindPipeline mVkCmdBindPipeline = nullptr;
48 PFN_vkCmdCopyBuffer mVkCmdCopyBuffer = nullptr;
49 PFN_vkCmdDispatch mVkCmdDispatch = nullptr;
50 PFN_vkCmdPipelineBarrier mVkCmdPipelineBarrier = nullptr;
51 PFN_vkCreateBuffer mVkCreateBuffer = nullptr;
52 PFN_vkCreateCommandPool mVkCreateCommandPool = nullptr;
53 PFN_vkCreateComputePipelines mVkCreateComputePipelines = nullptr;
54 PFN_vkCreateDescriptorPool mVkCreateDescriptorPool = nullptr;
55 PFN_vkCreateDescriptorSetLayout mVkCreateDescriptorSetLayout = nullptr;
56 PFN_vkCreateFence mVkCreateFence = nullptr;
57 PFN_vkCreatePipelineLayout mVkCreatePipelineLayout = nullptr;
58 PFN_vkCreateShaderModule mVkCreateShaderModule = nullptr;
59 PFN_vkDestroyBuffer mVkDestroyBuffer = nullptr;
60 PFN_vkDestroyCommandPool mVkDestroyCommandPool = nullptr;
61 PFN_vkDestroyDescriptorPool mVkDestroyDescriptorPool = nullptr;
62 PFN_vkDestroyDescriptorSetLayout mVkDestroyDescriptorSetLayout = nullptr;
63 PFN_vkDestroyDevice mVkDestroyDevice = nullptr;
64 PFN_vkDestroyFence mVkDestroyFence = nullptr;
65 PFN_vkDestroyPipeline mVkDestroyPipeline = nullptr;
66 PFN_vkDestroyPipelineLayout mVkDestroyPipelineLayout = nullptr;
67 PFN_vkDestroyShaderModule mVkDestroyShaderModule = nullptr;
68 PFN_vkDeviceWaitIdle mVkDeviceWaitIdle = nullptr;
69 PFN_vkEndCommandBuffer mVkEndCommandBuffer = nullptr;
70 PFN_vkFreeCommandBuffers mVkFreeCommandBuffers = nullptr;
71 PFN_vkFreeMemory mVkFreeMemory = nullptr;
72 PFN_vkGetBufferMemoryRequirements mVkGetBufferMemoryRequirements = nullptr;
73 PFN_vkGetDeviceQueue mVkGetDeviceQueue = nullptr;
74 PFN_vkMapMemory mVkMapMemory = nullptr;
75 PFN_vkQueueSubmit mVkQueueSubmit = nullptr;
76 PFN_vkResetCommandBuffer mVkResetCommandBuffer = nullptr;
77 PFN_vkResetDescriptorPool mVkResetDescriptorPool = nullptr;
78 PFN_vkResetFences mVkResetFences = nullptr;
79 PFN_vkSetDebugUtilsObjectNameEXT mVkSetDebugUtilsObjectNameEXT = nullptr;
80 PFN_vkUnmapMemory mVkUnmapMemory = nullptr;
81 PFN_vkUpdateDescriptorSets mVkUpdateDescriptorSets = nullptr;
82 PFN_vkWaitForFences mVkWaitForFences = nullptr;
83
84protected:
86 virtual bool InitializeMemory() = 0;
87 virtual void ShutdownMemory() = 0;
88
89 VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE;
90 VkDevice mDevice = VK_NULL_HANDLE;
91 uint32 mComputeQueueIndex = 0;
92
93private:
94 // Buffer that can be bound when we have no buffer
95 BufferVK mDummyBuffer;
96};
97
99
100#endif // JPH_USE_VK
#define JPH_EXPORT
Definition Core.h:278
std::uint64_t uint64
Definition Core.h:510
unsigned int uint
Definition Core.h:505
#define JPH_NAMESPACE_END
Definition Core.h:428
std::uint32_t uint32
Definition Core.h:508
#define JPH_NAMESPACE_BEGIN
Definition Core.h:422
#define JPH_DECLARE_RTTI_ABSTRACT(linkage, class_name)
Definition RTTI.h:274
Simple wrapper class to manage a Vulkan buffer.
Definition BufferVK.h:34
EType
Type of buffer.
Definition ComputeBuffer.h:24
Interface to run a workload on the GPU.
Definition ComputeSystem.h:16
virtual ComputeQueueResult CreateComputeQueue()=0
Create a queue for executing compute shaders.
virtual ComputeBufferResult CreateComputeBuffer(ComputeBuffer::EType inType, uint64 inSize, uint inStride, const void *inData=nullptr)=0
Create a buffer for use with a compute shader.
virtual ComputeShaderResult CreateComputeShader(const char *inName, uint32 inGroupSizeX, uint32 inGroupSizeY=1, uint32 inGroupSizeZ=1)=0
Compile a compute shader.
Helper class that either contains a valid result or an error.
Definition Result.h:12