@@ -166,6 +166,11 @@ private unsafe Result Serialize(out Blob result, out string errorText)
166166
167167 private unsafe void Deserialize ( IntPtr pNativePtr )
168168 {
169+ if ( pNativePtr == IntPtr . Zero )
170+ {
171+ return ;
172+ }
173+
169174 __Native * pNative = ( __Native * ) pNativePtr ;
170175
171176 if ( pNative ->ParameterCount > 0 )
@@ -184,47 +189,23 @@ private unsafe void Deserialize(IntPtr pNativePtr)
184189 if ( rangeCount > 0 )
185190 {
186191 ranges = new DescriptorRange [ rangeCount ] ;
187- fixed ( DescriptorRange * pCurRange = ranges )
188- {
189- DescriptorRange * pSourceDescRange = ( DescriptorRange * ) rpn [ i ] . Union . DescriptorTable . DescriptorRangesPointer ;
190- DescriptorRange * pSourceDescRangeEnd = pSourceDescRange + rpn [ i ] . Union . DescriptorTable . DescriptorRangeCount ;
191- DescriptorRange * pTargetDescRange = pCurRange ;
192- while ( pTargetDescRange < pSourceDescRangeEnd )
193- {
194- * pTargetDescRange = * pSourceDescRange ;
195- pTargetDescRange ++ ;
196- pSourceDescRange ++ ;
197- }
198-
199- }
192+ Utilities . Read ( rpn [ i ] . Union . DescriptorTable . DescriptorRangesPointer , ranges , 0 , ranges . Length ) ;
200193 }
201194
202195 Parameters [ i ] = new RootParameter ( rpn [ i ] . ShaderVisibility , ranges ) ;
203196 }
204197 else
205198 {
206199 // No need to marshal them when RootParameter don't contain DescriptorTable - simple copy as-is
207- Parameters [ i ] = new RootParameter ( ) ;
208- Parameters [ i ] . native = * rpn ;
200+ Parameters [ i ] = new RootParameter { native = * rpn } ;
209201 }
210202 }
211203 }
212204
213205 if ( pNative ->StaticSamplerCount > 0 )
214206 {
215207 StaticSamplers = new StaticSamplerDescription [ pNative ->StaticSamplerCount ] ;
216- fixed ( StaticSamplerDescription * pSamplerDesc = StaticSamplers )
217- {
218- StaticSamplerDescription * pTargetSamplerDesc = pSamplerDesc ;
219- StaticSamplerDescription * pSourceSamplerDesc = ( StaticSamplerDescription * ) pNative ->StaticSamplerPointer ;
220- StaticSamplerDescription * pSourceSamplerDescEnd = pSourceSamplerDesc + pNative ->StaticSamplerCount ;
221- while ( pSamplerDesc < pSourceSamplerDescEnd )
222- {
223- * pTargetSamplerDesc = * pSourceSamplerDesc ;
224- pTargetSamplerDesc ++ ;
225- pSourceSamplerDesc ++ ;
226- }
227- }
208+ Utilities . Read ( pNative ->StaticSamplerPointer , StaticSamplers , 0 , StaticSamplers . Length ) ;
228209 }
229210 }
230211
0 commit comments