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