Closed Bizzarrus closed 4 months ago
Proper description of the issue:
Vulkan::dispatch(...)
(vulkan.cpp), there is no error handling for when processDescriptors
returns an error. As an result, the issue described here will actually manifest as a nullptr exception, because the pipeline has never been built.Vulkan::processDescriptors
(eg `poolSizes specifies 6 descriptors for NIS, but it tries to allocate 64 descriptor sets from that pool)Repro:
SLWrapper::FindAdapter
to not test for support of DLSS/DLSS_G/Reflex, otherwise it will not give you any adapter
2.3. You might also have to disable the slReflexSleep
call in SLWrapper::Callback_FrameCount_Reflex_Sleep_Input_SimStart
, as this seem to freeze on a vk semaphore
2.4. You'll also have to modify the code inside SLWrapper::TagResources_DLSS_NIS
to actually set the input and output resource states when using vulkan (outputResource.state = uint32_t(vk::ImageLayout::eTransferSrcOptimal);
and inputResource.state = uint32_t(vk::ImageLayout::eTransferDstOptimal);
worked for me)
2.5. You might also have to add setShaderFloat16(true)
to the vk::PhysicalDeviceVulkan12Features()
when creating the vulkan device-vk -debug
Proposed fix:
Vulkan::dispatch
function, if processDescriptors
returns something other than ComputeStatus::eOk
, this error should be returned immediately instead of continuing the function code.Vulkan::processDescriptors
function, multiply ps.descriptorCount
with thread.kernel->numDescriptors
to allocate sufficient descriptors for all descriptor sets.
Hi :) I tried to integrate Streamline in our Vulkan backend, and when I try to EvaluateFeature(kFeatureNIS), I get a VK_ERROR_OUT_OF_POOL_MEMORY error inside the Vulkan::processDescriptors function.
From what I understand, the issue is that poolSizes only specifies the number of descriptors for a single descriptor set, but the code tries to create 64 descriptor sets, thus the second call of m_ddt.AllocateDescriptorSets fails.