Merge pull request #3354 from ReinUsesLisp/depth-stencil
gl_texture_cache: Properly implement depth/stencil sampling
This commit is contained in:
		
						commit
						bea6327d74
					
				| @ -176,6 +176,19 @@ GLint GetSwizzleSource(SwizzleSource source) { | ||||
|     return GL_NONE; | ||||
| } | ||||
| 
 | ||||
| GLenum GetComponent(PixelFormat format, bool is_first) { | ||||
|     switch (format) { | ||||
|     case PixelFormat::Z24S8: | ||||
|     case PixelFormat::Z32FS8: | ||||
|         return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; | ||||
|     case PixelFormat::S8Z24: | ||||
|         return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; | ||||
|     default: | ||||
|         UNREACHABLE(); | ||||
|         return GL_DEPTH_COMPONENT; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ApplyTextureDefaults(const SurfaceParams& params, GLuint texture) { | ||||
|     if (params.IsBuffer()) { | ||||
|         return; | ||||
| @ -416,11 +429,21 @@ void CachedSurfaceView::ApplySwizzle(SwizzleSource x_source, SwizzleSource y_sou | ||||
|     if (new_swizzle == swizzle) | ||||
|         return; | ||||
|     swizzle = new_swizzle; | ||||
|     const std::array<GLint, 4> gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), | ||||
|                                              GetSwizzleSource(z_source), | ||||
|                                              GetSwizzleSource(w_source)}; | ||||
|     const std::array gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), | ||||
|                                    GetSwizzleSource(z_source), GetSwizzleSource(w_source)}; | ||||
|     const GLuint handle = GetTexture(); | ||||
|     const PixelFormat format = surface.GetSurfaceParams().pixel_format; | ||||
|     switch (format) { | ||||
|     case PixelFormat::Z24S8: | ||||
|     case PixelFormat::Z32FS8: | ||||
|     case PixelFormat::S8Z24: | ||||
|         glTextureParameteri(handle, GL_DEPTH_STENCIL_TEXTURE_MODE, | ||||
|                             GetComponent(format, x_source == SwizzleSource::R)); | ||||
|         break; | ||||
|     default: | ||||
|         glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); | ||||
|         break; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| OGLTextureView CachedSurfaceView::CreateTextureView() const { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei