Skip to content

Commit 1a8202d

Browse files
16k works but only sometimes (too little VRAM? allocation fails?) always works without Normal buffer
1 parent 4446333 commit 1a8202d

File tree

1 file changed

+20
-13
lines changed
  • examples_tests/39.DenoiserTonemapper

1 file changed

+20
-13
lines changed

examples_tests/39.DenoiserTonemapper/main.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)