// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics) // SPDX-FileCopyrightText: 2025 Jorrit Rouwe // SPDX-License-Identifier: MIT #pragma once #ifdef JPH_USE_DX12 #include #include #include JPH_NAMESPACE_BEGIN /// Compute shader handle for DirectX class JPH_EXPORT ComputeShaderDX12 : public ComputeShader { public: JPH_OVERRIDE_NEW_DELETE /// Constructor ComputeShaderDX12(ComPtr inShader, ComPtr inRootSignature, ComPtr inPipelineState, Array &&inBindingNames, UnorderedMap &&inNameToIndex, uint32 inGroupSizeX, uint32 inGroupSizeY, uint32 inGroupSizeZ) : ComputeShader(inGroupSizeX, inGroupSizeY, inGroupSizeZ), mShader(inShader), mRootSignature(inRootSignature), mPipelineState(inPipelineState), mBindingNames(std::move(inBindingNames)), mNameToIndex(std::move(inNameToIndex)) { } /// Get index of shader parameter uint NameToIndex(const char *inName) const { UnorderedMap::const_iterator it = mNameToIndex.find(inName); JPH_ASSERT(it != mNameToIndex.end()); return it->second; } /// Getters ID3D12PipelineState * GetPipelineState() const { return mPipelineState.Get(); } ID3D12RootSignature * GetRootSignature() const { return mRootSignature.Get(); } private: ComPtr mShader; ///< The compiled shader ComPtr mRootSignature; ///< The root signature for this shader ComPtr mPipelineState; ///< The pipeline state object for this shader Array mBindingNames; ///< A list of binding names, mNameToIndex points to these strings UnorderedMap mNameToIndex; ///< Maps names to indices for the shader parameters, using a string_view so we can do find() without an allocation }; JPH_NAMESPACE_END #endif // JPH_USE_DX12