summaryrefslogtreecommitdiffstats
path: root/tools/render-test
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/render-test-main.cpp34
-rw-r--r--tools/render-test/shader-renderer-util.cpp11
2 files changed, 42 insertions, 3 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index 4c05422ee..89bb25871 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -392,8 +392,38 @@ SlangResult _assignVarsFromLayout(
case ShaderInputType::Object:
{
auto typeName = entry.objectDesc.typeName;
- auto slangType = slangReflection->findTypeByName(typeName.getBuffer());
- auto slangTypeLayout = slangReflection->getTypeLayout(slangType);
+ slang::TypeLayoutReflection* slangTypeLayout = nullptr;
+ if(typeName.getLength() != 0)
+ {
+ // If the input line specified the name of the type
+ // to allocate, then we use it directly.
+ //
+ auto slangType = slangReflection->findTypeByName(typeName.getBuffer());
+ slangTypeLayout = slangReflection->getTypeLayout(slangType);
+ }
+ else
+ {
+ // if the user did not specify what type to allocate,
+ // then we will infer the type from the type of the
+ // value pointed to by `entryCursor`.
+ //
+ slangTypeLayout = entryCursor.getTypeLayout();
+ switch(slangTypeLayout->getKind())
+ {
+ default:
+ break;
+
+ case slang::TypeReflection::Kind::ConstantBuffer:
+ case slang::TypeReflection::Kind::ParameterBlock:
+ // If the cursor is pointing at a constant buffer
+ // or parameter block, then we assume the user
+ // actually means to allocate an object based on
+ // the element type of the block.
+ //
+ slangTypeLayout = slangTypeLayout->getElementTypeLayout();
+ break;
+ }
+ }
ComPtr<IShaderObjectLayout> shaderObjectLayout = renderer->createShaderObjectLayout(slangTypeLayout);
ComPtr<IShaderObject> shaderObject =
diff --git a/tools/render-test/shader-renderer-util.cpp b/tools/render-test/shader-renderer-util.cpp
index c90d197f4..ad3812ae3 100644
--- a/tools/render-test/shader-renderer-util.cpp
+++ b/tools/render-test/shader-renderer-util.cpp
@@ -182,6 +182,7 @@ ComPtr<ISamplerState> _createSamplerState(IRenderer* renderer,
const int textureBindFlags = IResource::BindFlag::NonPixelShaderResource | IResource::BindFlag::PixelShaderResource;
List<IDescriptorSetLayout::SlotRangeDesc> slotRangeDescs;
+ List<Index> mapEntryToSlotRange;
if(addedConstantBuffer)
{
@@ -196,6 +197,7 @@ ComPtr<ISamplerState> _createSamplerState(IRenderer* renderer,
const ShaderInputLayoutEntry& srcEntry = srcEntries[i];
SLANG_ASSERT(srcEntry.onlyCPULikeBinding == false);
+ mapEntryToSlotRange.add(slotRangeDescs.getCount());
IDescriptorSetLayout::SlotRangeDesc slotRangeDesc;
switch (srcEntry.type)
@@ -252,6 +254,10 @@ ComPtr<ISamplerState> _createSamplerState(IRenderer* renderer,
slotRangeDesc.type = DescriptorSlotType::Sampler;
break;
+ case ShaderInputType::Object:
+ // We ignore the `Object` case here, knowing that it is meant for the shader-object path.
+ continue;
+
default:
assert(!"Unhandled type");
return SLANG_FAIL;
@@ -290,7 +296,7 @@ ComPtr<ISamplerState> _createSamplerState(IRenderer* renderer,
{
const ShaderInputLayoutEntry& srcEntry = srcEntries[i];
- auto rangeIndex = i + (addedConstantBuffer ? 1 : 0);
+ auto rangeIndex = mapEntryToSlotRange[i];
switch (srcEntry.type)
{
@@ -407,6 +413,9 @@ ComPtr<ISamplerState> _createSamplerState(IRenderer* renderer,
}
break;
+ case ShaderInputType::Object:
+ break;
+
default:
assert(!"Unhandled type");
return SLANG_FAIL;