[gtk/wip/chergert/glproto] always stash new values for uniform state



commit ca3607cb057e39096bcaec0490890065a4c1b9b2
Author: Christian Hergert <chergert redhat com>
Date:   Tue Feb 16 15:53:32 2021 -0800

    always stash new values for uniform state
    
    the comparisons to save memory and/or know when there were changes
    aren't as useful now that we are doing batch reordering which requires
    a full snapshot of state anyway.
    
    its nice to not waste so much buffer space for uniforms, but the reality
    is its just plain faster to always write the new value.

 gsk/next/gskgluniformstateprivate.h | 188 ++++++++++++------------------------
 1 file changed, 63 insertions(+), 125 deletions(-)
---
diff --git a/gsk/next/gskgluniformstateprivate.h b/gsk/next/gskgluniformstateprivate.h
index b29f969b7b..6c4f7dbd2c 100644
--- a/gsk/next/gskgluniformstateprivate.h
+++ b/gsk/next/gskgluniformstateprivate.h
@@ -261,12 +261,9 @@ gsk_gl_uniform_state_set1f (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_1F, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1f , 1);
-          u->v0 = value0;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1f , 1);
+      u->v0 = value0;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -286,13 +283,10 @@ gsk_gl_uniform_state_set2f (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_2F, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -313,14 +307,11 @@ gsk_gl_uniform_state_set3f (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_3F, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          u->v2 = value2;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      u->v2 = value2;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -342,15 +333,12 @@ gsk_gl_uniform_state_set4f (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_4F, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2 || u->v3 != 
value3)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          u->v2 = value2;
-          u->v3 = value3;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      u->v2 = value2;
+      u->v3 = value3;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -369,12 +357,9 @@ gsk_gl_uniform_state_set1ui (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_1UI, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1ui, 1);
-          u->v0 = value0;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1ui, 1);
+      u->v0 = value0;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -393,12 +378,9 @@ gsk_gl_uniform_state_set1i (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_1I, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1i, 1);
-          u->v0 = value0;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1i, 1);
+      u->v0 = value0;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -418,13 +400,10 @@ gsk_gl_uniform_state_set2i (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_2I, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2i, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2i, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -445,14 +424,11 @@ gsk_gl_uniform_state_set3i (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_3I, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3i, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          u->v2 = value2;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3i, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      u->v2 = value2;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -474,29 +450,15 @@ gsk_gl_uniform_state_set4i (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_4I, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2 || u->v3 != 
value3)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4i, 1);
-          u->v0 = value0;
-          u->v1 = value1;
-          u->v2 = value2;
-          u->v3 = value3;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4i, 1);
+      u->v0 = value0;
+      u->v1 = value1;
+      u->v2 = value2;
+      u->v3 = value3;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
-static inline gboolean
-rounded_rect_equal (const GskRoundedRect *r1,
-                    const GskRoundedRect *r2)
-{
-  /* Ensure we're dealing with tightly packed floats that
-   * should allow us to compare without any gaps using memcmp().
-   */
-  G_STATIC_ASSERT (sizeof *r1 == (sizeof (float) * 12));
-  return memcmp (r1, r2, sizeof *r1) == 0;
-}
-
 static inline void
 gsk_gl_uniform_state_set_rounded_rect (GskGLUniformState    *state,
                                        GskGLUniformProgram  *program,
@@ -513,12 +475,9 @@ gsk_gl_uniform_state_set_rounded_rect (GskGLUniformState    *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_ROUNDED_RECT, 1, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || !rounded_rect_equal (rounded_rect, u))
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, GskRoundedRect, 1);
-          memcpy (u, rounded_rect, sizeof *rounded_rect);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, GskRoundedRect, 1);
+      memcpy (u, rounded_rect, sizeof *rounded_rect);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -538,12 +497,9 @@ gsk_gl_uniform_state_set_matrix (GskGLUniformState       *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_MATRIX, 1, location, stamp, 
&info)))
     {
-      if (stamp || info->info.initial || memcmp (u, matrix, sizeof *u) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, graphene_matrix_t, 1);
-          memcpy (u, matrix, sizeof *matrix);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, graphene_matrix_t, 1);
+      memcpy (u, matrix, sizeof *matrix);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -578,12 +534,9 @@ gsk_gl_uniform_state_set_texture (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_TEXTURE, 1, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || *u != texture_slot)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, guint, 1);
-          *u = texture_slot;
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, guint, 1);
+      *u = texture_slot;
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -617,12 +570,9 @@ gsk_gl_uniform_state_set_color (GskGLUniformState   *state,
       if (color == NULL)
         color = &transparent;
 
-      if (stamp || info->info.initial || memcmp (color, u, sizeof *color) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, GdkRGBA, 1);
-          memcpy (u, color, sizeof *color);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, GdkRGBA, 1);
+      memcpy (u, color, sizeof *color);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -643,12 +593,9 @@ gsk_gl_uniform_state_set1fv (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_1FV, count, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || memcmp (u, value, sizeof *u * count) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1f, count);
-          memcpy (u, value, sizeof (Uniform1f) * count);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform1f, count);
+      memcpy (u, value, sizeof (Uniform1f) * count);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -669,12 +616,9 @@ gsk_gl_uniform_state_set2fv (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_2FV, count, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || memcmp (u, value, sizeof *u * count) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, count);
-          memcpy (u, value, sizeof (Uniform2f) * count);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, count);
+      memcpy (u, value, sizeof (Uniform2f) * count);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -695,12 +639,9 @@ gsk_gl_uniform_state_set3fv (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_3FV, count, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || memcmp (u, value, sizeof *u * count) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, count);
-          memcpy (u, value, sizeof (Uniform3f) * count);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, count);
+      memcpy (u, value, sizeof (Uniform3f) * count);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 
@@ -721,12 +662,9 @@ gsk_gl_uniform_state_set4fv (GskGLUniformState   *state,
 
   if ((u = gsk_gl_uniform_state_get_value (state, program, GSK_GL_UNIFORM_FORMAT_4FV, count, location, 
stamp, &info)))
     {
-      if (stamp || info->info.initial || memcmp (u, value, sizeof *u * count) != 0)
-        {
-          GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, count);
-          memcpy (u, value, sizeof (Uniform4f) * count);
-          gsk_gl_uniform_info_changed (info, location, stamp);
-        }
+      GSK_GL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, count);
+      memcpy (u, value, sizeof (Uniform4f) * count);
+      gsk_gl_uniform_info_changed (info, location, stamp);
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]