summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d11
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/d3d11
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/d3d11')
-rw-r--r--tools/gfx/d3d11/d3d11-device.cpp3
-rw-r--r--tools/gfx/d3d11/d3d11-device.h1
-rw-r--r--tools/gfx/d3d11/d3d11-shader-object-layout.cpp11
-rw-r--r--tools/gfx/d3d11/d3d11-shader-object-layout.h8
-rw-r--r--tools/gfx/d3d11/d3d11-shader-object.cpp1
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()));