From 908325c29ebc94e58289911f64ebfb451679011c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Tue, 25 Apr 2023 14:14:01 +0200 Subject: Fix unsupported sampler filter used for voxel GI (cherry picked from commit 09aa1bbdb3c9dc4891a192854636a4e33ccd46bc) --- drivers/vulkan/rendering_device_vulkan.cpp | 12 ++++++++++++ drivers/vulkan/rendering_device_vulkan.h | 1 + 2 files changed, 13 insertions(+) (limited to 'drivers') diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp index 2f01376a45..f6cc2ae4f1 100644 --- a/drivers/vulkan/rendering_device_vulkan.cpp +++ b/drivers/vulkan/rendering_device_vulkan.cpp @@ -4306,6 +4306,18 @@ RID RenderingDeviceVulkan::sampler_create(const SamplerState &p_state) { return id; } +bool RenderingDeviceVulkan::sampler_is_format_supported_for_filter(DataFormat p_format, SamplerFilter p_sampler_filter) const { + ERR_FAIL_INDEX_V(p_format, DATA_FORMAT_MAX, false); + + _THREAD_SAFE_METHOD_ + + // Validate that this image is supported for the intended filtering. + VkFormatProperties properties; + vkGetPhysicalDeviceFormatProperties(context->get_physical_device(), vulkan_formats[p_format], &properties); + + return p_sampler_filter == RD::SAMPLER_FILTER_NEAREST || (p_sampler_filter == RD::SAMPLER_FILTER_LINEAR && (properties.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)); +} + /**********************/ /**** VERTEX ARRAY ****/ /**********************/ diff --git a/drivers/vulkan/rendering_device_vulkan.h b/drivers/vulkan/rendering_device_vulkan.h index 3f01895745..2ec1574955 100644 --- a/drivers/vulkan/rendering_device_vulkan.h +++ b/drivers/vulkan/rendering_device_vulkan.h @@ -1084,6 +1084,7 @@ public: /*****************/ virtual RID sampler_create(const SamplerState &p_state); + virtual bool sampler_is_format_supported_for_filter(DataFormat p_format, SamplerFilter p_sampler_filter) const; /**********************/ /**** VERTEX ARRAY ****/ -- cgit v1.2.3