mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	gl_format_reinterpreter.cpp: attempt to skip D24S8 to RGBA8 reinterpretation fast path for older nvidia GPUs,
additionally check for GL_ARB_copy_image in the fallback path
This commit is contained in:
		
							parent
							
								
									6183b5d76c
								
							
						
					
					
						commit
						e8269a9e36
					
				
					 1 changed files with 8 additions and 3 deletions
				
			
		|  | @ -373,14 +373,19 @@ class CopyImageSubData final : public FormatReinterpreterBase { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| FormatReinterpreterOpenGL::FormatReinterpreterOpenGL() { | FormatReinterpreterOpenGL::FormatReinterpreterOpenGL() { | ||||||
|     std::string_view vendor{reinterpret_cast<const char*>(glGetString(GL_VENDOR))}; |     // Older Nvidia GPUs don't seem to properly support using glCopyImageSubData to copy D24S8 to
 | ||||||
|     if (vendor.find("NVIDIA") != vendor.npos) { |     // RGBA8. This is a heuristic check that relies on the newer drivers returning something similar
 | ||||||
|  |     // to `3.3.0 NVIDIA 471.41`, and older, buggy ones returning just `3.3.0`.
 | ||||||
|  |     std::string_view version{reinterpret_cast<const char*>(glGetString(GL_VERSION))}; | ||||||
|  |     if (version.find("NVIDIA") != version.npos) { | ||||||
|         reinterpreters.emplace(PixelFormatPair{PixelFormat::RGBA8, PixelFormat::D24S8}, |         reinterpreters.emplace(PixelFormatPair{PixelFormat::RGBA8, PixelFormat::D24S8}, | ||||||
|                                std::make_unique<CopyImageSubData>()); |                                std::make_unique<CopyImageSubData>()); | ||||||
|         // Nvidia bends the spec and allows direct copies between color and depth formats
 |         // Nvidia bends the spec and allows direct copies between color and depth formats
 | ||||||
|         // might as well take advantage of it
 |         // might as well take advantage of it
 | ||||||
|         LOG_INFO(Render_OpenGL, "Using glCopyImageSubData for D24S8 to RGBA8 reinterpretation"); |         LOG_INFO(Render_OpenGL, "Using glCopyImageSubData for D24S8 to RGBA8 reinterpretation"); | ||||||
|     } else if ((GLAD_GL_ARB_stencil_texturing && GLAD_GL_ARB_texture_storage) || GLES) { |     } else if ((GLAD_GL_ARB_stencil_texturing && GLAD_GL_ARB_texture_storage && | ||||||
|  |                 GLAD_GL_ARB_copy_image) || | ||||||
|  |                GLES) { | ||||||
|         reinterpreters.emplace(PixelFormatPair{PixelFormat::RGBA8, PixelFormat::D24S8}, |         reinterpreters.emplace(PixelFormatPair{PixelFormat::RGBA8, PixelFormat::D24S8}, | ||||||
|                                std::make_unique<ShaderD24S8toRGBA8>()); |                                std::make_unique<ShaderD24S8toRGBA8>()); | ||||||
|         LOG_INFO(Render_OpenGL, "Using shader for D24S8 to RGBA8 reinterpretation"); |         LOG_INFO(Render_OpenGL, "Using shader for D24S8 to RGBA8 reinterpretation"); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue