mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	Merge pull request #3452 from Morph1984/anisotropic-filtering
frontend/Graphics: Add "Advanced" graphics tab and experimental Anisotropic Filtering support
This commit is contained in:
		@@ -38,7 +38,7 @@ OGLSampler SamplerCacheOpenGL::CreateSampler(const Tegra::Texture::TSCEntry& tsc
 | 
			
		||||
        glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY, tsc.GetMaxAnisotropy());
 | 
			
		||||
    } else if (GLAD_GL_EXT_texture_filter_anisotropic) {
 | 
			
		||||
        glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY_EXT, tsc.GetMaxAnisotropy());
 | 
			
		||||
    } else if (tsc.GetMaxAnisotropy() != 1) {
 | 
			
		||||
    } else {
 | 
			
		||||
        LOG_WARNING(Render_OpenGL, "Anisotropy not supported by host GPU driver");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
#include "common/assert.h"
 | 
			
		||||
#include "common/bit_field.h"
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "core/settings.h"
 | 
			
		||||
 | 
			
		||||
namespace Tegra::Texture {
 | 
			
		||||
 | 
			
		||||
@@ -294,6 +295,14 @@ enum class TextureMipmapFilter : u32 {
 | 
			
		||||
    Linear = 3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum class Anisotropy {
 | 
			
		||||
    Default,
 | 
			
		||||
    Filter2x,
 | 
			
		||||
    Filter4x,
 | 
			
		||||
    Filter8x,
 | 
			
		||||
    Filter16x,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct TSCEntry {
 | 
			
		||||
    union {
 | 
			
		||||
        struct {
 | 
			
		||||
@@ -328,7 +337,20 @@ struct TSCEntry {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    float GetMaxAnisotropy() const {
 | 
			
		||||
        return static_cast<float>(1U << max_anisotropy);
 | 
			
		||||
        switch (static_cast<Anisotropy>(Settings::values.max_anisotropy)) {
 | 
			
		||||
        case Anisotropy::Default:
 | 
			
		||||
            return static_cast<float>(1U << max_anisotropy);
 | 
			
		||||
        case Anisotropy::Filter2x:
 | 
			
		||||
            return static_cast<float>(2U << max_anisotropy);
 | 
			
		||||
        case Anisotropy::Filter4x:
 | 
			
		||||
            return static_cast<float>(4U << max_anisotropy);
 | 
			
		||||
        case Anisotropy::Filter8x:
 | 
			
		||||
            return static_cast<float>(8U << max_anisotropy);
 | 
			
		||||
        case Anisotropy::Filter16x:
 | 
			
		||||
            return static_cast<float>(16U << max_anisotropy);
 | 
			
		||||
        default:
 | 
			
		||||
            return static_cast<float>(1U << max_anisotropy);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    float GetMinLod() const {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user