From f3db428efac051ff89bed1703d3c2ab3d3a69ffb Mon Sep 17 00:00:00 2001 From: assiduous Date: Tue, 28 Jan 2020 10:55:06 -0800 Subject: Implemented IShaderD3D C interface. Closed https://github.com/DiligentGraphics/DiligentCore/issues/55 --- .../GraphicsEngineD3D11/interface/ShaderD3D11.h | 1 + .../GraphicsEngineD3D12/interface/ShaderD3D12.h | 1 + .../GraphicsEngineD3DBase/interface/ShaderD3D.h | 37 +++++++++++++++++++--- .../GraphicsEngineD3DBase/ShaderD3DH_test.c | 33 +++++++++++++++++++ 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 Tests/IncludeTest/GraphicsEngineD3DBase/ShaderD3DH_test.c diff --git a/Graphics/GraphicsEngineD3D11/interface/ShaderD3D11.h b/Graphics/GraphicsEngineD3D11/interface/ShaderD3D11.h index 29d8345d..4a68af4a 100644 --- a/Graphics/GraphicsEngineD3D11/interface/ShaderD3D11.h +++ b/Graphics/GraphicsEngineD3D11/interface/ShaderD3D11.h @@ -60,6 +60,7 @@ struct IShaderD3D11Vtbl struct IObjectMethods Object; struct IDeviceObjectMethods DeviceObject; struct IShaderMethods Shader; + struct IShaderD3DMethods ShaderD3D; struct IShaderD3D11Methods ShaderD3D11; }; diff --git a/Graphics/GraphicsEngineD3D12/interface/ShaderD3D12.h b/Graphics/GraphicsEngineD3D12/interface/ShaderD3D12.h index 65c8e32f..2027e0cd 100644 --- a/Graphics/GraphicsEngineD3D12/interface/ShaderD3D12.h +++ b/Graphics/GraphicsEngineD3D12/interface/ShaderD3D12.h @@ -63,6 +63,7 @@ struct IShaderD3D12Vtbl struct IObjectMethods Object; struct IDeviceObjectMethods DeviceObject; struct IShaderMethods Shader; + struct IShaderD3DMethods ShaderD3D; //struct IShaderD3D12Methods ShaderD3D12; }; diff --git a/Graphics/GraphicsEngineD3DBase/interface/ShaderD3D.h b/Graphics/GraphicsEngineD3DBase/interface/ShaderD3D.h index f64ba232..b5ef72b9 100644 --- a/Graphics/GraphicsEngineD3DBase/interface/ShaderD3D.h +++ b/Graphics/GraphicsEngineD3DBase/interface/ShaderD3D.h @@ -47,20 +47,47 @@ struct HLSLShaderResourceDesc DILIGENT_DERIVE(ShaderResourceDesc) Uint32 ShaderRegister DEFAULT_INITIALIZER(0); }; +typedef struct HLSLShaderResourceDesc HLSLShaderResourceDesc; // clang-format on -#if DILIGENT_CPP_INTERFACE +#define DILIGENT_INTERFACE_NAME IShaderD3D +#include "../../../Primitives/interface/DefineInterfaceHelperMacros.h" + +// clang-format off /// Exposes Direct3D-specific functionality of a shader object. -class IShaderD3D : public IShader +DILIGENT_INTERFACE(IShaderD3D, IShader) { -public: /// Returns HLSL shader resource description - virtual void GetHLSLResource(Uint32 Index, HLSLShaderResourceDesc& ResourceDesc) const = 0; + VIRTUAL void METHOD(GetHLSLResource)(THIS_ + Uint32 Index, + HLSLShaderResourceDesc REF ResourceDesc) CONST PURE; }; -#else +#include "../../../Primitives/interface/UndefInterfaceHelperMacros.h" + +#if DILIGENT_C_INTERFACE + +// clang-format on + +struct IShaderD3DVtbl +{ + struct IObjectMethods Object; + struct IDeviceObjectMethods DeviceObject; + struct IShaderD3DMethods ShaderD3D; +}; + +typedef struct IShaderD3D +{ + struct IShaderD3DVtbl* pVtbl; +} IShaderD3D; + +// clang-format off + +# define IShaderD3D_GetHLSLResource(This, ...) CALL_IFACE_METHOD(ShaderD3D, GetHLSLResource, This, __VA_ARGS__) + +// clang-format on #endif diff --git a/Tests/IncludeTest/GraphicsEngineD3DBase/ShaderD3DH_test.c b/Tests/IncludeTest/GraphicsEngineD3DBase/ShaderD3DH_test.c new file mode 100644 index 00000000..0b4b06b4 --- /dev/null +++ b/Tests/IncludeTest/GraphicsEngineD3DBase/ShaderD3DH_test.c @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2020 Diligent Graphics LLC + * Copyright 2015-2019 Egor Yusov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * In no event and under no legal theory, whether in tort (including negligence), + * contract, or otherwise, unless required by applicable law (such as deliberate + * and grossly negligent acts) or agreed to in writing, shall any Contributor be + * liable for any damages, including any direct, indirect, special, incidental, + * or consequential damages of any character arising as a result of this License or + * out of the use or inability to use the software (including but not limited to damages + * for loss of goodwill, work stoppage, computer failure or malfunction, or any and + * all other commercial damages or losses), even if such Contributor has been advised + * of the possibility of such damages. + */ + +#include "DiligentCore/Graphics/GraphicsEngineD3DBase/interface/ShaderD3D.h" + +void TestShaderD3D_CInterface(IShaderD3D* pShaderD3D) +{ + IShaderD3D_GetHLSLResource(pShaderD3D, 0, (HLSLShaderResourceDesc*)NULL); +} -- cgit v1.2.3