diff options
| author | 2019-08-29 15:59:17 -0400 | |
|---|---|---|
| committer | 2019-08-29 15:59:17 -0400 | |
| commit | a67c4e6e02132a33bb8c6097ee828112ed654c88 (patch) | |
| tree | 225dddcfa9562ce652b7f5497034ee0d265c5324 | |
| parent | Revert "externals: Update FMT to 6.0.0" (diff) | |
| parent | gl_shader_decompiler: Rename bufferImage to imageBuffer (diff) | |
| download | yuzu-a67c4e6e02132a33bb8c6097ee828112ed654c88.tar.gz yuzu-a67c4e6e02132a33bb8c6097ee828112ed654c88.tar.xz yuzu-a67c4e6e02132a33bb8c6097ee828112ed654c88.zip | |
Merge pull request #2742 from ReinUsesLisp/fix-texture-buffers
gl_texture_cache: Miscellaneous texture buffer fixes
4 files changed, 12 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index a32a7e984..c39626850 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -249,20 +249,24 @@ CachedProgram SpecializeShader(const std::string& code, const GLShader::ShaderEn | |||
| 249 | if (!texture_buffer_usage.test(i)) { | 249 | if (!texture_buffer_usage.test(i)) { |
| 250 | continue; | 250 | continue; |
| 251 | } | 251 | } |
| 252 | source += fmt::format("#define SAMPLER_{}_IS_BUFFER", i); | 252 | source += fmt::format("#define SAMPLER_{}_IS_BUFFER\n", i); |
| 253 | } | ||
| 254 | if (texture_buffer_usage.any()) { | ||
| 255 | source += '\n'; | ||
| 253 | } | 256 | } |
| 254 | 257 | ||
| 255 | if (program_type == ProgramType::Geometry) { | 258 | if (program_type == ProgramType::Geometry) { |
| 256 | const auto [glsl_topology, debug_name, max_vertices] = | 259 | const auto [glsl_topology, debug_name, max_vertices] = |
| 257 | GetPrimitiveDescription(primitive_mode); | 260 | GetPrimitiveDescription(primitive_mode); |
| 258 | 261 | ||
| 259 | source += "layout (" + std::string(glsl_topology) + ") in;\n"; | 262 | source += "layout (" + std::string(glsl_topology) + ") in;\n\n"; |
| 260 | source += "#define MAX_VERTEX_INPUT " + std::to_string(max_vertices) + '\n'; | 263 | source += "#define MAX_VERTEX_INPUT " + std::to_string(max_vertices) + '\n'; |
| 261 | } | 264 | } |
| 262 | if (program_type == ProgramType::Compute) { | 265 | if (program_type == ProgramType::Compute) { |
| 263 | source += "layout (local_size_variable) in;\n"; | 266 | source += "layout (local_size_variable) in;\n"; |
| 264 | } | 267 | } |
| 265 | 268 | ||
| 269 | source += '\n'; | ||
| 266 | source += code; | 270 | source += code; |
| 267 | 271 | ||
| 268 | OGLShader shader; | 272 | OGLShader shader; |
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 1bfdbcd61..359d58cbe 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -565,7 +565,7 @@ private: | |||
| 565 | case Tegra::Shader::ImageType::Texture1D: | 565 | case Tegra::Shader::ImageType::Texture1D: |
| 566 | return "image1D"; | 566 | return "image1D"; |
| 567 | case Tegra::Shader::ImageType::TextureBuffer: | 567 | case Tegra::Shader::ImageType::TextureBuffer: |
| 568 | return "bufferImage"; | 568 | return "imageBuffer"; |
| 569 | case Tegra::Shader::ImageType::Texture1DArray: | 569 | case Tegra::Shader::ImageType::Texture1DArray: |
| 570 | return "image1DArray"; | 570 | return "image1DArray"; |
| 571 | case Tegra::Shader::ImageType::Texture2D: | 571 | case Tegra::Shader::ImageType::Texture2D: |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 408332f90..4f135fe03 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -184,6 +184,9 @@ GLint GetSwizzleSource(SwizzleSource source) { | |||
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { | 186 | void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { |
| 187 | if (params.IsBuffer()) { | ||
| 188 | return; | ||
| 189 | } | ||
| 187 | glTextureParameteri(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 190 | glTextureParameteri(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 188 | glTextureParameteri(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | 191 | glTextureParameteri(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| 189 | glTextureParameteri(texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 192 | glTextureParameteri(texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| @@ -208,6 +211,7 @@ OGLTexture CreateTexture(const SurfaceParams& params, GLenum target, GLenum inte | |||
| 208 | glNamedBufferStorage(texture_buffer.handle, params.width * params.GetBytesPerPixel(), | 211 | glNamedBufferStorage(texture_buffer.handle, params.width * params.GetBytesPerPixel(), |
| 209 | nullptr, GL_DYNAMIC_STORAGE_BIT); | 212 | nullptr, GL_DYNAMIC_STORAGE_BIT); |
| 210 | glTextureBuffer(texture.handle, internal_format, texture_buffer.handle); | 213 | glTextureBuffer(texture.handle, internal_format, texture_buffer.handle); |
| 214 | break; | ||
| 211 | case SurfaceTarget::Texture2D: | 215 | case SurfaceTarget::Texture2D: |
| 212 | case SurfaceTarget::TextureCubemap: | 216 | case SurfaceTarget::TextureCubemap: |
| 213 | glTextureStorage2D(texture.handle, params.emulated_levels, internal_format, params.width, | 217 | glTextureStorage2D(texture.handle, params.emulated_levels, internal_format, params.width, |
diff --git a/src/video_core/textures/texture.h b/src/video_core/textures/texture.h index e3be018b9..e36bc2c04 100644 --- a/src/video_core/textures/texture.h +++ b/src/video_core/textures/texture.h | |||
| @@ -213,7 +213,7 @@ struct TICEntry { | |||
| 213 | if (header_version != TICHeaderVersion::OneDBuffer) { | 213 | if (header_version != TICHeaderVersion::OneDBuffer) { |
| 214 | return width_minus_1 + 1; | 214 | return width_minus_1 + 1; |
| 215 | } | 215 | } |
| 216 | return (buffer_high_width_minus_one << 16) | buffer_low_width_minus_one; | 216 | return ((buffer_high_width_minus_one << 16) | buffer_low_width_minus_one) + 1; |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | u32 Height() const { | 219 | u32 Height() const { |