Merge pull request #3354 from ReinUsesLisp/depth-stencil
gl_texture_cache: Properly implement depth/stencil sampling
This commit is contained in:
		@@ -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();
 | 
			
		||||
    glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data());
 | 
			
		||||
    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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user