summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-01-14 01:16:06 +0100
committerGitHub <noreply@github.com>2020-01-14 01:16:06 +0100
commit6985eea519158744833d1272ab8885ecf45cf543 (patch)
tree115dcbc84ecc757542c00814d0941fe8bbea77a9 /src/video_core/renderer_vulkan/maxwell_to_vk.cpp
parentMerge pull request #3292 from degasus/heap_space_fix (diff)
parentmaxwell_to_vk: Implement GL_CLAMP hacking Nvidia's driver (diff)
downloadyuzu-6985eea519158744833d1272ab8885ecf45cf543.tar
yuzu-6985eea519158744833d1272ab8885ecf45cf543.tar.gz
yuzu-6985eea519158744833d1272ab8885ecf45cf543.tar.bz2
yuzu-6985eea519158744833d1272ab8885ecf45cf543.tar.lz
yuzu-6985eea519158744833d1272ab8885ecf45cf543.tar.xz
yuzu-6985eea519158744833d1272ab8885ecf45cf543.tar.zst
yuzu-6985eea519158744833d1272ab8885ecf45cf543.zip
Diffstat (limited to 'src/video_core/renderer_vulkan/maxwell_to_vk.cpp')
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
index 000e3616d..331808113 100644
--- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
+++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
@@ -44,7 +44,7 @@ vk::SamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filt
return {};
}
-vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode,
+vk::SamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode,
Tegra::Texture::TextureFilter filter) {
switch (wrap_mode) {
case Tegra::Texture::WrapMode::Wrap:
@@ -56,7 +56,12 @@ vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode,
case Tegra::Texture::WrapMode::Border:
return vk::SamplerAddressMode::eClampToBorder;
case Tegra::Texture::WrapMode::Clamp:
- // TODO(Rodrigo): Emulate GL_CLAMP properly
+ if (device.GetDriverID() == vk::DriverIdKHR::eNvidiaProprietary) {
+ // Nvidia's Vulkan driver defaults to GL_CLAMP on invalid enumerations, we can hack this
+ // by sending an invalid enumeration.
+ return static_cast<vk::SamplerAddressMode>(0xcafe);
+ }
+ // TODO(Rodrigo): Emulate GL_CLAMP properly on other vendors
switch (filter) {
case Tegra::Texture::TextureFilter::Nearest:
return vk::SamplerAddressMode::eClampToEdge;