From aff3c611e2cc82215a3f14e5dee0e8bd9c94a922 Mon Sep 17 00:00:00 2001 From: assiduous Date: Sat, 25 Jan 2020 21:31:33 -0800 Subject: Fixed SRB c interface; added test. --- .../interface/ShaderResourceBinding.h | 41 ++++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'Graphics/GraphicsEngine') diff --git a/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h b/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h index 212680b0..931855d1 100644 --- a/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h +++ b/Graphics/GraphicsEngine/interface/ShaderResourceBinding.h @@ -121,29 +121,40 @@ class IPipelineState; struct IShaderResourceBinding; // clang-format off -struct IShaderResourceBindingVtbl + +struct IShaderResourceBindingMethods { - class IPipelineState* (*GetPipelineState)(); - void (*BindResources)(Uint32 ShaderFlags, class IResourceMapping* pResMapping, Uint32 Flags); - class IShaderResourceVariable* (*GetVariableByName)(SHADER_TYPE ShaderType, const char* Name); - Uint32 (*GetVariableCount)(SHADER_TYPE ShaderType); - class IShaderResourceVariable* (*GetVariableByIndex)(SHADER_TYPE ShaderType, Uint32 Index); - void (*InitializeStaticResources)(const class IPipelineState* pPipelineState); + class IPipelineState* (*GetPipelineState) (struct IShaderResourceBinding*); + void (*BindResources) (struct IShaderResourceBinding*, Uint32 ShaderFlags, class IResourceMapping* pResMapping, Uint32 Flags); + class IShaderResourceVariable* (*GetVariableByName) (struct IShaderResourceBinding*, SHADER_TYPE ShaderType, const char* Name); + Uint32 (*GetVariableCount) (struct IShaderResourceBinding*, SHADER_TYPE ShaderType); + class IShaderResourceVariable* (*GetVariableByIndex) (struct IShaderResourceBinding*, SHADER_TYPE ShaderType, Uint32 Index); + void (*InitializeStaticResources)(struct IShaderResourceBinding*, const class IPipelineState* pPipelineState); }; + // clang-format on +struct IShaderResourceBindingVtbl +{ + struct IObjectMethods Object; + struct IShaderResourceBindingMethods ShaderResourceBinding; +}; + struct IShaderResourceBinding { - struct IObjectVtbl* pObjectVtbl; - struct IShaderResourceBinding* pShaderResourceBindingVtbl; + struct IShaderResourceBindingVtbl* pVtbl; }; -# define IShaderResourceBinding_GetPipelineState(This) (This)->pShaderResourceBindingVtbl->GetPipelineState(This) -# define IShaderResourceBinding_BindResources(This, ...) (This)->pShaderResourceBindingVtbl->BindResources(This, __VA_ARGS__) -# define IShaderResourceBinding_GetVariableByName(This, ...) (This)->pShaderResourceBindingVtbl->GetVariableByName(This, __VA_ARGS__) -# define IShaderResourceBinding_GetVariableCount(This, ...) (This)->pShaderResourceBindingVtbl->GetVariableCount(This, __VA_ARGS__) -# define IShaderResourceBinding_GetVariableByIndex(This, ...) (This)->pShaderResourceBindingVtbl->GetVariableByIndex(This, __VA_ARGS__) -# define IShaderResourceBinding_InitializeStaticResources(This, ...) (This)->pShaderResourceBindingVtbl->InitializeStaticResources(This, __VA_ARGS__) +// clang-format off + +# define IShaderResourceBinding_GetPipelineState(This) (This)->pVtbl->ShaderResourceBinding.GetPipelineState ((struct IShaderResourceBinding*)(This)) +# define IShaderResourceBinding_BindResources(This, ...) (This)->pVtbl->ShaderResourceBinding.BindResources ((struct IShaderResourceBinding*)(This), __VA_ARGS__) +# define IShaderResourceBinding_GetVariableByName(This, ...) (This)->pVtbl->ShaderResourceBinding.GetVariableByName ((struct IShaderResourceBinding*)(This), __VA_ARGS__) +# define IShaderResourceBinding_GetVariableCount(This, ...) (This)->pVtbl->ShaderResourceBinding.GetVariableCount ((struct IShaderResourceBinding*)(This), __VA_ARGS__) +# define IShaderResourceBinding_GetVariableByIndex(This, ...) (This)->pVtbl->ShaderResourceBinding.GetVariableByIndex ((struct IShaderResourceBinding*)(This), __VA_ARGS__) +# define IShaderResourceBinding_InitializeStaticResources(This, ...) (This)->pVtbl->ShaderResourceBinding.InitializeStaticResources((struct IShaderResourceBinding*)(This), __VA_ARGS__) + +// clang-format on #endif -- cgit v1.2.3