@@ -175,6 +175,10 @@ struct PSVRuntimeInfo3 : public PSVRuntimeInfo2 {
175175 uint32_t EntryFunctionName;
176176};
177177
178+ struct PSVRuntimeInfo4 : public PSVRuntimeInfo3 {
179+ uint32_t GroupSharedMemoryLimit;
180+ };
181+
178182enum class PSVResourceType {
179183 Invalid = 0 ,
180184
@@ -474,7 +478,7 @@ class PSVSignatureElement {
474478 const uint32_t *SemanticIndexes) const ;
475479};
476480
477- #define MAX_PSV_VERSION 3
481+ #define MAX_PSV_VERSION 4
478482
479483struct PSVInitInfo {
480484 PSVInitInfo (uint32_t psvVersion) : PSVVersion(psvVersion) {}
@@ -491,7 +495,7 @@ struct PSVInitInfo {
491495 uint8_t SigPatchConstOrPrimVectors = 0 ;
492496 uint8_t SigOutputVectors[PSV_GS_MAX_STREAMS] = {0 , 0 , 0 , 0 };
493497
494- static_assert (MAX_PSV_VERSION == 3 , " otherwise this needs updating." );
498+ static_assert (MAX_PSV_VERSION == 4 , " otherwise this needs updating." );
495499 uint32_t RuntimeInfoSize () const {
496500 switch (PSVVersion) {
497501 case 0 :
@@ -500,10 +504,12 @@ struct PSVInitInfo {
500504 return sizeof (PSVRuntimeInfo1);
501505 case 2 :
502506 return sizeof (PSVRuntimeInfo2);
507+ case 3 :
508+ return sizeof (PSVRuntimeInfo3);
503509 default :
504510 break ;
505511 }
506- return sizeof (PSVRuntimeInfo3 );
512+ return sizeof (PSVRuntimeInfo4 );
507513 }
508514 uint32_t ResourceBindInfoSize () const {
509515 if (PSVVersion < 2 )
@@ -519,6 +525,7 @@ class DxilPipelineStateValidation {
519525 PSVRuntimeInfo1 *m_pPSVRuntimeInfo1 = nullptr ;
520526 PSVRuntimeInfo2 *m_pPSVRuntimeInfo2 = nullptr ;
521527 PSVRuntimeInfo3 *m_pPSVRuntimeInfo3 = nullptr ;
528+ PSVRuntimeInfo4 *m_pPSVRuntimeInfo4 = nullptr ;
522529 uint32_t m_uResourceCount = 0 ;
523530 uint32_t m_uPSVResourceBindInfoSize = 0 ;
524531 void *m_pPSVResourceBindInfo = nullptr ;
@@ -634,6 +641,8 @@ class DxilPipelineStateValidation {
634641
635642 PSVRuntimeInfo3 *GetPSVRuntimeInfo3 () const { return m_pPSVRuntimeInfo3; }
636643
644+ PSVRuntimeInfo4 *GetPSVRuntimeInfo4 () const { return m_pPSVRuntimeInfo4; }
645+
637646 uint32_t GetBindCount () const { return m_uResourceCount; }
638647
639648 template <typename _T>
@@ -949,6 +958,8 @@ DxilPipelineStateValidation::ReadOrWrite(const void *pBits, uint32_t *pSize,
949958 m_uPSVRuntimeInfoSize); // failure ok
950959 AssignDerived (&m_pPSVRuntimeInfo3, m_pPSVRuntimeInfo0,
951960 m_uPSVRuntimeInfoSize); // failure ok
961+ AssignDerived (&m_pPSVRuntimeInfo4, m_pPSVRuntimeInfo0,
962+ m_uPSVRuntimeInfoSize); // failure ok
952963
953964 // In RWMode::CalcSize, use temp runtime info to hold needed values from
954965 // initInfo
@@ -1137,11 +1148,13 @@ void SetupPSVInitInfo(PSVInitInfo &InitInfo, const DxilModule &DM);
11371148void SetShaderProps (PSVRuntimeInfo0 *pInfo, const DxilModule &DM);
11381149void SetShaderProps (PSVRuntimeInfo1 *pInfo1, const DxilModule &DM);
11391150void SetShaderProps (PSVRuntimeInfo2 *pInfo2, const DxilModule &DM);
1151+ void SetShaderProps (PSVRuntimeInfo4 *pInfo4, const DxilModule &DM);
11401152
11411153void PrintPSVRuntimeInfo (llvm::raw_ostream &OS, PSVRuntimeInfo0 *pInfo0,
11421154 PSVRuntimeInfo1 *pInfo1, PSVRuntimeInfo2 *pInfo2,
1143- PSVRuntimeInfo3 *pInfo3, uint8_t ShaderKind,
1144- const char *EntryName, const char *Comment);
1155+ PSVRuntimeInfo3 *pInfo3, PSVRuntimeInfo4 *pInfo4,
1156+ uint8_t ShaderKind, const char *EntryName,
1157+ const char *Comment);
11451158
11461159} // namespace hlsl
11471160
0 commit comments