mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-07-02 06:55:33 +02:00
[vk, renderdoc] (VUID-02997) avoid vk_image_view as VK_NULL_HANDLE when feature nullDescriptor is unavailable (#4056)
This minor change in src\video_core\renderer_vulkan\pipeline_helper.h allows renderdoc capture on mhr sunbreak. Maybe it sanitizes some crashes on old vulkan GPUs. Device log (nvidia kepler gpu vulkan 1.1.117): [ 17.605262] Render.Vulkan <Info> video_core\vulkan_common\vulkan_device.cpp:1041:GetSuitability: Device doesn't support feature nullDescriptor VUID-VkWriteDescriptorSet-descriptorType-02997 For sampled/combined/storage image descriptors, Khronos says imageView must be valid or VK_NULL_HANDLE (https://docs.vulkan.org/refpages/latest/refpages/source/VkPhysicalDeviceRobustness2FeaturesKHR.html) but then it says: if nullDescriptor is not enabled, imageView must not be VK_NULL_HANDLE. (https://docs.vulkan.org/spec/latest/chapters/descriptorsets.html) nullDescriptor is exactly the feature that allows descriptors to be written with null handles. The fix relies on conditionally replacing the null sampled view with Eden’s dummy null-image-view object (ImageView constructor checks HasNullDescriptor which checks features.robustness2.nullDescriptor. cheap checks, and only for null handles, so no notable cost). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4056 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
This commit is contained in:
parent
bdf60d79a0
commit
54c3d10b86
1 changed files with 5 additions and 1 deletions
|
|
@ -203,7 +203,11 @@ inline void PushImageDescriptors(TextureCache& texture_cache,
|
|||
const VideoCommon::ImageViewId image_view_id{(views++)->id};
|
||||
const VideoCommon::SamplerId sampler_id{*(samplers++)};
|
||||
ImageView& image_view{texture_cache.GetImageView(image_view_id)};
|
||||
const VkImageView vk_image_view{image_view.Handle(desc.type)};
|
||||
VkImageView vk_image_view{image_view.Handle(desc.type)};
|
||||
if (vk_image_view == VK_NULL_HANDLE) {
|
||||
const VkImageView null_image_view{texture_cache.GetImageView(VideoCommon::NULL_IMAGE_VIEW_ID).Handle(desc.type)};
|
||||
if (null_image_view != VK_NULL_HANDLE) vk_image_view = null_image_view;
|
||||
}
|
||||
const Sampler& sampler{texture_cache.GetSampler(sampler_id)};
|
||||
const bool use_fallback_sampler{sampler.HasAddedAnisotropy() &&
|
||||
!image_view.SupportsAnisotropy()};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue