22using System ;
33using System . Collections . Generic ;
44using Standart . Hash . xxHash ;
5+ using System . Runtime . InteropServices ;
56
67namespace Staple . Internal ;
78
@@ -106,16 +107,11 @@ public bool ShouldPushVertexUniform(byte binding, Span<byte> data)
106107 {
107108 var hash = MakeDataHash ( data ) ;
108109
109- if ( vertexDataHashes . TryGetValue ( binding , out var last ) == false )
110- {
111- vertexDataHashes . Add ( binding , hash ) ;
112-
113- return true ;
114- }
110+ ref var container = ref CollectionsMarshal . GetValueRefOrAddDefault ( vertexDataHashes , binding , out var exists ) ;
115111
116- if ( last != hash )
112+ if ( exists == false || container != hash )
117113 {
118- vertexDataHashes [ binding ] = hash ;
114+ container = hash ;
119115
120116 return true ;
121117 }
@@ -127,16 +123,11 @@ public bool ShouldPushFragmentUniform(byte binding, Span<byte> data)
127123 {
128124 var hash = MakeDataHash ( data ) ;
129125
130- if ( fragmentDataHashes . TryGetValue ( binding , out var last ) == false )
131- {
132- fragmentDataHashes . Add ( binding , hash ) ;
133-
134- return true ;
135- }
126+ ref var container = ref CollectionsMarshal . GetValueRefOrAddDefault ( fragmentDataHashes , binding , out var exists ) ;
136127
137- if ( last != hash )
128+ if ( exists == false || container != hash )
138129 {
139- fragmentDataHashes [ binding ] = hash ;
130+ container = hash ;
140131
141132 return true ;
142133 }
@@ -148,16 +139,11 @@ public bool ShouldPushComputeUniform(byte binding, Span<byte> data)
148139 {
149140 var hash = MakeDataHash ( data ) ;
150141
151- if ( computeDataHashes . TryGetValue ( binding , out var last ) == false )
152- {
153- computeDataHashes . Add ( binding , hash ) ;
154-
155- return true ;
156- }
142+ ref var container = ref CollectionsMarshal . GetValueRefOrAddDefault ( computeDataHashes , binding , out var exists ) ;
157143
158- if ( last != hash )
144+ if ( exists == false || container != hash )
159145 {
160- computeDataHashes [ binding ] = hash ;
146+ container = hash ;
161147
162148 return true ;
163149 }
0 commit comments