diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/renderer_vulkan/maxwell_to_vk.cpp | 9 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/maxwell_to_vk.h | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_sampler_cache.cpp | 6 | 
3 files changed, 11 insertions, 6 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; diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.h b/src/video_core/renderer_vulkan/maxwell_to_vk.h index 1534b738b..7e9678b7b 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.h +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.h @@ -22,7 +22,7 @@ vk::Filter Filter(Tegra::Texture::TextureFilter filter);  vk::SamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter); -vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode, +vk::SamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode,                                  Tegra::Texture::TextureFilter filter);  vk::CompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func); diff --git a/src/video_core/renderer_vulkan/vk_sampler_cache.cpp b/src/video_core/renderer_vulkan/vk_sampler_cache.cpp index 1ce583f75..0a8ec8398 100644 --- a/src/video_core/renderer_vulkan/vk_sampler_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_sampler_cache.cpp @@ -46,9 +46,9 @@ UniqueSampler VKSamplerCache::CreateSampler(const Tegra::Texture::TSCEntry& tsc)          {}, MaxwellToVK::Sampler::Filter(tsc.mag_filter),          MaxwellToVK::Sampler::Filter(tsc.min_filter),          MaxwellToVK::Sampler::MipmapMode(tsc.mipmap_filter), -        MaxwellToVK::Sampler::WrapMode(tsc.wrap_u, tsc.mag_filter), -        MaxwellToVK::Sampler::WrapMode(tsc.wrap_v, tsc.mag_filter), -        MaxwellToVK::Sampler::WrapMode(tsc.wrap_p, tsc.mag_filter), tsc.GetLodBias(), +        MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_u, tsc.mag_filter), +        MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_v, tsc.mag_filter), +        MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_p, tsc.mag_filter), tsc.GetLodBias(),          has_anisotropy, max_anisotropy, tsc.depth_compare_enabled,          MaxwellToVK::Sampler::DepthCompareFunction(tsc.depth_compare_func), tsc.GetMinLod(),          tsc.GetMaxLod(), vk_border_color.value_or(vk::BorderColor::eFloatTransparentBlack), | 
