19template <
typename TBase,
typename T>
21 std::is_base_of_v<TBase, T>
22 && !std::is_abstract_v<T>;
28 || std::is_same_v<T, nullptr_t>;
34 || std::is_same_v<T, nullptr_t>;
79template<
template<
auto,
typename...>
typename TTemplate,
auto InImplType,
typename... TParams>
83 TTemplate<InImplType, TParams...>,
84 TD3D12BarriersFactoryEntry<InImplType, TParams...>
132 template <
typename TFirst,
typename...>
133 struct TGetFirstTypeInPack {
using Type =
TFirst; };
136 static constexpr uint32 MinimumFactoryEntries = 2u;
139 template <CD3D12BarriersForAdapterImpl TAdapterImpl, CD3D12BarriersForContextImpl TContextImpl>
144 (
sizeof...(TFactoryEntries) > MinimumFactoryEntries),
146 typename TGetFirstTypeInPack<
TFactoryEntries...>::Type::AdapterImplType>;
150 (
sizeof...(TFactoryEntries) > MinimumFactoryEntries),
152 typename TGetFirstTypeInPack<
TFactoryEntries...>::Type::ContextImplType>;
177 template <EComponentType InCompType>
178 struct CreateBarriersInternalReturnType {
using Type =
nullptr_t; };
189 static CreateBarriersInternalReturnType<InComponentType>::Type* CreateBarriersInternal(
195 if constexpr (
sizeof...(TRest) == 1)
199 return new TFirst::AdapterImplType();
203 return new TFirst::ContextImplType();
210 return new TFirst::AdapterImplType();
214 return new TFirst::ContextImplType();
223 template <
typename T,
typename TFirst,
typename...
TRest>
224 static consteval bool CheckThatLastTypeInPackIs()
226 if constexpr (
sizeof...(TRest) == 0)
228 return std::is_same_v<TFirst, T>;
232 return CheckThatLastTypeInPackIs<T,
TRest...>();
237 static consteval bool CheckThatNoImplTypeAppearsMoreThanOnce(
240 if constexpr (
sizeof...(TRest) == 0)
251 return CheckThatNoImplTypeAppearsMoreThanOnce<
TRest...>(
SeenTypes);
257 "List of barrier implementations must end with FNullD3D12BarriersFactoryEntry!");
259 static_assert(
sizeof...(TFactoryEntries) >= MinimumFactoryEntries,
260 "No list of barrier implementations provided!");
264 "More than one implementation for a given type is provided. "
265 "TD3D12BarriersFactory will always pick the first implementation of a given type!");
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TD3D12BarriersFactoryEntry< ED3D12BarrierImplementationType::Invalid, nullptr_t, nullptr_t > FNullD3D12BarriersFactoryEntry
Definition D3D12BarriersFactory.h:56
ED3D12BarrierImplementationType
Definition D3D12BarriersFactory.h:12
Definition ID3D12Barriers.h:49
Definition ID3D12Barriers.h:96
Definition D3D12BarriersFactory.h:130
std::conditional_t<(sizeof...(TFactoryEntries) > MinimumFactoryEntries), ID3D12BarriersForAdapter, typename TGetFirstTypeInPack< TFactoryEntries... >::Type::AdapterImplType > BarriersForAdapterType
Definition D3D12BarriersFactory.h:146
std::conditional_t<(sizeof...(TFactoryEntries) > MinimumFactoryEntries), ID3D12BarriersForContext, typename TGetFirstTypeInPack< TFactoryEntries... >::Type::ContextImplType > BarriersForContextType
Definition D3D12BarriersFactory.h:152
static BarriersForContextType * CreateBarriersForContext(ED3D12BarrierImplementationType PreferredType)
Definition D3D12BarriersFactory.h:162
static BarriersForAdapterType * CreateBarriersForAdapter(ED3D12BarrierImplementationType PreferredType)
Definition D3D12BarriersFactory.h:155
Definition StaticArray.h:26
Definition D3D12BarriersFactory.h:92
Definition D3D12BarriersFactory.h:26
Definition D3D12BarriersFactory.h:32
Definition D3D12BarriersFactory.h:20
Definition AnimTypes.h:802
Type
Definition PawnAction_Move.h:11
Definition D3D12BarriersFactory.h:52
Definition D3D12BarriersFactory.h:42
static constexpr ED3D12BarrierImplementationType ImplType
Definition D3D12BarriersFactory.h:43
TAdapterImpl AdapterImplType
Definition D3D12BarriersFactory.h:44
TContextImpl ContextImplType
Definition D3D12BarriersFactory.h:45
Definition D3D12BarriersFactory.h:77