diff options
| author | Yong He <yonghe@outlook.com> | 2021-04-20 13:17:29 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-20 13:17:29 -0700 |
| commit | 34fba7b5e726136c6eee8a318ab9a75381399c00 (patch) | |
| tree | 39a496c7052256cef9b089b78ab4bd48316571bd /source | |
| parent | 6bba674f9d732eccc27dcf004611e6a8eb9bc14e (diff) | |
Various fixes to make `model-viewer` example almost working. (#1801)
* Fixing `PseudoPtr` legalization and `gfx` lifetime issues.
* Fixing `model-viewer` example.
This change contains various fixes to bring `model-viewer` example to fully functional. These fixes include:
1. Add `spReflectionTypeLayout_getSubObjectRangeSpaceOffset` function to return the space index for a sub object referenced through a `ParameterBlock` binding.
2. Make sure `D3D12Device` specifies column major matrix order creating a Slang session.
3. Fix `platform::Window::close()` and `platform::Application::quit()`.
4. Fix memory leak during `model-viewer''s model loading.
5. Fix command buffer recording in `model-viewer`.
With these changes, model viewer can now produce an image with a gray cube. The lighting is still incorrect becuase the `gfx` shader object implementation still does not handle "pending layout" resulting from global existential parameters.
* Fix d3d12 root signature creation.
* Use row-major matrix layout in model-viewer
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-legalize-types.cpp | 5 | ||||
| -rw-r--r-- | source/slang/slang-reflection-api.cpp | 25 | ||||
| -rw-r--r-- | source/slang/slang-type-layout.h | 1 |
3 files changed, 25 insertions, 6 deletions
diff --git a/source/slang/slang-legalize-types.cpp b/source/slang/slang-legalize-types.cpp index 755f0f207..1b72b5c00 100644 --- a/source/slang/slang-legalize-types.cpp +++ b/source/slang/slang-legalize-types.cpp @@ -1201,11 +1201,6 @@ LegalType legalizeTypeImpl( // auto legalConcreteType = legalizeType(context, pseudoPtrType->getValueType()); - // If element type hasn't change, return original type. - if (legalConcreteType.flavor == LegalType::Flavor::simple && - legalConcreteType.getSimple() == pseudoPtrType->getValueType()) - return LegalType::simple(pseudoPtrType); - // TODO: If/when we change our generation of pseudo-pointers // so that use-site code emits a "pseudo-load" then we may // need to change the logic here so that we return diff --git a/source/slang/slang-reflection-api.cpp b/source/slang/slang-reflection-api.cpp index 6f022cc90..eb1514f4c 100644 --- a/source/slang/slang-reflection-api.cpp +++ b/source/slang/slang-reflection-api.cpp @@ -1396,7 +1396,12 @@ namespace Slang // TypeLayout::ExtendedInfo::SubObjectRangeInfo subObjectRange; subObjectRange.bindingRangeIndex = bindingRangeIndex; - + subObjectRange.spaceOffset = 0; + if (kind == LayoutResourceKind::RegisterSpace) + { + auto resInfo = path->var->FindResourceInfo(LayoutResourceKind::RegisterSpace); + subObjectRange.spaceOffset = resInfo->index; + } // It is possible that the sub-object has descriptor ranges // that will need to be exposed upward, into the parent. // @@ -2010,6 +2015,24 @@ SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeBindingRangeIndex(Sla return extTypeLayout->m_subObjectRanges[subObjectRangeIndex].bindingRangeIndex; } +SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeSpaceOffset( + SlangReflectionTypeLayout* inTypeLayout, + SlangInt subObjectRangeIndex) +{ + auto typeLayout = convert(inTypeLayout); + if (!typeLayout) + return 0; + + auto extTypeLayout = Slang::getExtendedTypeLayout(typeLayout); + + if (subObjectRangeIndex < 0) + return 0; + if (subObjectRangeIndex >= extTypeLayout->m_subObjectRanges.getCount()) + return 0; + + return extTypeLayout->m_subObjectRanges[subObjectRangeIndex].spaceOffset; +} + #if 0 SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeSubObjectRangeIndex(SlangReflectionTypeLayout* inTypeLayout, SlangInt index) diff --git a/source/slang/slang-type-layout.h b/source/slang/slang-type-layout.h index c4df46fe0..88ba72003 100644 --- a/source/slang/slang-type-layout.h +++ b/source/slang/slang-type-layout.h @@ -437,6 +437,7 @@ public: struct SubObjectRangeInfo { Int bindingRangeIndex; + Int spaceOffset; }; List<RefPtr<DescriptorSetInfo>> m_descriptorSets; |
