diff options
| author | 2017-05-05 21:33:32 -0700 | |
|---|---|---|
| committer | 2017-05-05 21:33:32 -0700 | |
| commit | 2a01a03375401f4110a3a80de8ebf9bd48e46bc7 (patch) | |
| tree | 91c3dd5e60e0d977406b8e39adc1732d09a9d1ce /src/video_core/renderer_opengl | |
| parent | Create a random console_unique_id (#2668) (diff) | |
| parent | pica: shader_dirty if texture2 coord changed (diff) | |
| download | yuzu-2a01a03375401f4110a3a80de8ebf9bd48e46bc7.tar.gz yuzu-2a01a03375401f4110a3a80de8ebf9bd48e46bc7.tar.xz yuzu-2a01a03375401f4110a3a80de8ebf9bd48e46bc7.zip | |
Merge pull request #2686 from wwylele/tex-coord-reg
pica: use correct coordinates for texture 2
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_gen.cpp | 17 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_gen.h | 1 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index a47307099..12ac9bbd9 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -402,6 +402,10 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { | |||
| 402 | SyncLogicOp(); | 402 | SyncLogicOp(); |
| 403 | break; | 403 | break; |
| 404 | 404 | ||
| 405 | case PICA_REG_INDEX(texturing.main_config): | ||
| 406 | shader_dirty = true; | ||
| 407 | break; | ||
| 408 | |||
| 405 | // Texture 0 type | 409 | // Texture 0 type |
| 406 | case PICA_REG_INDEX(texturing.texture0.type): | 410 | case PICA_REG_INDEX(texturing.texture0.type): |
| 407 | shader_dirty = true; | 411 | shader_dirty = true; |
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 0f889b172..7b44dade8 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp | |||
| @@ -40,6 +40,8 @@ PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { | |||
| 40 | 40 | ||
| 41 | state.texture0_type = regs.texturing.texture0.type; | 41 | state.texture0_type = regs.texturing.texture0.type; |
| 42 | 42 | ||
| 43 | state.texture2_use_coord1 = regs.texturing.main_config.texture2_use_coord1 != 0; | ||
| 44 | |||
| 43 | // Copy relevant tev stages fields. | 45 | // Copy relevant tev stages fields. |
| 44 | // We don't sync const_color here because of the high variance, it is a | 46 | // We don't sync const_color here because of the high variance, it is a |
| 45 | // shader uniform instead. | 47 | // shader uniform instead. |
| @@ -126,6 +128,15 @@ static bool IsPassThroughTevStage(const TevStageConfig& stage) { | |||
| 126 | stage.GetColorMultiplier() == 1 && stage.GetAlphaMultiplier() == 1); | 128 | stage.GetColorMultiplier() == 1 && stage.GetAlphaMultiplier() == 1); |
| 127 | } | 129 | } |
| 128 | 130 | ||
| 131 | static std::string TexCoord(const PicaShaderConfig& config, int texture_unit) { | ||
| 132 | if (texture_unit == 2 && config.state.texture2_use_coord1) { | ||
| 133 | return "texcoord[1]"; | ||
| 134 | } | ||
| 135 | // TODO: if texture unit 3 (procedural texture) implementation also uses this function, | ||
| 136 | // config.state.texture3_coordinates should be repected here. | ||
| 137 | return "texcoord[" + std::to_string(texture_unit) + "]"; | ||
| 138 | } | ||
| 139 | |||
| 129 | /// Writes the specified TEV stage source component(s) | 140 | /// Writes the specified TEV stage source component(s) |
| 130 | static void AppendSource(std::string& out, const PicaShaderConfig& config, | 141 | static void AppendSource(std::string& out, const PicaShaderConfig& config, |
| 131 | TevStageConfig::Source source, const std::string& index_name) { | 142 | TevStageConfig::Source source, const std::string& index_name) { |
| @@ -162,7 +173,7 @@ static void AppendSource(std::string& out, const PicaShaderConfig& config, | |||
| 162 | out += "texture(tex[1], texcoord[1])"; | 173 | out += "texture(tex[1], texcoord[1])"; |
| 163 | break; | 174 | break; |
| 164 | case Source::Texture2: | 175 | case Source::Texture2: |
| 165 | out += "texture(tex[2], texcoord[2])"; | 176 | out += "texture(tex[2], " + TexCoord(config, 2) + ")"; |
| 166 | break; | 177 | break; |
| 167 | case Source::PreviousBuffer: | 178 | case Source::PreviousBuffer: |
| 168 | out += "combiner_buffer"; | 179 | out += "combiner_buffer"; |
| @@ -473,8 +484,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 473 | // Bump mapping is enabled using a normal map, read perturbation vector from the selected | 484 | // Bump mapping is enabled using a normal map, read perturbation vector from the selected |
| 474 | // texture | 485 | // texture |
| 475 | std::string bump_selector = std::to_string(lighting.bump_selector); | 486 | std::string bump_selector = std::to_string(lighting.bump_selector); |
| 476 | out += "vec3 surface_normal = 2.0 * texture(tex[" + bump_selector + "], texcoord[" + | 487 | out += "vec3 surface_normal = 2.0 * texture(tex[" + bump_selector + "], " + |
| 477 | bump_selector + "]).rgb - 1.0;\n"; | 488 | TexCoord(config, lighting.bump_selector) + ").rgb - 1.0;\n"; |
| 478 | 489 | ||
| 479 | // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher | 490 | // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher |
| 480 | // precision result | 491 | // precision result |
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.h b/src/video_core/renderer_opengl/gl_shader_gen.h index 921d976a1..3fb046b76 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.h +++ b/src/video_core/renderer_opengl/gl_shader_gen.h | |||
| @@ -79,6 +79,7 @@ union PicaShaderConfig { | |||
| 79 | Pica::FramebufferRegs::CompareFunc alpha_test_func; | 79 | Pica::FramebufferRegs::CompareFunc alpha_test_func; |
| 80 | Pica::RasterizerRegs::ScissorMode scissor_test_mode; | 80 | Pica::RasterizerRegs::ScissorMode scissor_test_mode; |
| 81 | Pica::TexturingRegs::TextureConfig::TextureType texture0_type; | 81 | Pica::TexturingRegs::TextureConfig::TextureType texture0_type; |
| 82 | bool texture2_use_coord1; | ||
| 82 | std::array<TevStageConfigRaw, 6> tev_stages; | 83 | std::array<TevStageConfigRaw, 6> tev_stages; |
| 83 | u8 combiner_buffer_input; | 84 | u8 combiner_buffer_input; |
| 84 | 85 | ||