From: Jonathan Marek Date: Mon, 21 Jan 2019 16:29:59 +0000 (-0500) Subject: mesa/st: wire up DiscardFramebuffer X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=786f9639d62efc7df8e83d75e4e00f96e29c2ce8;p=mesa.git mesa/st: wire up DiscardFramebuffer Signed-off-by: Jonathan Marek Reviewed-by: Eric Anholt --- diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 1a63e77826f..3bd7fd4ad27 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -762,6 +762,30 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) } +/** + * Called by ctx->Driver.DiscardFramebuffer + */ +static void +st_discard_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) +{ + struct st_context *st = st_context(ctx); + struct pipe_resource *prsc; + + if (!att->Renderbuffer) + return; + + prsc = st_renderbuffer(att->Renderbuffer)->surface->texture; + + /* using invalidate_resource will only work for simple 2D resources */ + if (prsc->depth0 != 1 || prsc->array_size != 1 || prsc->last_level != 0) + return; + + if (st->pipe->invalidate_resource) + st->pipe->invalidate_resource(st->pipe, prsc); +} + + /** * Called via glDrawBuffer. We only provide this driver function so that we * can check if we need to allocate a new renderbuffer. Specifically, we @@ -939,6 +963,7 @@ st_init_fbo_functions(struct dd_function_table *functions) functions->RenderTexture = st_render_texture; functions->FinishRenderTexture = st_finish_render_texture; functions->ValidateFramebuffer = st_validate_framebuffer; + functions->DiscardFramebuffer = st_discard_framebuffer; functions->DrawBufferAllocate = st_DrawBufferAllocate; functions->ReadBuffer = st_ReadBuffer;