MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Falcor / bindShaderData

Method bindShaderData

Source/Falcor/Utils/Image/TextureManager.cpp:581–626  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

579}
580
581void TextureManager::bindShaderData(const ShaderVar& texturesVar, const size_t descCount, const ShaderVar& udimsVar) const
582{
583 std::lock_guard<std::mutex> lock(mMutex);
584
585 if (mTextureDescs.size() > descCount)
586 {
587 FALCOR_THROW("Descriptor array size ({}) is too small for the required number of textures ({})", descCount, mTextureDescs.size());
588 }
589
590 ref<Texture> nullTexture;
591 for (size_t i = 0; i < mTextureDescs.size(); i++)
592 {
593 texturesVar[i] = mTextureDescs[i].pTexture;
594 }
595 for (size_t i = mTextureDescs.size(); i < descCount; i++)
596 {
597 texturesVar[i] = nullTexture;
598 }
599
600 if (mUdimIndirection.empty())
601 {
602 mpUdimIndirection.reset();
603 mUdimIndirectionDirty = false;
604 return;
605 }
606
607 if (!mpUdimIndirection || mUdimIndirection.size() > mpUdimIndirection->getElementCount())
608 {
609 mpUdimIndirection = mpDevice->createStructuredBuffer(
610 sizeof(int32_t),
611 mUdimIndirection.size(),
612 ResourceBindFlags::ShaderResource | ResourceBindFlags::UnorderedAccess,
613 MemoryType::DeviceLocal,
614 mUdimIndirection.data(),
615 false
616 );
617 mUdimIndirectionDirty = false;
618 }
619
620 if (mUdimIndirectionDirty)
621 {
622 mpUdimIndirection->setBlob(mUdimIndirection.data(), 0, mUdimIndirection.size() * sizeof(int32_t));
623 }
624
625 udimsVar = mpUdimIndirection;
626}
627
628TextureManager::Stats TextureManager::getStats() const
629{

Callers

nothing calls this directly

Calls 6

sizeMethod · 0.45
emptyMethod · 0.45
resetMethod · 0.45
dataMethod · 0.45
setBlobMethod · 0.45

Tested by

no test coverage detected