diff options
| author | 2019-07-12 02:17:18 -0300 | |
|---|---|---|
| committer | 2019-09-05 20:35:51 -0300 | |
| commit | 954fc02fdd639a3e83ade8776d23b50559cd2f73 (patch) | |
| tree | 5ff6bb093e484379c082437a5376ddb75ab4e9d4 /src | |
| parent | gl_state: Split textures and samplers into two arrays (diff) | |
| download | yuzu-954fc02fdd639a3e83ade8776d23b50559cd2f73.tar.gz yuzu-954fc02fdd639a3e83ade8776d23b50559cd2f73.tar.xz yuzu-954fc02fdd639a3e83ade8776d23b50559cd2f73.zip | |
gl_rasterizer: Minor code changes
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 43 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 8 |
2 files changed, 31 insertions, 20 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 818e71754..5454bacb0 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -998,17 +998,17 @@ TextureBufferUsage RasterizerOpenGL::SetupDrawTextures(Maxwell::ShaderStage stag | |||
| 998 | 998 | ||
| 999 | for (u32 bindpoint = 0; bindpoint < entries.size(); ++bindpoint) { | 999 | for (u32 bindpoint = 0; bindpoint < entries.size(); ++bindpoint) { |
| 1000 | const auto& entry = entries[bindpoint]; | 1000 | const auto& entry = entries[bindpoint]; |
| 1001 | Tegra::Texture::FullTextureInfo texture; | 1001 | const auto texture = [&]() { |
| 1002 | if (entry.IsBindless()) { | 1002 | if (!entry.IsBindless()) { |
| 1003 | return maxwell3d.GetStageTexture(stage, entry.GetOffset()); | ||
| 1004 | } | ||
| 1003 | const auto cbuf = entry.GetBindlessCBuf(); | 1005 | const auto cbuf = entry.GetBindlessCBuf(); |
| 1004 | Tegra::Texture::TextureHandle tex_handle; | 1006 | Tegra::Texture::TextureHandle tex_handle; |
| 1005 | tex_handle.raw = maxwell3d.AccessConstBuffer32(stage, cbuf.first, cbuf.second); | 1007 | tex_handle.raw = maxwell3d.AccessConstBuffer32(stage, cbuf.first, cbuf.second); |
| 1006 | texture = maxwell3d.GetTextureInfo(tex_handle, entry.GetOffset()); | 1008 | return maxwell3d.GetTextureInfo(tex_handle, entry.GetOffset()); |
| 1007 | } else { | 1009 | }(); |
| 1008 | texture = maxwell3d.GetStageTexture(stage, entry.GetOffset()); | ||
| 1009 | } | ||
| 1010 | 1010 | ||
| 1011 | if (SetupTexture(shader, base_bindings.sampler + bindpoint, texture, entry)) { | 1011 | if (SetupTexture(base_bindings.sampler + bindpoint, texture, entry)) { |
| 1012 | texture_buffer_usage.set(bindpoint); | 1012 | texture_buffer_usage.set(bindpoint); |
| 1013 | } | 1013 | } |
| 1014 | } | 1014 | } |
| @@ -1016,8 +1016,7 @@ TextureBufferUsage RasterizerOpenGL::SetupDrawTextures(Maxwell::ShaderStage stag | |||
| 1016 | return texture_buffer_usage; | 1016 | return texture_buffer_usage; |
| 1017 | } | 1017 | } |
| 1018 | 1018 | ||
| 1019 | bool RasterizerOpenGL::SetupTexture(const Shader& shader, u32 binding, | 1019 | bool RasterizerOpenGL::SetupTexture(u32 binding, const Tegra::Texture::FullTextureInfo& texture, |
| 1020 | const Tegra::Texture::FullTextureInfo& texture, | ||
| 1021 | const GLShader::SamplerEntry& entry) { | 1020 | const GLShader::SamplerEntry& entry) { |
| 1022 | state.samplers[binding] = sampler_cache.GetSampler(texture.tsc); | 1021 | state.samplers[binding] = sampler_cache.GetSampler(texture.tsc); |
| 1023 | 1022 | ||
| @@ -1044,22 +1043,30 @@ void RasterizerOpenGL::SetupComputeImages(const Shader& shader) { | |||
| 1044 | const auto& entries = shader->GetShaderEntries().images; | 1043 | const auto& entries = shader->GetShaderEntries().images; |
| 1045 | for (u32 bindpoint = 0; bindpoint < entries.size(); ++bindpoint) { | 1044 | for (u32 bindpoint = 0; bindpoint < entries.size(); ++bindpoint) { |
| 1046 | const auto& entry = entries[bindpoint]; | 1045 | const auto& entry = entries[bindpoint]; |
| 1047 | const auto texture = [&]() { | 1046 | const auto tic = [&]() { |
| 1048 | if (!entry.IsBindless()) { | 1047 | if (!entry.IsBindless()) { |
| 1049 | return compute.GetTexture(entry.GetOffset()); | 1048 | return compute.GetTexture(entry.GetOffset()).tic; |
| 1050 | } | 1049 | } |
| 1051 | const auto cbuf = entry.GetBindlessCBuf(); | 1050 | const auto cbuf = entry.GetBindlessCBuf(); |
| 1052 | Tegra::Texture::TextureHandle tex_handle; | 1051 | Tegra::Texture::TextureHandle tex_handle; |
| 1053 | tex_handle.raw = compute.AccessConstBuffer32(cbuf.first, cbuf.second); | 1052 | tex_handle.raw = compute.AccessConstBuffer32(cbuf.first, cbuf.second); |
| 1054 | return compute.GetTextureInfo(tex_handle, entry.GetOffset()); | 1053 | return compute.GetTextureInfo(tex_handle, entry.GetOffset()).tic; |
| 1055 | }(); | 1054 | }(); |
| 1056 | const auto view = texture_cache.GetImageSurface(texture.tic, entry); | 1055 | SetupImage(bindpoint, tic, entry); |
| 1057 | if (!view) { | 1056 | } |
| 1058 | state.images[bindpoint] = 0; | 1057 | } |
| 1059 | continue; | 1058 | |
| 1060 | } | 1059 | void RasterizerOpenGL::SetupImage(u32 binding, const Tegra::Texture::TICEntry& tic, |
| 1061 | state.images[bindpoint] = view->GetTexture(); | 1060 | const GLShader::ImageEntry& entry) { |
| 1061 | const auto view = texture_cache.GetImageSurface(tic, entry); | ||
| 1062 | if (!view) { | ||
| 1063 | state.images[binding] = 0; | ||
| 1064 | return; | ||
| 1065 | } | ||
| 1066 | if (!tic.IsBuffer()) { | ||
| 1067 | view->ApplySwizzle(tic.x_source, tic.y_source, tic.z_source, tic.w_source); | ||
| 1062 | } | 1068 | } |
| 1069 | state.images[binding] = view->GetTexture(); | ||
| 1063 | } | 1070 | } |
| 1064 | 1071 | ||
| 1065 | void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { | 1072 | void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 6fa1b7ec4..35265b4a2 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -142,12 +142,16 @@ private: | |||
| 142 | const Shader& shader, BaseBindings base_bindings); | 142 | const Shader& shader, BaseBindings base_bindings); |
| 143 | 143 | ||
| 144 | /// Configures a texture. Returns true when the texture is a texture buffer. | 144 | /// Configures a texture. Returns true when the texture is a texture buffer. |
| 145 | bool SetupTexture(const Shader& shader, u32 binding, | 145 | bool SetupTexture(u32 binding, const Tegra::Texture::FullTextureInfo& texture, |
| 146 | const Tegra::Texture::FullTextureInfo& texture, | ||
| 147 | const GLShader::SamplerEntry& entry); | 146 | const GLShader::SamplerEntry& entry); |
| 148 | 147 | ||
| 148 | /// Configures images in a compute shader. | ||
| 149 | void SetupComputeImages(const Shader& shader); | 149 | void SetupComputeImages(const Shader& shader); |
| 150 | 150 | ||
| 151 | /// Configures an image. | ||
| 152 | void SetupImage(u32 binding, const Tegra::Texture::TICEntry& tic, | ||
| 153 | const GLShader::ImageEntry& entry); | ||
| 154 | |||
| 151 | /// Syncs the viewport and depth range to match the guest state | 155 | /// Syncs the viewport and depth range to match the guest state |
| 152 | void SyncViewport(OpenGLState& current_state); | 156 | void SyncViewport(OpenGLState& current_state); |
| 153 | 157 | ||