summaryrefslogtreecommitdiff
path: root/tools/gfx/vulkan
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-20 12:24:00 -0800
committerGitHub <noreply@github.com>2024-02-20 12:24:00 -0800
commit4d20fd329956ac89408b1628a8291fea01bc9a6d (patch)
tree8e62d9c1ec05142fd25d0b31073fdb56d44691b0 /tools/gfx/vulkan
parent8e9b61e3bac69dbb37a1451b62302e688a017ced (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.cpp6
-rw-r--r--tools/gfx/vulkan/vk-device.h4
-rw-r--r--tools/gfx/vulkan/vk-shader-object-layout.cpp11
-rw-r--r--tools/gfx/vulkan/vk-shader-object-layout.h12
-rw-r--r--tools/gfx/vulkan/vk-shader-object.cpp1
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()));