@@ -817,9 +817,9 @@ void main()
817817 return retval;
818818 };
819819 colorPixelBuffer = createLinkAndRegister (EII_COLOR);
820- if (denoiserInputCount>= EII_ALBEDO)
820+ if (denoiserInputCount>EII_ALBEDO)
821821 albedoPixelBuffer = createLinkAndRegister (EII_ALBEDO);
822- if (denoiserInputCount>= EII_NORMAL)
822+ if (denoiserInputCount>EII_NORMAL)
823823 normalPixelBuffer = createLinkAndRegister (EII_NORMAL);
824824 if (skip)
825825 continue ;
@@ -851,27 +851,34 @@ void main()
851851 // write descriptor set
852852 {
853853 IGPUDescriptorSet::SDescriptorInfo infos[SharedDescriptorSetDescCount+EII_COUNT*2u -2u ];
854- auto attachWholeBuffer = [&infos](auto ix, IGPUBuffer* buff, uint64_t offset= 0ull ) -> void
854+ auto attachBufferImageRange = [param, &infos](auto ix, IGPUBuffer* buff, uint64_t offset, uint64_t pixelByteSize ) -> void
855855 {
856856 infos[ix].desc = core::smart_refctd_ptr<IGPUBuffer>(buff);
857- infos[ix].buffer = {offset,buff-> getMemoryReqs (). vulkanReqs . size -offset };
857+ infos[ix].buffer = {offset,param. width *param. height *pixelByteSize };
858858 };
859- attachWholeBuffer (EII_COLOR,colorPixelBuffer.getObject (),inImageByteOffset[EII_COLOR]);
860- if (denoiserInputCount>=EII_ALBEDO)
861- attachWholeBuffer (EII_ALBEDO,albedoPixelBuffer.getObject (),inImageByteOffset[EII_ALBEDO]);
862- if (denoiserInputCount>=EII_NORMAL)
863- attachWholeBuffer (EII_NORMAL,normalPixelBuffer.getObject (),inImageByteOffset[EII_NORMAL]);
859+ auto attachWholeBuffer = [&infos](auto ix, IGPUBuffer* buff) -> void
860+ {
861+ infos[ix].desc = core::smart_refctd_ptr<IGPUBuffer>(buff);
862+ infos[ix].buffer = {0ull ,buff->getMemoryReqs ().vulkanReqs .size };
863+ };
864+ uint64_t interleavedPixelBytesize = getTexelOrBlockBytesize<EF_R16G16B16A16_SFLOAT>();
865+ attachBufferImageRange (EII_COLOR,colorPixelBuffer.getObject (),inImageByteOffset[EII_COLOR],interleavedPixelBytesize);
866+ if (denoiserInputCount>EII_ALBEDO)
867+ attachBufferImageRange (EII_ALBEDO,albedoPixelBuffer.getObject (),inImageByteOffset[EII_ALBEDO],interleavedPixelBytesize);
868+ if (denoiserInputCount>EII_NORMAL)
869+ attachBufferImageRange (EII_NORMAL,normalPixelBuffer.getObject (),inImageByteOffset[EII_NORMAL],interleavedPixelBytesize);
864870 for (uint32_t j=0u ; j<denoiserInputCount; j++)
865871 {
866- outImageByteOffset[j] = j*param.width *param.height *8u ;// TODO do it with *forcedOptiXFormatPixelStride;
867- attachWholeBuffer (EII_COUNT+j,temporaryPixelBuffer.getObject (),outImageByteOffset[j]);
872+ uint64_t deinterleavedPixelBytesize = getTexelOrBlockBytesize<EF_R16G16B16A16_SFLOAT>(); // TODO do it with EF_R16G16B16_SFLOAT
873+ outImageByteOffset[j] = j*param.width *param.height *deinterleavedPixelBytesize;
874+ attachBufferImageRange (EII_COUNT+j,temporaryPixelBuffer.getObject (),outImageByteOffset[j],deinterleavedPixelBytesize);
868875 }
869876 attachWholeBuffer (EII_COUNT*2u ,histogramBuffer.get ());
870877 attachWholeBuffer (EII_COUNT*2u +1u ,intensityBuffer.getObject ());
871878 IGPUDescriptorSet::SWriteDescriptorSet writes[SharedDescriptorSetDescCount] =
872879 {
873- {descriptorSet.get (),0u ,0u ,EII_COUNT ,EDT_STORAGE_BUFFER,infos+0 },
874- {descriptorSet.get (),1u ,0u ,EII_COUNT ,EDT_STORAGE_BUFFER,infos+EII_COUNT},
880+ {descriptorSet.get (),0u ,0u ,denoiserInputCount ,EDT_STORAGE_BUFFER,infos+0 },
881+ {descriptorSet.get (),1u ,0u ,denoiserInputCount ,EDT_STORAGE_BUFFER,infos+EII_COUNT},
875882 {descriptorSet.get (),2u ,0u ,1u ,EDT_STORAGE_BUFFER,infos+EII_COUNT*2u },
876883 {descriptorSet.get (),3u ,0u ,1u ,EDT_STORAGE_BUFFER,infos+EII_COUNT*2u +1u }
877884 };
0 commit comments