Mesa (main): bufferobj: inline buffer clearing
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Dec 15 14:02:49 UTC 2021
Module: Mesa
Branch: main
Commit: 55bb6cc8e1730b107789cfb1effdd88d01388d9e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=55bb6cc8e1730b107789cfb1effdd88d01388d9e
Author: Dave Airlie <airlied at redhat.com>
Date: Thu Dec 9 13:36:59 2021 +1000
bufferobj: inline buffer clearing
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14133>
---
src/mesa/main/bufferobj.c | 43 +++++++++----------------------------------
1 file changed, 9 insertions(+), 34 deletions(-)
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 0a2ad2fa4cd..8ee45be7ed2 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -611,32 +611,6 @@ clear_buffer_subdata_sw(struct gl_context *ctx,
_mesa_bufferobj_unmap(ctx, bufObj, MAP_INTERNAL);
}
-/**
- * Called via glClearBufferSubData().
- */
-static void
-clear_buffer_subdata(struct gl_context *ctx,
- GLintptr offset, GLsizeiptr size,
- const void *clearValue,
- GLsizeiptr clearValueSize,
- struct gl_buffer_object *bufObj)
-{
- struct pipe_context *pipe = ctx->pipe;
- static const char zeros[16] = {0};
-
- if (!pipe->clear_buffer) {
- clear_buffer_subdata_sw(ctx, offset, size,
- clearValue, clearValueSize, bufObj);
- return;
- }
-
- if (!clearValue)
- clearValue = zeros;
-
- pipe->clear_buffer(pipe, bufObj->buffer, offset, size,
- clearValue, clearValueSize);
-}
-
static void
bufferobj_page_commitment(struct gl_context *ctx,
struct gl_buffer_object *bufferObj,
@@ -2896,20 +2870,21 @@ clear_buffer_sub_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
bufObj->MinMaxCacheDirty = true;
- if (data == NULL) {
- /* clear to zeros, per the spec */
- clear_buffer_subdata(ctx, offset, size,
- NULL, clearValueSize, bufObj);
+ if (!ctx->pipe->clear_buffer) {
+ clear_buffer_subdata_sw(ctx, offset, size,
+ data, clearValueSize, bufObj);
return;
}
- if (!convert_clear_buffer_data(ctx, mesaFormat, clearValue,
- format, type, data, func)) {
+ if (!data)
+ memset(clearValue, 0, MAX_PIXEL_BYTES);
+ else if (!convert_clear_buffer_data(ctx, mesaFormat, clearValue,
+ format, type, data, func)) {
return;
}
- clear_buffer_subdata(ctx, offset, size,
- clearValue, clearValueSize, bufObj);
+ ctx->pipe->clear_buffer(ctx->pipe, bufObj->buffer, offset, size,
+ clearValue, clearValueSize);
}
static void
More information about the mesa-commit
mailing list