diff options
| author | 2015-07-21 18:27:50 -0400 | |
|---|---|---|
| committer | 2015-07-21 18:27:50 -0400 | |
| commit | 3a5352baf8a5008a73a7f003265a4e36aaac8b39 (patch) | |
| tree | 41ee1deefda790995bb471aecffaaca4b2fe574c /src | |
| parent | Merge pull request #962 from Subv/am_app (diff) | |
| parent | GPU: Added registers for min and mag texture filters and implemented them in ... (diff) | |
| download | yuzu-3a5352baf8a5008a73a7f003265a4e36aaac8b39.tar.gz yuzu-3a5352baf8a5008a73a7f003265a4e36aaac8b39.tar.xz yuzu-3a5352baf8a5008a73a7f003265a4e36aaac8b39.zip | |
Merge pull request #968 from Subv/texture_filtering
GPU: Added registers for min and mag texture filters
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/pica.h | 7 | ||||
| -rw-r--r-- | src/video_core/rasterizer.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/pica_to_gl.h | 27 |
4 files changed, 37 insertions, 3 deletions
diff --git a/src/video_core/pica.h b/src/video_core/pica.h index 5da182794..aec6f0660 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h | |||
| @@ -119,6 +119,11 @@ struct Regs { | |||
| 119 | MirroredRepeat = 3, | 119 | MirroredRepeat = 3, |
| 120 | }; | 120 | }; |
| 121 | 121 | ||
| 122 | enum TextureFilter : u32 { | ||
| 123 | Nearest = 0, | ||
| 124 | Linear = 1 | ||
| 125 | }; | ||
| 126 | |||
| 122 | union { | 127 | union { |
| 123 | BitField< 0, 8, u32> r; | 128 | BitField< 0, 8, u32> r; |
| 124 | BitField< 8, 8, u32> g; | 129 | BitField< 8, 8, u32> g; |
| @@ -132,6 +137,8 @@ struct Regs { | |||
| 132 | }; | 137 | }; |
| 133 | 138 | ||
| 134 | union { | 139 | union { |
| 140 | BitField< 1, 1, TextureFilter> mag_filter; | ||
| 141 | BitField< 2, 1, TextureFilter> min_filter; | ||
| 135 | BitField< 8, 2, WrapMode> wrap_t; | 142 | BitField< 8, 2, WrapMode> wrap_t; |
| 136 | BitField<12, 2, WrapMode> wrap_s; | 143 | BitField<12, 2, WrapMode> wrap_s; |
| 137 | }; | 144 | }; |
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index a6b7997ce..e2b90ad1c 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp | |||
| @@ -460,6 +460,7 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0, | |||
| 460 | u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); | 460 | u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); |
| 461 | auto info = DebugUtils::TextureInfo::FromPicaRegister(texture.config, texture.format); | 461 | auto info = DebugUtils::TextureInfo::FromPicaRegister(texture.config, texture.format); |
| 462 | 462 | ||
| 463 | // TODO: Apply the min and mag filters to the texture | ||
| 463 | texture_color[i] = DebugUtils::LookupTexture(texture_data, s, t, info); | 464 | texture_color[i] = DebugUtils::LookupTexture(texture_data, s, t, info); |
| 464 | DebugUtils::DumpTexture(texture.config, texture_data); | 465 | DebugUtils::DumpTexture(texture.config, texture_data); |
| 465 | } | 466 | } |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 2e4110a88..0e4f8e1ec 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -31,9 +31,8 @@ void RasterizerCacheOpenGL::LoadAndBindTexture(OpenGLState &state, unsigned text | |||
| 31 | state.texture_units[texture_unit].texture_2d = new_texture->texture.handle; | 31 | state.texture_units[texture_unit].texture_2d = new_texture->texture.handle; |
| 32 | state.Apply(); | 32 | state.Apply(); |
| 33 | 33 | ||
| 34 | // TODO: Need to choose filters that correspond to PICA once register is declared | 34 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, PicaToGL::TextureFilterMode(config.config.mag_filter)); |
| 35 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | 35 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, PicaToGL::TextureFilterMode(config.config.min_filter)); |
| 36 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | ||
| 37 | 36 | ||
| 38 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, PicaToGL::WrapMode(config.config.wrap_s)); | 37 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, PicaToGL::WrapMode(config.config.wrap_s)); |
| 39 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, PicaToGL::WrapMode(config.config.wrap_t)); | 38 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, PicaToGL::WrapMode(config.config.wrap_t)); |
diff --git a/src/video_core/renderer_opengl/pica_to_gl.h b/src/video_core/renderer_opengl/pica_to_gl.h index 73f63c55d..3b562da86 100644 --- a/src/video_core/renderer_opengl/pica_to_gl.h +++ b/src/video_core/renderer_opengl/pica_to_gl.h | |||
| @@ -12,6 +12,33 @@ | |||
| 12 | 12 | ||
| 13 | namespace PicaToGL { | 13 | namespace PicaToGL { |
| 14 | 14 | ||
| 15 | inline GLenum TextureFilterMode(Pica::Regs::TextureConfig::TextureFilter mode) { | ||
| 16 | static const GLenum filter_mode_table[] = { | ||
| 17 | GL_NEAREST, // TextureFilter::Nearest | ||
| 18 | GL_LINEAR // TextureFilter::Linear | ||
| 19 | }; | ||
| 20 | |||
| 21 | // Range check table for input | ||
| 22 | if (mode >= ARRAY_SIZE(filter_mode_table)) { | ||
| 23 | LOG_CRITICAL(Render_OpenGL, "Unknown texture filtering mode %d", mode); | ||
| 24 | UNREACHABLE(); | ||
| 25 | |||
| 26 | return GL_LINEAR; | ||
| 27 | } | ||
| 28 | |||
| 29 | GLenum gl_mode = filter_mode_table[mode]; | ||
| 30 | |||
| 31 | // Check for dummy values indicating an unknown mode | ||
| 32 | if (gl_mode == 0) { | ||
| 33 | LOG_CRITICAL(Render_OpenGL, "Unknown texture filtering mode %d", mode); | ||
| 34 | UNIMPLEMENTED(); | ||
| 35 | |||
| 36 | return GL_LINEAR; | ||
| 37 | } | ||
| 38 | |||
| 39 | return gl_mode; | ||
| 40 | } | ||
| 41 | |||
| 15 | inline GLenum WrapMode(Pica::Regs::TextureConfig::WrapMode mode) { | 42 | inline GLenum WrapMode(Pica::Regs::TextureConfig::WrapMode mode) { |
| 16 | static const GLenum wrap_mode_table[] = { | 43 | static const GLenum wrap_mode_table[] = { |
| 17 | GL_CLAMP_TO_EDGE, // WrapMode::ClampToEdge | 44 | GL_CLAMP_TO_EDGE, // WrapMode::ClampToEdge |