diff options
| author | Yong He <yonghe@outlook.com> | 2022-02-25 20:49:31 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-25 20:49:31 -0800 |
| commit | c31577953d5041c82375c22d847c2eba06106c58 (patch) | |
| tree | bc685a8b63fc13cb85d160ae13df950056ca6e91 /source/slang/slang-type-layout.cpp | |
| parent | 8990d270e3a0c01b1f7abbf4f79556c5ef82a096 (diff) | |
Improved SCCP, inlining and resource specialization passes, legalize `ImageSubscript` for GLSL (#2146)
Diffstat (limited to 'source/slang/slang-type-layout.cpp')
| -rw-r--r-- | source/slang/slang-type-layout.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/source/slang/slang-type-layout.cpp b/source/slang/slang-type-layout.cpp index fe32c93b1..e59573cef 100644 --- a/source/slang/slang-type-layout.cpp +++ b/source/slang/slang-type-layout.cpp @@ -773,7 +773,7 @@ struct GLSLLayoutRulesFamilyImpl : LayoutRulesFamilyImpl virtual LayoutRulesImpl* getVaryingInputRules() override; virtual LayoutRulesImpl* getVaryingOutputRules() override; virtual LayoutRulesImpl* getSpecializationConstantRules() override; - virtual LayoutRulesImpl* getShaderStorageBufferRules() override; + virtual LayoutRulesImpl* getShaderStorageBufferRules(TargetRequest* request) override; virtual LayoutRulesImpl* getParameterBlockRules() override; LayoutRulesImpl* getRayPayloadParameterRules() override; @@ -794,7 +794,7 @@ struct HLSLLayoutRulesFamilyImpl : LayoutRulesFamilyImpl virtual LayoutRulesImpl* getVaryingInputRules() override; virtual LayoutRulesImpl* getVaryingOutputRules() override; virtual LayoutRulesImpl* getSpecializationConstantRules() override; - virtual LayoutRulesImpl* getShaderStorageBufferRules() override; + virtual LayoutRulesImpl* getShaderStorageBufferRules(TargetRequest* request) override; virtual LayoutRulesImpl* getParameterBlockRules() override; LayoutRulesImpl* getRayPayloadParameterRules() override; @@ -815,7 +815,7 @@ struct CPULayoutRulesFamilyImpl : LayoutRulesFamilyImpl virtual LayoutRulesImpl* getVaryingInputRules() override; virtual LayoutRulesImpl* getVaryingOutputRules() override; virtual LayoutRulesImpl* getSpecializationConstantRules() override; - virtual LayoutRulesImpl* getShaderStorageBufferRules() override; + virtual LayoutRulesImpl* getShaderStorageBufferRules(TargetRequest* request) override; virtual LayoutRulesImpl* getParameterBlockRules() override; LayoutRulesImpl* getRayPayloadParameterRules() override; @@ -835,7 +835,7 @@ struct CUDALayoutRulesFamilyImpl : LayoutRulesFamilyImpl virtual LayoutRulesImpl* getVaryingInputRules() override; virtual LayoutRulesImpl* getVaryingOutputRules() override; virtual LayoutRulesImpl* getSpecializationConstantRules() override; - virtual LayoutRulesImpl* getShaderStorageBufferRules() override; + virtual LayoutRulesImpl* getShaderStorageBufferRules(TargetRequest* request) override; virtual LayoutRulesImpl* getParameterBlockRules() override; LayoutRulesImpl* getRayPayloadParameterRules() override; @@ -1140,8 +1140,10 @@ LayoutRulesImpl* GLSLLayoutRulesFamilyImpl::getSpecializationConstantRules() return &kGLSLSpecializationConstantLayoutRulesImpl_; } -LayoutRulesImpl* GLSLLayoutRulesFamilyImpl::getShaderStorageBufferRules() +LayoutRulesImpl* GLSLLayoutRulesFamilyImpl::getShaderStorageBufferRules(TargetRequest* request) { + if (request->getForceGLSLScalarBufferLayout()) + return &kHLSLStructuredBufferLayoutRulesImpl_; return &kStd430LayoutRulesImpl_; } @@ -1219,7 +1221,7 @@ LayoutRulesImpl* HLSLLayoutRulesFamilyImpl::getSpecializationConstantRules() return nullptr; } -LayoutRulesImpl* HLSLLayoutRulesFamilyImpl::getShaderStorageBufferRules() +LayoutRulesImpl* HLSLLayoutRulesFamilyImpl::getShaderStorageBufferRules(TargetRequest*) { return nullptr; } @@ -1273,7 +1275,7 @@ LayoutRulesImpl* CPULayoutRulesFamilyImpl::getSpecializationConstantRules() { return nullptr; } -LayoutRulesImpl* CPULayoutRulesFamilyImpl::getShaderStorageBufferRules() +LayoutRulesImpl* CPULayoutRulesFamilyImpl::getShaderStorageBufferRules(TargetRequest*) { return nullptr; } @@ -1339,7 +1341,7 @@ LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getSpecializationConstantRules() { return nullptr; } -LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getShaderStorageBufferRules() +LayoutRulesImpl* CUDALayoutRulesFamilyImpl::getShaderStorageBufferRules(TargetRequest*) { return nullptr; } @@ -2538,7 +2540,8 @@ static RefPtr<TypeLayout> _createParameterGroupTypeLayout( LayoutRulesImpl* getParameterBufferElementTypeLayoutRules( ParameterGroupType* parameterGroupType, - LayoutRulesImpl* rules) + LayoutRulesImpl* rules, + TargetRequest* targetRequest) { if( as<ConstantBufferType>(parameterGroupType) ) { @@ -2558,7 +2561,7 @@ LayoutRulesImpl* getParameterBufferElementTypeLayoutRules( } else if( as<GLSLShaderStorageBufferType>(parameterGroupType) ) { - return rules->getLayoutRulesFamily()->getShaderStorageBufferRules(); + return rules->getLayoutRulesFamily()->getShaderStorageBufferRules(targetRequest); } else if (as<ParameterBlockType>(parameterGroupType)) { @@ -2580,7 +2583,8 @@ RefPtr<TypeLayout> createParameterGroupTypeLayout( // Determine the layout rules to use for the contents of the block auto elementTypeRules = getParameterBufferElementTypeLayoutRules( parameterGroupType, - parameterGroupRules); + parameterGroupRules, + context.targetReq); auto elementType = parameterGroupType->elementType; |
