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/vulkan | |
| 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/vulkan')
| -rw-r--r-- | tools/gfx/vulkan/vk-device.cpp | 6 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-device.h | 4 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-shader-object-layout.cpp | 11 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-shader-object-layout.h | 12 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-shader-object.cpp | 1 |
5 files changed, 21 insertions, 13 deletions
diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp index 4f2899f1b..e1b1eaf27 100644 --- a/tools/gfx/vulkan/vk-device.cpp +++ b/tools/gfx/vulkan/vk-device.cpp @@ -2168,11 +2168,13 @@ Result DeviceImpl::createProgram( } Result DeviceImpl::createShaderObjectLayout( - slang::TypeLayoutReflection* typeLayout, ShaderObjectLayoutBase** outLayout) + slang::ISession* session, + slang::TypeLayoutReflection* typeLayout, + ShaderObjectLayoutBase** outLayout) { RefPtr<ShaderObjectLayoutImpl> layout; SLANG_RETURN_ON_FAIL( - ShaderObjectLayoutImpl::createForElementType(this, typeLayout, layout.writeRef())); + ShaderObjectLayoutImpl::createForElementType(this, session, typeLayout, layout.writeRef())); returnRefPtrMove(outLayout, layout); return SLANG_OK; } diff --git a/tools/gfx/vulkan/vk-device.h b/tools/gfx/vulkan/vk-device.h index 9731fd1d4..89c7aa103 100644 --- a/tools/gfx/vulkan/vk-device.h +++ b/tools/gfx/vulkan/vk-device.h @@ -66,7 +66,9 @@ public: createInputLayout(IInputLayout::Desc const& desc, IInputLayout** outLayout) override; virtual Result createShaderObjectLayout( - slang::TypeLayoutReflection* typeLayout, ShaderObjectLayoutBase** outLayout) override; + slang::ISession* session, + slang::TypeLayoutReflection* typeLayout, + ShaderObjectLayoutBase** outLayout) override; virtual Result createShaderObject( ShaderObjectLayoutBase* layout, IShaderObject** outObject) override; virtual Result createMutableShaderObject( diff --git a/tools/gfx/vulkan/vk-shader-object-layout.cpp b/tools/gfx/vulkan/vk-shader-object-layout.cpp index d7f0d0fd0..d84627e86 100644 --- a/tools/gfx/vulkan/vk-shader-object-layout.cpp +++ b/tools/gfx/vulkan/vk-shader-object-layout.cpp @@ -449,7 +449,7 @@ void ShaderObjectLayoutImpl::Builder::addBindingRanges(slang::TypeLayoutReflecti auto varLayout = slangLeafTypeLayout->getElementVarLayout(); auto subTypeLayout = varLayout->getTypeLayout(); ShaderObjectLayoutImpl::createForElementType( - m_renderer, subTypeLayout, subObjectLayout.writeRef()); + m_renderer, m_session, subTypeLayout, subObjectLayout.writeRef()); } break; @@ -457,7 +457,7 @@ void ShaderObjectLayoutImpl::Builder::addBindingRanges(slang::TypeLayoutReflecti if (auto pendingTypeLayout = slangLeafTypeLayout->getPendingDataTypeLayout()) { ShaderObjectLayoutImpl::createForElementType( - m_renderer, pendingTypeLayout, subObjectLayout.writeRef()); + m_renderer, m_session, pendingTypeLayout, subObjectLayout.writeRef()); } break; } @@ -551,10 +551,11 @@ SlangResult ShaderObjectLayoutImpl::Builder::build(ShaderObjectLayoutImpl** outL Result ShaderObjectLayoutImpl::createForElementType( DeviceImpl* renderer, + slang::ISession* session, slang::TypeLayoutReflection* elementType, ShaderObjectLayoutImpl** outLayout) { - Builder builder(renderer); + Builder builder(renderer, session); builder.setElementTypeLayout(elementType); // When constructing a shader object layout directly from a reflected @@ -618,7 +619,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; @@ -722,7 +723,7 @@ Result RootShaderObjectLayout::create( { auto slangEntryPoint = programLayout->getEntryPointByIndex(e); - EntryPointLayout::Builder entryPointBuilder(renderer); + EntryPointLayout::Builder entryPointBuilder(renderer, program->getSession()); entryPointBuilder.addEntryPointParams(slangEntryPoint); RefPtr<EntryPointLayout> entryPointLayout; diff --git a/tools/gfx/vulkan/vk-shader-object-layout.h b/tools/gfx/vulkan/vk-shader-object-layout.h index 1d2b08b6c..3f60e6b89 100644 --- a/tools/gfx/vulkan/vk-shader-object-layout.h +++ b/tools/gfx/vulkan/vk-shader-object-layout.h @@ -134,11 +134,12 @@ public: struct Builder { public: - Builder(DeviceImpl* renderer) - : m_renderer(renderer) + Builder(DeviceImpl* renderer, slang::ISession* session) + : m_renderer(renderer), m_session(session) {} DeviceImpl* m_renderer; + slang::ISession* m_session; slang::TypeLayoutReflection* m_elementTypeLayout; /// The container type of this shader object. When `m_containerType` is @@ -214,6 +215,7 @@ public: static Result createForElementType( DeviceImpl* renderer, + slang::ISession* session, slang::TypeLayoutReflection* elementType, ShaderObjectLayoutImpl** outLayout); @@ -321,8 +323,8 @@ class EntryPointLayout : public ShaderObjectLayoutImpl public: struct Builder : Super::Builder { - Builder(DeviceImpl* device) - : Super::Builder(device) + Builder(DeviceImpl* device, slang::ISession* session) + : Super::Builder(device, session) {} Result build(EntryPointLayout** outLayout); @@ -367,7 +369,7 @@ public: DeviceImpl* 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/vulkan/vk-shader-object.cpp b/tools/gfx/vulkan/vk-shader-object.cpp index 31422429b..77707eac0 100644 --- a/tools/gfx/vulkan/vk-shader-object.cpp +++ b/tools/gfx/vulkan/vk-shader-object.cpp @@ -977,6 +977,7 @@ Result ShaderObjectImpl::_createSpecializedLayout(ShaderObjectLayoutImpl** outLa auto device = getDevice(); RefPtr<ShaderObjectLayoutImpl> layout; SLANG_RETURN_ON_FAIL(device->getShaderObjectLayout( + m_layout->m_slangSession, extendedType.slangType, m_layout->getContainerType(), (ShaderObjectLayoutBase**)layout.writeRef())); |
