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

Function OptimizeBlockCompression

tools/cli/GraphicsPasses.cpp:778–965  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

776
777 return true;
778}
779
780bool OptimizeBlockCompression(
781 ntc::IContext* context,
782 ntc::ITextureSetMetadata* textureSetMetadata,
783 nvrhi::IDevice* device,
784 nvrhi::ICommandList* commandList,
785 float psnrThreshold,
786 GraphicsResourcesForTextureSet const& graphicsResources)
787{
788 assert(device);
789
790 bool anyBC7Textures = false;
791 for (int textureIndex = 0; textureIndex < textureSetMetadata->GetTextureCount(); ++textureIndex)
792 {
793 ntc::ITextureMetadata* textureMetadata = textureSetMetadata->GetTexture(textureIndex);
794 if (textureMetadata->GetBlockCompressedFormat() == ntc::BlockCompressedFormat::BC7)
795 {
796 anyBC7Textures = true;
797 break;
798 }
799 }
800
801 if (!anyBC7Textures)
802 return true;
803
804 GraphicsBlockCompressionPass blockCompressionPass(device, 1);
805 if (!blockCompressionPass.Init())
806 return false;
807
808 GraphicsImageDifferencePass compareImagesPass(device);
809 if (!compareImagesPass.Init())
810 return false;
811
812 ntc::TextureSetDesc const& textureSetDesc = textureSetMetadata->GetDesc();
813
814 nvrhi::BufferHandle modeBuffer;
815 std::vector<uint8_t> blockCompressedData;
816
817 for (int textureIndex = 0; textureIndex < textureSetMetadata->GetTextureCount(); ++textureIndex)
818 {
819 ntc::ITextureMetadata* textureMetadata = textureSetMetadata->GetTexture(textureIndex);
820 if (textureMetadata->GetBlockCompressedFormat() != ntc::BlockCompressedFormat::BC7)
821 continue;
822
823 GraphicsResourcesForTexture const& textureResources = graphicsResources.perTexture[textureIndex];
824
825 for (int mipLevel = 0; mipLevel < textureSetDesc.mips; ++mipLevel)
826 {
827 int mipWidth = std::max(textureSetDesc.width >> mipLevel, 1);
828 int mipHeight = std::max(textureSetDesc.height >> mipLevel, 1);
829 int mipWidthInBlocks = (mipWidth + 3) / 4;
830 int mipHeightInBlocks = (mipHeight + 3) / 4;
831
832 // First pass - compress without the mode buffer, doing an exhaustive mode search for each block
833
834 ntc::MakeBlockCompressionComputePassParameters compressionParams;
835 compressionParams.srcRect.width = mipWidth;

Callers 1

mainFunction · 0.85

Calls 3

GetTextureMethod · 0.80
InitMethod · 0.45
ExecuteComputePassMethod · 0.45

Tested by

no test coverage detected