diff options
Diffstat (limited to 'src')
| -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 | |||
| 44 | return {}; | 44 | return {}; |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode, | 47 | vk::SamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode, |
| 48 | Tegra::Texture::TextureFilter filter) { | 48 | Tegra::Texture::TextureFilter filter) { |
| 49 | switch (wrap_mode) { | 49 | switch (wrap_mode) { |
| 50 | case Tegra::Texture::WrapMode::Wrap: | 50 | case Tegra::Texture::WrapMode::Wrap: |
| @@ -56,7 +56,12 @@ vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode, | |||
| 56 | case Tegra::Texture::WrapMode::Border: | 56 | case Tegra::Texture::WrapMode::Border: |
| 57 | return vk::SamplerAddressMode::eClampToBorder; | 57 | return vk::SamplerAddressMode::eClampToBorder; |
| 58 | case Tegra::Texture::WrapMode::Clamp: | 58 | case Tegra::Texture::WrapMode::Clamp: |
| 59 | // TODO(Rodrigo): Emulate GL_CLAMP properly | 59 | if (device.GetDriverID() == vk::DriverIdKHR::eNvidiaProprietary) { |
| 60 | // Nvidia's Vulkan driver defaults to GL_CLAMP on invalid enumerations, we can hack this | ||
| 61 | // by sending an invalid enumeration. | ||
| 62 | return static_cast<vk::SamplerAddressMode>(0xcafe); | ||
| 63 | } | ||
| 64 | // TODO(Rodrigo): Emulate GL_CLAMP properly on other vendors | ||
| 60 | switch (filter) { | 65 | switch (filter) { |
| 61 | case Tegra::Texture::TextureFilter::Nearest: | 66 | case Tegra::Texture::TextureFilter::Nearest: |
| 62 | return vk::SamplerAddressMode::eClampToEdge; | 67 | 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); | |||
| 22 | 22 | ||
| 23 | vk::SamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter); | 23 | vk::SamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter); |
| 24 | 24 | ||
| 25 | vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode, | 25 | vk::SamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode, |
| 26 | Tegra::Texture::TextureFilter filter); | 26 | Tegra::Texture::TextureFilter filter); |
| 27 | 27 | ||
| 28 | vk::CompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func); | 28 | 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) | |||
| 46 | {}, MaxwellToVK::Sampler::Filter(tsc.mag_filter), | 46 | {}, MaxwellToVK::Sampler::Filter(tsc.mag_filter), |
| 47 | MaxwellToVK::Sampler::Filter(tsc.min_filter), | 47 | MaxwellToVK::Sampler::Filter(tsc.min_filter), |
| 48 | MaxwellToVK::Sampler::MipmapMode(tsc.mipmap_filter), | 48 | MaxwellToVK::Sampler::MipmapMode(tsc.mipmap_filter), |
| 49 | MaxwellToVK::Sampler::WrapMode(tsc.wrap_u, tsc.mag_filter), | 49 | MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_u, tsc.mag_filter), |
| 50 | MaxwellToVK::Sampler::WrapMode(tsc.wrap_v, tsc.mag_filter), | 50 | MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_v, tsc.mag_filter), |
| 51 | MaxwellToVK::Sampler::WrapMode(tsc.wrap_p, tsc.mag_filter), tsc.GetLodBias(), | 51 | MaxwellToVK::Sampler::WrapMode(device, tsc.wrap_p, tsc.mag_filter), tsc.GetLodBias(), |
| 52 | has_anisotropy, max_anisotropy, tsc.depth_compare_enabled, | 52 | has_anisotropy, max_anisotropy, tsc.depth_compare_enabled, |
| 53 | MaxwellToVK::Sampler::DepthCompareFunction(tsc.depth_compare_func), tsc.GetMinLod(), | 53 | MaxwellToVK::Sampler::DepthCompareFunction(tsc.depth_compare_func), tsc.GetMinLod(), |
| 54 | tsc.GetMaxLod(), vk_border_color.value_or(vk::BorderColor::eFloatTransparentBlack), | 54 | tsc.GetMaxLod(), vk_border_color.value_or(vk::BorderColor::eFloatTransparentBlack), |