diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-08-28 10:26:48 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-28 10:26:48 -0400 |
| commit | fecfb36e61c3bdb133b57713c2b6d27ff7924a9b (patch) | |
| tree | 5f43a27053f23d7552a396c610fd732ce9022266 /tools/render-test/cpu-memory-binding.cpp | |
| parent | 6c6be3c26335644bb65913a4db03388ec6ff4aab (diff) | |
Use getElementStride in toIndex. (#1039)
Make toIndex and toField methods of Location.
Diffstat (limited to 'tools/render-test/cpu-memory-binding.cpp')
| -rw-r--r-- | tools/render-test/cpu-memory-binding.cpp | 56 |
1 files changed, 23 insertions, 33 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; } |
