summaryrefslogtreecommitdiffstats
path: root/tools/render-test
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/cpu-memory-binding.cpp56
-rw-r--r--tools/render-test/cpu-memory-binding.h19
-rw-r--r--tools/render-test/render-test-main.cpp8
3 files changed, 42 insertions, 41 deletions
diff --git a/tools/render-test/cpu-memory-binding.cpp b/tools/render-test/cpu-memory-binding.cpp
index 157716b60..0c54ac651 100644
--- a/tools/render-test/cpu-memory-binding.cpp
+++ b/tools/render-test/cpu-memory-binding.cpp
@@ -168,23 +168,18 @@ CPUMemoryBinding::Location CPUMemoryBinding::find(const char* name)
{
return Location();
}
-
- Location location;
- location.m_cur = m_rootBuffer.m_data + varLayout->getOffset();
- location.m_typeLayout = varLayout->getTypeLayout();
-
- return location;
+ return Location::make(varLayout->getTypeLayout(), m_rootBuffer.m_data + varLayout->getOffset());
}
-CPUMemoryBinding::Location CPUMemoryBinding::toField(const Location& location, const char* name)
+CPUMemoryBinding::Location CPUMemoryBinding::Location::toField(const char* name) const
{
- if (!location.isValid())
+ if (!isValid())
{
- return location;
+ return *this;
}
- auto typeLayout = location.m_typeLayout;
- uint8_t* cur = location.m_cur;
+ auto typeLayout = m_typeLayout;
+ uint8_t* cur = m_cur;
// Strip constantBuffer wrapping
{
@@ -208,10 +203,7 @@ CPUMemoryBinding::Location CPUMemoryBinding::toField(const Location& location, c
auto field = typeLayout->getFieldByIndex(ff);
if (strcmp(field->getName(), name) == 0)
{
- Location newLocation;
- newLocation.m_cur = cur + field->getOffset();
- newLocation.m_typeLayout = field->getTypeLayout();
- return newLocation;
+ return make(field->getTypeLayout(), cur + field->getOffset());
}
}
}
@@ -220,15 +212,15 @@ CPUMemoryBinding::Location CPUMemoryBinding::toField(const Location& location, c
return Location();
}
-CPUMemoryBinding::Location CPUMemoryBinding::toIndex(const Location& location, int index)
+CPUMemoryBinding::Location CPUMemoryBinding::Location::toIndex(int index) const
{
- if (!location.isValid())
+ if (!isValid())
{
- return location;
+ return *this;
}
- auto typeLayout = location.m_typeLayout;
- uint8_t* cur = location.m_cur;
+ auto typeLayout = m_typeLayout;
+ uint8_t* cur = m_cur;
const auto kind = typeLayout->getKind();
switch (kind)
@@ -236,7 +228,8 @@ CPUMemoryBinding::Location CPUMemoryBinding::toIndex(const Location& location, i
case slang::TypeReflection::Kind::Array:
{
auto elementTypeLayout = typeLayout->getElementTypeLayout();
- auto elementCount = int(typeLayout->getElementCount());
+ const auto elementCount = int(typeLayout->getElementCount());
+ const auto elementStride = typeLayout->getElementStride(SLANG_PARAMETER_CATEGORY_UNIFORM);
if (index < 0 || index >= elementCount)
{
@@ -244,10 +237,7 @@ CPUMemoryBinding::Location CPUMemoryBinding::toIndex(const Location& location, i
return Location();
}
- Location newLocation;
- newLocation.m_typeLayout = elementTypeLayout;
- newLocation.m_cur = cur + elementTypeLayout->getSize() * index;
- return newLocation;
+ return Location::make(elementTypeLayout, cur + elementStride * index);
}
default: break;
}
@@ -263,8 +253,8 @@ SlangResult CPUMemoryBinding::setBufferContents(const Location& location, const
return SLANG_FAIL;
}
- auto typeLayout = location.m_typeLayout;
- uint8_t* cur = location.m_cur;
+ auto typeLayout = location.getTypeLayout();
+ uint8_t* cur = location.getPtr();
const auto kind = typeLayout->getKind();
switch (kind)
@@ -292,8 +282,8 @@ SlangResult CPUMemoryBinding::setNewBuffer(const Location& location, const void*
return SLANG_FAIL;
}
- auto typeLayout = location.m_typeLayout;
- uint8_t* cur = location.m_cur;
+ auto typeLayout = location.getTypeLayout();
+ uint8_t* cur = location.getPtr();
const auto kind = typeLayout->getKind();
switch (kind)
@@ -357,8 +347,8 @@ SlangResult CPUMemoryBinding::setObject(const Location& location, void* object)
return SLANG_FAIL;
}
- auto typeLayout = location.m_typeLayout;
- uint8_t* cur = location.m_cur;
+ auto typeLayout = location.getTypeLayout();
+ uint8_t* cur = location.getPtr();
const auto kind = typeLayout->getKind();
switch (kind)
@@ -441,9 +431,9 @@ SlangResult CPUMemoryBinding::setInplace(const Location& location, const void* d
return SLANG_FAIL;
}
- size_t dstSize = location.m_typeLayout->getSize();
+ size_t dstSize = location.getTypeLayout()->getSize();
sizeInBytes = (sizeInBytes > dstSize) ? dstSize : sizeInBytes;
- memcpy(location.m_cur, data, sizeInBytes);
+ memcpy(location.getPtr(), data, sizeInBytes);
return SLANG_OK;
}
diff --git a/tools/render-test/cpu-memory-binding.h b/tools/render-test/cpu-memory-binding.h
index 4ca9091b8..9501c1d13 100644
--- a/tools/render-test/cpu-memory-binding.h
+++ b/tools/render-test/cpu-memory-binding.h
@@ -21,8 +21,23 @@ struct CPUMemoryBinding
bool isValid() const { return m_cur != nullptr; }
bool isInvalid() const { return m_cur == nullptr; }
+ Location toField(const char* name) const;
+ Location toIndex(int index) const;
+
+ slang::TypeLayoutReflection* getTypeLayout() const { return m_typeLayout; }
+ uint8_t* getPtr() const { return m_cur; }
+
Location():m_cur(nullptr) {}
+ static Location make(slang::TypeLayoutReflection* typeLayout, uint8_t* ptr)
+ {
+ Location loc;
+ loc.m_typeLayout = typeLayout;
+ loc.m_cur = ptr;
+ return loc;
+ }
+
+ protected:
slang::TypeLayoutReflection* m_typeLayout;
uint8_t* m_cur;
};
@@ -31,14 +46,10 @@ struct CPUMemoryBinding
Location find(const char* name);
- Location toField(const Location& location, const char* name);
- Location toIndex(const Location& location, int index);
-
SlangResult setBufferContents(const Location& location, const void* initialData, size_t sizeInBytes);
SlangResult setNewBuffer(const Location& location, const void* initialData, size_t sizeInBytes, Buffer& outBuffer);
SlangResult setObject(const Location& location, void* object);
SlangResult setInplace(const Location& location, const void* data, size_t sizeInBytes);
-
SlangResult init(slang::ShaderReflection* reflection);
CPUMemoryBinding();
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index a1768cdb2..ef3613240 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -496,7 +496,7 @@ static SlangResult _doCPUCompute(SlangSession* session, const String& sourcePath
int index = parser.ReadInt();
SLANG_ASSERT(index >= 0);
- location = binding.toIndex(location, index);
+ location = location.toIndex(index);
if (location.isInvalid())
{
outStream.print("Unable to find entry in '%d' in '%s'\n", index, entry.name.getBuffer());
@@ -509,7 +509,7 @@ static SlangResult _doCPUCompute(SlangSession* session, const String& sourcePath
parser.ReadToken();
Token identifierToken = parser.ReadMatchingToken(TokenType::Identifier);
- location = binding.toField(location, identifierToken.Content.getBuffer());
+ location = location.toField(identifierToken.Content.getBuffer());
if (location.isInvalid())
{
outStream.print("Unable to find field '%s' in '%s'\n", identifierToken.Content.getBuffer(), entry.name.getBuffer());
@@ -529,7 +529,7 @@ static SlangResult _doCPUCompute(SlangSession* session, const String& sourcePath
auto& srcEntry = layout.entries[entryIndex];
- auto typeLayout = location.m_typeLayout;
+ auto typeLayout = location.getTypeLayout();
const auto kind = typeLayout->getKind();
switch (kind)
{
@@ -593,7 +593,7 @@ static SlangResult _doCPUCompute(SlangSession* session, const String& sourcePath
break;
case SLANG_TEXTURE_2D:
{
- slang::TypeReflection* typeReflection = location.m_typeLayout->getResourceResultType();
+ slang::TypeReflection* typeReflection = location.getTypeLayout()->getResourceResultType();
int count = 1;
if (typeReflection->getKind() == slang::TypeReflection::Kind::Vector)