|
|
@@ -44,7 +44,8 @@ vk::SamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filt
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
-vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode) {
|
|
|
+vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode,
|
|
|
+ Tegra::Texture::TextureFilter filter) {
|
|
|
switch (wrap_mode) {
|
|
|
case Tegra::Texture::WrapMode::Wrap:
|
|
|
return vk::SamplerAddressMode::eRepeat;
|
|
|
@@ -55,10 +56,15 @@ vk::SamplerAddressMode WrapMode(Tegra::Texture::WrapMode wrap_mode) {
|
|
|
case Tegra::Texture::WrapMode::Border:
|
|
|
return vk::SamplerAddressMode::eClampToBorder;
|
|
|
case Tegra::Texture::WrapMode::Clamp:
|
|
|
- // TODO(Rodrigo): GL_CLAMP was removed as of OpenGL 3.1, to implement GL_CLAMP, we can use
|
|
|
- // eClampToBorder to get the border color of the texture, and then sample the edge to
|
|
|
- // manually mix them. However the shader part of this is not yet implemented.
|
|
|
- return vk::SamplerAddressMode::eClampToBorder;
|
|
|
+ // TODO(Rodrigo): Emulate GL_CLAMP properly
|
|
|
+ switch (filter) {
|
|
|
+ case Tegra::Texture::TextureFilter::Nearest:
|
|
|
+ return vk::SamplerAddressMode::eClampToEdge;
|
|
|
+ case Tegra::Texture::TextureFilter::Linear:
|
|
|
+ return vk::SamplerAddressMode::eClampToBorder;
|
|
|
+ }
|
|
|
+ UNREACHABLE();
|
|
|
+ return vk::SamplerAddressMode::eClampToEdge;
|
|
|
case Tegra::Texture::WrapMode::MirrorOnceClampToEdge:
|
|
|
return vk::SamplerAddressMode::eMirrorClampToEdge;
|
|
|
case Tegra::Texture::WrapMode::MirrorOnceBorder:
|