ComputeShaderVK.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Compute/ComputeShader.h>
  6. #ifdef JPH_USE_VK
  7. #include <Jolt/Compute/VK/IncludeVK.h>
  8. #include <Jolt/Core/UnorderedMap.h>
  9. JPH_NAMESPACE_BEGIN
  10. /// Compute shader handle for Vulkan
  11. class JPH_EXPORT ComputeShaderVK : public ComputeShader
  12. {
  13. public:
  14. JPH_OVERRIDE_NEW_DELETE
  15. /// Constructor / destructor
  16. ComputeShaderVK(VkDevice inDevice, uint32 inGroupSizeX, uint32 inGroupSizeY, uint32 inGroupSizeZ) : ComputeShader(inGroupSizeX, inGroupSizeY, inGroupSizeZ), mDevice(inDevice) { }
  17. virtual ~ComputeShaderVK() override;
  18. /// Initialize from SPIR-V code
  19. bool Initialize(const Array<uint8> &inSPVCode, VkBuffer inDummyBuffer, ComputeShaderResult &outResult);
  20. /// Get index of parameter in buffer infos
  21. uint32 NameToBufferInfoIndex(const char *inName) const;
  22. /// Getters
  23. VkPipeline GetPipeline() const { return mPipeline; }
  24. VkPipelineLayout GetPipelineLayout() const { return mPipelineLayout; }
  25. VkDescriptorSetLayout GetDescriptorSetLayout() const { return mDescriptorSetLayout; }
  26. const Array<VkDescriptorSetLayoutBinding> &GetLayoutBindings() const { return mLayoutBindings; }
  27. const Array<VkDescriptorBufferInfo> &GetBufferInfos() const { return mBufferInfos; }
  28. private:
  29. VkDevice mDevice;
  30. VkShaderModule mShaderModule = VK_NULL_HANDLE;
  31. VkPipelineLayout mPipelineLayout = VK_NULL_HANDLE;
  32. VkPipeline mPipeline = VK_NULL_HANDLE;
  33. VkDescriptorSetLayout mDescriptorSetLayout = VK_NULL_HANDLE;
  34. Array<String> mBindingNames; ///< A list of binding names, mNameToBufferInfoIndex points to these strings
  35. UnorderedMap<string_view, uint32> mNameToBufferInfoIndex; ///< Binding name to buffer index, using a string_view so we can do find() without an allocation
  36. Array<VkDescriptorSetLayoutBinding> mLayoutBindings;
  37. Array<VkDescriptorBufferInfo> mBufferInfos;
  38. };
  39. JPH_NAMESPACE_END
  40. #endif // JPH_USE_VK