Skip to content

Commit ce4894a

Browse files
RenderStateCacheImpl: updated SerializedPsoCIWrapper
1 parent 4247443 commit ce4894a

File tree

1 file changed

+40
-63
lines changed

1 file changed

+40
-63
lines changed

Graphics/GraphicsTools/src/RenderStateCacheImpl.cpp

Lines changed: 40 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -452,61 +452,6 @@ bool RenderStateCacheImpl::CreateShaderInternal(const ShaderCreateInfo& ShaderCI
452452
return false;
453453
}
454454

455-
template <typename HandlerType>
456-
void ProcessPsoCreateInfoShaders(GraphicsPipelineStateCreateInfo& CI, HandlerType&& Handler)
457-
{
458-
Handler(CI.pVS);
459-
Handler(CI.pPS);
460-
Handler(CI.pDS);
461-
Handler(CI.pHS);
462-
Handler(CI.pGS);
463-
Handler(CI.pAS);
464-
Handler(CI.pMS);
465-
}
466-
467-
template <typename HandlerType>
468-
void ProcessPsoCreateInfoShaders(ComputePipelineStateCreateInfo& CI, HandlerType&& Handler)
469-
{
470-
Handler(CI.pCS);
471-
}
472-
473-
template <typename HandlerType>
474-
void ProcessPsoCreateInfoShaders(TilePipelineStateCreateInfo& CI, HandlerType&& Handler)
475-
{
476-
Handler(CI.pTS);
477-
}
478-
479-
template <typename HandlerType>
480-
void ProcessPsoCreateInfoShaders(RayTracingPipelineStateCreateInfo& CI, HandlerType&& Handler)
481-
{
482-
}
483-
484-
template <typename HandlerType>
485-
void ProcessRtPsoCreateInfoShaders(
486-
std::vector<RayTracingGeneralShaderGroup>& pGeneralShaders,
487-
std::vector<RayTracingTriangleHitShaderGroup>& pTriangleHitShaders,
488-
std::vector<RayTracingProceduralHitShaderGroup>& pProceduralHitShaders,
489-
HandlerType&& Handler)
490-
{
491-
for (auto& GeneralShader : pGeneralShaders)
492-
{
493-
Handler(GeneralShader.pShader);
494-
}
495-
496-
for (auto& TriHitShader : pTriangleHitShaders)
497-
{
498-
Handler(TriHitShader.pAnyHitShader);
499-
Handler(TriHitShader.pClosestHitShader);
500-
}
501-
502-
for (auto& ProcHitShader : pProceduralHitShaders)
503-
{
504-
Handler(ProcHitShader.pAnyHitShader);
505-
Handler(ProcHitShader.pClosestHitShader);
506-
Handler(ProcHitShader.pIntersectionShader);
507-
}
508-
}
509-
510455
template <typename CreateInfoType>
511456
struct RenderStateCacheImpl::SerializedPsoCIWrapperBase
512457
{
@@ -543,10 +488,7 @@ struct RenderStateCacheImpl::SerializedPsoCIWrapperBase
543488
SerializedObjects.emplace_back(std::move(pSerializedSign));
544489
}
545490

546-
ProcessPsoCreateInfoShaders(CI,
547-
[&](IShader*& pShader) {
548-
SerializeShader(pSerializationDevice, DeviceType, pShader);
549-
});
491+
ConvertShadersToSerialized<>(pSerializationDevice, DeviceType);
550492
}
551493

552494
SerializedPsoCIWrapperBase(const SerializedPsoCIWrapperBase&) = delete;
@@ -565,6 +507,28 @@ struct RenderStateCacheImpl::SerializedPsoCIWrapperBase
565507
return CI;
566508
}
567509

510+
511+
private:
512+
template <typename CIType = CreateInfoType>
513+
typename std::enable_if<
514+
std::is_same<CIType, GraphicsPipelineStateCreateInfo>::value ||
515+
std::is_same<CIType, ComputePipelineStateCreateInfo>::value ||
516+
std::is_same<CIType, TilePipelineStateCreateInfo>::value>::type
517+
ConvertShadersToSerialized(ISerializationDevice* pSerializationDevice, RENDER_DEVICE_TYPE DeviceType)
518+
{
519+
ProcessPipelineStateCreateInfoShaders(CI,
520+
[&](IShader*& pShader) {
521+
SerializeShader(pSerializationDevice, DeviceType, pShader);
522+
});
523+
}
524+
525+
template <typename CIType = CreateInfoType>
526+
typename std::enable_if<std::is_same<CIType, RayTracingPipelineStateCreateInfo>::value>::type
527+
ConvertShadersToSerialized(ISerializationDevice* pSerializationDevice, RENDER_DEVICE_TYPE DeviceType)
528+
{
529+
// Handled in SerializedPsoCIWrapper<RayTracingPipelineStateCreateInfo>
530+
}
531+
568532
protected:
569533
// Replaces shader with a serialized shader
570534
void SerializeShader(ISerializationDevice* pSerializationDevice, RENDER_DEVICE_TYPE DeviceType, IShader*& pShader)
@@ -683,10 +647,23 @@ struct RenderStateCacheImpl::SerializedPsoCIWrapper<RayTracingPipelineStateCreat
683647
CI.pTriangleHitShaders = pTriangleHitShaders.data();
684648
CI.pProceduralHitShaders = pProceduralHitShaders.data();
685649

686-
ProcessRtPsoCreateInfoShaders(pGeneralShaders, pTriangleHitShaders, pProceduralHitShaders,
687-
[&](IShader*& pShader) {
688-
SerializeShader(pSerializationDevice, DeviceType, pShader);
689-
});
650+
for (RayTracingGeneralShaderGroup& GeneralShader : pGeneralShaders)
651+
{
652+
SerializeShader(pSerializationDevice, DeviceType, GeneralShader.pShader);
653+
}
654+
655+
for (RayTracingTriangleHitShaderGroup& TriHitShader : pTriangleHitShaders)
656+
{
657+
SerializeShader(pSerializationDevice, DeviceType, TriHitShader.pAnyHitShader);
658+
SerializeShader(pSerializationDevice, DeviceType, TriHitShader.pClosestHitShader);
659+
}
660+
661+
for (RayTracingProceduralHitShaderGroup& ProcHitShader : pProceduralHitShaders)
662+
{
663+
SerializeShader(pSerializationDevice, DeviceType, ProcHitShader.pAnyHitShader);
664+
SerializeShader(pSerializationDevice, DeviceType, ProcHitShader.pClosestHitShader);
665+
SerializeShader(pSerializationDevice, DeviceType, ProcHitShader.pIntersectionShader);
666+
}
690667
}
691668

692669
private:

0 commit comments

Comments
 (0)