MCPcopy Create free account
hub / github.com/NVIDIA-RTX/RTXNTC / TranscodeMaterial

Method TranscodeMaterial

samples/renderer/NtcMaterialLoader.cpp:788–1063  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

786}
787
788bool NtcMaterialLoader::TranscodeMaterial(ntc::IContext* context, ntc::IStream* ntcFile,
789 ntc::ITextureSetMetadata* textureSetMetadata,
790 NtcMaterial& material, nvrhi::ICommandList* commandList, bool enableBlockCompression)
791{
792 if (material.transcodeMapping.empty())
793 return true;
794
795 int const textureCount = int(material.transcodeMapping.size());
796
797 // Phase 1 - Create textures (color, block, BCn) and write descriptors for NTC decompression
798
799 ntc::TextureSetDesc const& textureSetDesc = textureSetMetadata->GetDesc();
800 for (int textureIndex = 0; textureIndex < textureCount; ++textureIndex)
801 {
802 TextureTranscodeTask& transcodeTask = material.transcodeMapping[textureIndex];
803 std::string const materialTextureName = material.name + ":" + std::string(transcodeTask.name);
804
805 // Create the color texture
806
807 nvrhi::TextureDesc colorTextureDesc = nvrhi::TextureDesc()
808 .setDimension(nvrhi::TextureDimension::Texture2D)
809 .setWidth(textureSetDesc.width)
810 .setHeight(textureSetDesc.height)
811 .setMipLevels(textureSetDesc.mips)
812 .setFormat((transcodeTask.numChannels == 1)
813 ? nvrhi::Format::R8_UNORM
814 : transcodeTask.sRGB
815 ? nvrhi::Format::SRGBA8_UNORM
816 : nvrhi::Format::RGBA8_UNORM)
817 .setDebugName(materialTextureName)
818 .setIsUAV(true)
819 .setIsTypeless(true)
820 .setInitialState(nvrhi::ResourceStates::ShaderResource)
821 .setKeepInitialState(true);
822
823 transcodeTask.color = m_device->createTexture(colorTextureDesc);
824 if (!transcodeTask.color)
825 return false;
826
827 bool compressThisTexture = enableBlockCompression && transcodeTask.bcFormat != ntc::BlockCompressedFormat::None;
828
829 if (compressThisTexture)
830 {
831 // Create the BCn texture
832
833 nvrhi::TextureDesc compressedTextureDesc = nvrhi::TextureDesc()
834 .setDimension(nvrhi::TextureDimension::Texture2D)
835 .setFormat(transcodeTask.nvrhiBcFormat)
836 .setWidth(textureSetDesc.width)
837 .setHeight(textureSetDesc.height)
838 .setMipLevels(textureSetDesc.mips)
839 .setDebugName(materialTextureName)
840 .setInitialState(nvrhi::ResourceStates::ShaderResource)
841 .setKeepInitialState(true);
842
843 transcodeTask.compressed = m_device->createTexture(compressedTextureDesc);
844 if (!transcodeTask.compressed)
845 return false;

Callers

nothing calls this directly

Calls 6

WriteDescriptorMethod · 0.80
SetLatentTextureMethod · 0.80
SetWeightBufferMethod · 0.80
ReleaseTexturesMethod · 0.80
ExecuteComputePassMethod · 0.45
ClearBindingSetCacheMethod · 0.45

Tested by

no test coverage detected