summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2021-12-22 16:39:54 -0500
committerGitHub <noreply@github.com>2021-12-22 16:39:54 -0500
commitb1f79d9ecf87070c78789acdf5bc329637bc5812 (patch)
tree7d8321dcae2d694f3a131e003630e85d3cde732e /Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
parent820a424dcdf0095cf088abea921aaaac299dbccc (diff)
parent1c421444aed7673c30429f8b92e8ac3492cfb5b4 (diff)
Merge pull request #10215 from OatmealDome/shader-logic-ops
VideoCommon: Support shader logic ops on Metal (Apple GPUs) and OpenGL ES
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp')
-rw-r--r--Source/Core/VideoBackends/Vulkan/VulkanContext.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
index d8a2ab0a47..23cb06e846 100644
--- a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
+++ b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp
@@ -286,7 +286,7 @@ void VulkanContext::PopulateBackendInfo(VideoConfig* config)
config->backend_info.bSupportsBPTCTextures = false; // Dependent on features.
config->backend_info.bSupportsLogicOp = false; // Dependent on features.
config->backend_info.bSupportsLargePoints = false; // Dependent on features.
- config->backend_info.bSupportsFramebufferFetch = false; // No support.
+ config->backend_info.bSupportsFramebufferFetch = false; // Dependent on OS and features.
config->backend_info.bSupportsCoarseDerivatives = true; // Assumed support.
config->backend_info.bSupportsTextureQueryLevels = true; // Assumed support.
}
@@ -340,6 +340,15 @@ void VulkanContext::PopulateBackendInfoFeatures(VideoConfig* config, VkPhysicalD
properties.limits.pointSizeRange[0] <= 1.0f &&
properties.limits.pointSizeRange[1] >= 16;
+ std::string device_name = properties.deviceName;
+ u32 vendor_id = properties.vendorID;
+
+ // Only Apple family GPUs support framebuffer fetch.
+ if (vendor_id == 0x106B || device_name.find("Apple") != std::string::npos)
+ {
+ config->backend_info.bSupportsFramebufferFetch = true;
+ }
+
// Our usage of primitive restart appears to be broken on AMD's binary drivers.
// Seems to be fine on GCN Gen 1-2, unconfirmed on GCN Gen 3, causes driver resets on GCN Gen 4.
if (DriverDetails::HasBug(DriverDetails::BUG_PRIMITIVE_RESTART))