{
    struct pipe_surface *old_dst = *dst;
 
-   if (pipe_reference_described(&old_dst->reference, &src->reference,
+   if (pipe_reference_described(old_dst ? &old_dst->reference : NULL,
+                                src ? &src->reference : NULL,
                                 (debug_reference_descriptor)
                                 debug_describe_surface))
       old_dst->context->surface_destroy(old_dst->context, old_dst);
 {
    struct pipe_resource *old_dst = *dst;
 
-   if (pipe_reference_described(&old_dst->reference, &src->reference,
+   if (pipe_reference_described(old_dst ? &old_dst->reference : NULL,
+                                src ? &src->reference : NULL,
                                 (debug_reference_descriptor)
                                 debug_describe_resource)) {
       /* Avoid recursion, which would prevent inlining this function */
 
          old_dst->screen->resource_destroy(old_dst->screen, old_dst);
          old_dst = next;
-      } while (pipe_reference_described(&old_dst->reference, NULL,
+      } while (pipe_reference_described(old_dst ? &old_dst->reference : NULL,
+                                        NULL,
                                         (debug_reference_descriptor)
                                         debug_describe_resource));
    }
 {
    struct pipe_sampler_view *old_dst = *dst;
 
-   if (pipe_reference_described(&old_dst->reference, &src->reference,
+   if (pipe_reference_described(old_dst ? &old_dst->reference : NULL,
+                                src ? &src->reference : NULL,
                                 (debug_reference_descriptor)
                                 debug_describe_sampler_view))
       old_dst->context->sampler_view_destroy(old_dst->context, old_dst);
 {
    struct pipe_stream_output_target *old_dst = *dst;
 
-   if (pipe_reference_described(&old_dst->reference, &src->reference,
+   if (pipe_reference_described(old_dst ? &old_dst->reference : NULL,
+                     src ? &src->reference : NULL,
                      (debug_reference_descriptor)debug_describe_so_target))
       old_dst->context->stream_output_target_destroy(old_dst->context, old_dst);
    *dst = src;