diff options
author | Christian Hergert <chergert@redhat.com> | 2021-03-12 11:47:15 -0800 |
---|---|---|
committer | Christian Hergert <chergert@redhat.com> | 2021-03-12 11:47:15 -0800 |
commit | f97ce21e59ef47cbfc0a1a7cb27a54e02931cf41 (patch) | |
tree | 20dcdc2f001a967b6c081ceb20e6efbf93165609 | |
parent | 0b7d8e19c3b4cffe450c0e9a31ea4e0d8419b65b (diff) | |
download | gtk+-wip/chergert/fewer-uniforms.tar.gz |
ngl: reintroduce comparison checkswip/chergert/fewer-uniforms
This reduces how many changes we make when recording uniform state, which
increases the chances that the data offset will be the same when applying
uniforms.
-rw-r--r-- | gsk/ngl/gskngluniformstateprivate.h | 177 |
1 files changed, 114 insertions, 63 deletions
diff --git a/gsk/ngl/gskngluniformstateprivate.h b/gsk/ngl/gskngluniformstateprivate.h index 6185087a68..fe2852f68f 100644 --- a/gsk/ngl/gskngluniformstateprivate.h +++ b/gsk/ngl/gskngluniformstateprivate.h @@ -274,9 +274,12 @@ gsk_ngl_uniform_state_set1f (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1F, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f , 1); - u->v0 = value0; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f , 1); + u->v0 = value0; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -296,10 +299,13 @@ gsk_ngl_uniform_state_set2f (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2F, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, 1); - u->v0 = value0; - u->v1 = value1; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, 1); + u->v0 = value0; + u->v1 = value1; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -320,11 +326,14 @@ gsk_ngl_uniform_state_set3f (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3F, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, 1); - u->v0 = value0; - u->v1 = value1; - u->v2 = value2; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, 1); + u->v0 = value0; + u->v1 = value1; + u->v2 = value2; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -346,12 +355,15 @@ gsk_ngl_uniform_state_set4f (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4F, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, 1); - u->v0 = value0; - u->v1 = value1; - u->v2 = value2; - u->v3 = value3; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2 || u->v3 != value3) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, 1); + u->v0 = value0; + u->v1 = value1; + u->v2 = value2; + u->v3 = value3; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -370,9 +382,12 @@ gsk_ngl_uniform_state_set1ui (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1UI, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1ui, 1); - u->v0 = value0; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1ui, 1); + u->v0 = value0; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -391,9 +406,12 @@ gsk_ngl_uniform_state_set1i (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1I, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1i, 1); - u->v0 = value0; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1i, 1); + u->v0 = value0; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -413,10 +431,13 @@ gsk_ngl_uniform_state_set2i (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2I, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2i, 1); - u->v0 = value0; - u->v1 = value1; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2i, 1); + u->v0 = value0; + u->v1 = value1; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -437,11 +458,14 @@ gsk_ngl_uniform_state_set3i (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3I, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3i, 1); - u->v0 = value0; - u->v1 = value1; - u->v2 = value2; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3i, 1); + u->v0 = value0; + u->v1 = value1; + u->v2 = value2; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -463,12 +487,15 @@ gsk_ngl_uniform_state_set4i (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4I, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4i, 1); - u->v0 = value0; - u->v1 = value1; - u->v2 = value2; - u->v3 = value3; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || u->v0 != value0 || u->v1 != value1 || u->v2 != value2 || u->v3 != value3) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4i, 1); + u->v0 = value0; + u->v1 = value1; + u->v2 = value2; + u->v3 = value3; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -488,9 +515,12 @@ gsk_ngl_uniform_state_set_rounded_rect (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_ROUNDED_RECT, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GskRoundedRect, 1); - memcpy (u, rounded_rect, sizeof *rounded_rect); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || memcmp (u, rounded_rect, sizeof *u) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GskRoundedRect, 1); + memcpy (u, rounded_rect, sizeof *rounded_rect); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -510,9 +540,12 @@ gsk_ngl_uniform_state_set_matrix (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_MATRIX, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, graphene_matrix_t, 1); - memcpy (u, matrix, sizeof *matrix); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || memcmp (u, matrix, sizeof *u) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, graphene_matrix_t, 1); + memcpy (u, matrix, sizeof *matrix); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -547,9 +580,12 @@ gsk_ngl_uniform_state_set_texture (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_TEXTURE, 1, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, guint, 1); - *u = texture_slot; - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || *u != texture_slot) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, guint, 1); + *u = texture_slot; + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -583,9 +619,12 @@ gsk_ngl_uniform_state_set_color (GskNglUniformState *state, if (color == NULL) color = &transparent; - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GdkRGBA, 1); - memcpy (u, color, sizeof *color); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || memcmp (color, u, sizeof *u) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, GdkRGBA, 1); + memcpy (u, color, sizeof *color); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -606,9 +645,12 @@ gsk_ngl_uniform_state_set1fv (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_1FV, count, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f, count); - memcpy (u, value, sizeof (Uniform1f) * count); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || count != info->info.array_count || memcmp (u, value, sizeof *u * count) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform1f, count); + memcpy (u, value, sizeof (Uniform1f) * count); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -629,9 +671,12 @@ gsk_ngl_uniform_state_set2fv (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_2FV, count, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, count); - memcpy (u, value, sizeof (Uniform2f) * count); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || count != info->info.array_count || memcmp (u, value, sizeof *u * count) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform2f, count); + memcpy (u, value, sizeof (Uniform2f) * count); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -652,9 +697,12 @@ gsk_ngl_uniform_state_set3fv (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_3FV, count, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, count); - memcpy (u, value, sizeof (Uniform3f) * count); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || count != info->info.array_count || memcmp (u, value, sizeof *u * count) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform3f, count); + memcpy (u, value, sizeof (Uniform3f) * count); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } @@ -675,9 +723,12 @@ gsk_ngl_uniform_state_set4fv (GskNglUniformState *state, if ((u = gsk_ngl_uniform_state_get_value (state, program, GSK_NGL_UNIFORM_FORMAT_4FV, count, location, stamp, &info))) { - GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, count); - memcpy (u, value, sizeof (Uniform4f) * count); - gsk_ngl_uniform_info_changed (info, location, stamp); + if (info->info.initial || count != info->info.array_count || memcmp (u, value, sizeof *u * count) != 0) + { + GSK_NGL_UNIFORM_STATE_REPLACE (info, u, Uniform4f, count); + memcpy (u, value, sizeof (Uniform4f) * count); + gsk_ngl_uniform_info_changed (info, location, stamp); + } } } |