Parcourir la source

vulkan: Conditionally use shaderInt16

Add support for Polaris AMD devices.
ReinUsesLisp il y a 5 ans
Parent
commit
1148a4eac7

+ 1 - 1
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

@@ -249,7 +249,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, Tegra::Engines::Maxw
         .unified_descriptor_binding = true,
         .unified_descriptor_binding = true,
         .support_descriptor_aliasing = true,
         .support_descriptor_aliasing = true,
         .support_int8 = true,
         .support_int8 = true,
-        .support_int16 = true,
+        .support_int16 = device.IsShaderInt16Supported(),
         .support_vertex_instance_id = false,
         .support_vertex_instance_id = false,
         .support_float_controls = true,
         .support_float_controls = true,
         .support_separate_denorm_behavior = float_control.denormBehaviorIndependence ==
         .support_separate_denorm_behavior = float_control.denormBehaviorIndependence ==

+ 2 - 1
src/video_core/vulkan_common/vulkan_device.cpp

@@ -253,7 +253,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
             .shaderCullDistance = true,
             .shaderCullDistance = true,
             .shaderFloat64 = is_shader_float64_supported,
             .shaderFloat64 = is_shader_float64_supported,
             .shaderInt64 = is_shader_int64_supported,
             .shaderInt64 = is_shader_int64_supported,
-            .shaderInt16 = true,
+            .shaderInt16 = is_shader_int16_supported,
             .shaderResourceResidency = false,
             .shaderResourceResidency = false,
             .shaderResourceMinLod = false,
             .shaderResourceMinLod = false,
             .sparseBinding = false,
             .sparseBinding = false,
@@ -912,6 +912,7 @@ void Device::SetupFeatures() {
     is_formatless_image_load_supported = features.shaderStorageImageReadWithoutFormat;
     is_formatless_image_load_supported = features.shaderStorageImageReadWithoutFormat;
     is_shader_float64_supported = features.shaderFloat64;
     is_shader_float64_supported = features.shaderFloat64;
     is_shader_int64_supported = features.shaderInt64;
     is_shader_int64_supported = features.shaderInt64;
+    is_shader_int16_supported = features.shaderInt16;
     is_shader_storage_image_multisample = features.shaderStorageImageMultisample;
     is_shader_storage_image_multisample = features.shaderStorageImageMultisample;
     is_blit_depth_stencil_supported = TestDepthStencilBlits();
     is_blit_depth_stencil_supported = TestDepthStencilBlits();
     is_optimal_astc_supported = IsOptimalAstcSupported(features);
     is_optimal_astc_supported = IsOptimalAstcSupported(features);

+ 6 - 0
src/video_core/vulkan_common/vulkan_device.h

@@ -159,6 +159,11 @@ public:
         return is_formatless_image_load_supported;
         return is_formatless_image_load_supported;
     }
     }
 
 
+    /// Returns true if shader int16 is supported.
+    bool IsShaderInt16Supported() const {
+        return is_shader_int16_supported;
+    }
+
     // Returns true if depth bounds is supported.
     // Returns true if depth bounds is supported.
     bool IsDepthBoundsSupported() const {
     bool IsDepthBoundsSupported() const {
         return is_depth_bounds_supported;
         return is_depth_bounds_supported;
@@ -322,6 +327,7 @@ private:
     bool is_depth_bounds_supported{};           ///< Support for depth bounds.
     bool is_depth_bounds_supported{};           ///< Support for depth bounds.
     bool is_shader_float64_supported{};         ///< Support for float64.
     bool is_shader_float64_supported{};         ///< Support for float64.
     bool is_shader_int64_supported{};           ///< Support for int64.
     bool is_shader_int64_supported{};           ///< Support for int64.
+    bool is_shader_int16_supported{};           ///< Support for int16.
     bool is_shader_storage_image_multisample{}; ///< Support for image operations on MSAA images.
     bool is_shader_storage_image_multisample{}; ///< Support for image operations on MSAA images.
     bool is_blit_depth_stencil_supported{};     ///< Support for blitting from and to depth stencil.
     bool is_blit_depth_stencil_supported{};     ///< Support for blitting from and to depth stencil.
     bool nv_viewport_swizzle{};                 ///< Support for VK_NV_viewport_swizzle.
     bool nv_viewport_swizzle{};                 ///< Support for VK_NV_viewport_swizzle.