diff options
| author | Yong He <yonghe@outlook.com> | 2024-02-20 12:24:00 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-20 12:24:00 -0800 |
| commit | 4d20fd329956ac89408b1628a8291fea01bc9a6d (patch) | |
| tree | 8e62d9c1ec05142fd25d0b31073fdb56d44691b0 /tools/gfx/d3d11 | |
| parent | 8e9b61e3bac69dbb37a1451b62302e688a017ced (diff) | |
Refactor compiler option representations. (#3598)
* Refactor compiler option representation.
* Fix binary compatibility.
* Add a test for specifying compiler options at link time.
* Fix binary compatibility.
* Fix binary compatibility.
* Fix backward compatibility on matrix layout.
* Fix.
* Fix.
* Fix.
* Fix gfx.
* Fix gfx.
* Fix dynamic dispatch.
* Polish.
Diffstat (limited to 'tools/gfx/d3d11')
| -rw-r--r-- | tools/gfx/d3d11/d3d11-device.cpp | 3 | ||||
| -rw-r--r-- | tools/gfx/d3d11/d3d11-device.h | 1 | ||||
| -rw-r--r-- | tools/gfx/d3d11/d3d11-shader-object-layout.cpp | 11 | ||||
| -rw-r--r-- | tools/gfx/d3d11/d3d11-shader-object-layout.h | 8 | ||||
| -rw-r--r-- | tools/gfx/d3d11/d3d11-shader-object.cpp | 1 |
5 files changed, 17 insertions, 7 deletions
diff --git a/tools/gfx/d3d11/d3d11-device.cpp b/tools/gfx/d3d11/d3d11-device.cpp index 96a5043fb..20e17b082 100644 --- a/tools/gfx/d3d11/d3d11-device.cpp +++ b/tools/gfx/d3d11/d3d11-device.cpp @@ -1413,12 +1413,13 @@ Result DeviceImpl::createProgram( } Result DeviceImpl::createShaderObjectLayout( + slang::ISession* session, slang::TypeLayoutReflection* typeLayout, ShaderObjectLayoutBase** outLayout) { RefPtr<ShaderObjectLayoutImpl> layout; SLANG_RETURN_ON_FAIL(ShaderObjectLayoutImpl::createForElementType( - this, typeLayout, layout.writeRef())); + this, session, typeLayout, layout.writeRef())); returnRefPtrMove(outLayout, layout); return SLANG_OK; } diff --git a/tools/gfx/d3d11/d3d11-device.h b/tools/gfx/d3d11/d3d11-device.h index 608411912..42fffa3c9 100644 --- a/tools/gfx/d3d11/d3d11-device.h +++ b/tools/gfx/d3d11/d3d11-device.h @@ -59,6 +59,7 @@ public: const IQueryPool::Desc& desc, IQueryPool** outPool) override; virtual Result createShaderObjectLayout( + slang::ISession* session, slang::TypeLayoutReflection* typeLayout, ShaderObjectLayoutBase** outLayout) override; virtual Result createShaderObject(ShaderObjectLayoutBase* layout, IShaderObject** outObject) diff --git a/tools/gfx/d3d11/d3d11-shader-object-layout.cpp b/tools/gfx/d3d11/d3d11-shader-object-layout.cpp index 8032719b0..70204e4c0 100644 --- a/tools/gfx/d3d11/d3d11-shader-object-layout.cpp +++ b/tools/gfx/d3d11/d3d11-shader-object-layout.cpp @@ -180,6 +180,7 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe auto elementTypeLayout = slangLeafTypeLayout->getElementTypeLayout(); createForElementType( m_renderer, + m_session, elementTypeLayout, subObjectLayout.writeRef()); } @@ -198,6 +199,7 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(slang::TypeLayoutRe { createForElementType( m_renderer, + m_session, pendingTypeLayout, subObjectLayout.writeRef()); @@ -233,10 +235,11 @@ SlangResult ShaderObjectLayoutImpl::Builder::build(ShaderObjectLayoutImpl** outL Result ShaderObjectLayoutImpl::createForElementType( RendererBase* renderer, + slang::ISession* session, slang::TypeLayoutReflection* elementType, ShaderObjectLayoutImpl** outLayout) { - Builder builder(renderer); + Builder builder(renderer, session); builder.setElementTypeLayout(elementType); return builder.build(outLayout); } @@ -245,7 +248,7 @@ Result ShaderObjectLayoutImpl::_init(Builder const* builder) { auto renderer = builder->m_renderer; - initBase(renderer, builder->m_elementTypeLayout); + initBase(renderer, builder->m_session, builder->m_elementTypeLayout); m_bindingRanges = builder->m_bindingRanges; m_srvRanges = builder->m_srvRanges; @@ -303,7 +306,7 @@ Result RootShaderObjectLayoutImpl::create( auto slangEntryPoint = programLayout->getEntryPointByIndex(e); RefPtr<ShaderObjectLayoutImpl> entryPointLayout; SLANG_RETURN_ON_FAIL(ShaderObjectLayoutImpl::createForElementType( - renderer, slangEntryPoint->getTypeLayout(), entryPointLayout.writeRef())); + renderer, program->getSession(), slangEntryPoint->getTypeLayout(), entryPointLayout.writeRef())); builder.addEntryPoint(slangEntryPoint->getStage(), entryPointLayout, slangEntryPoint); } @@ -322,6 +325,8 @@ Result RootShaderObjectLayoutImpl::_init(Builder const* builder) m_programLayout = builder->m_programLayout; m_entryPoints = builder->m_entryPoints; m_pendingDataOffset = builder->m_pendingDataOffset; + m_slangSession = m_program->getSession(); + return SLANG_OK; } diff --git a/tools/gfx/d3d11/d3d11-shader-object-layout.h b/tools/gfx/d3d11/d3d11-shader-object-layout.h index e029a7b76..e18c91c2e 100644 --- a/tools/gfx/d3d11/d3d11-shader-object-layout.h +++ b/tools/gfx/d3d11/d3d11-shader-object-layout.h @@ -107,11 +107,12 @@ public: struct Builder { public: - Builder(RendererBase* renderer) - : m_renderer(renderer) + Builder(RendererBase* renderer, slang::ISession* session) + : m_renderer(renderer), m_session(session) {} RendererBase* m_renderer; + slang::ISession* m_session; slang::TypeLayoutReflection* m_elementTypeLayout; List<BindingRangeInfo> m_bindingRanges; @@ -144,6 +145,7 @@ public: static Result createForElementType( RendererBase* renderer, + slang::ISession* session, slang::TypeLayoutReflection* elementType, ShaderObjectLayoutImpl** outLayout); @@ -216,7 +218,7 @@ public: RendererBase* renderer, slang::IComponentType* program, slang::ProgramLayout* programLayout) - : Super::Builder(renderer) + : Super::Builder(renderer, program->getSession()) , m_program(program) , m_programLayout(programLayout) {} diff --git a/tools/gfx/d3d11/d3d11-shader-object.cpp b/tools/gfx/d3d11/d3d11-shader-object.cpp index 285cc60b6..40d671843 100644 --- a/tools/gfx/d3d11/d3d11-shader-object.cpp +++ b/tools/gfx/d3d11/d3d11-shader-object.cpp @@ -495,6 +495,7 @@ Result ShaderObjectImpl::_createSpecializedLayout(ShaderObjectLayoutImpl** outLa auto renderer = getRenderer(); RefPtr<ShaderObjectLayoutImpl> layout; SLANG_RETURN_ON_FAIL(renderer->getShaderObjectLayout( + m_layout->m_slangSession, extendedType.slangType, m_layout->getContainerType(), (ShaderObjectLayoutBase**)layout.writeRef())); |
