Pass Context to Framebuffer11 dirty callback.

This allows us to call StateManager11::invalidateRenderTarget from the
Framebuffer11::signal function, which will then trigger state refresh
on the next draw call.

This requires passing Context through a few more Renderbuffer methods,
and reorganizing the RenderTarget signalling so that it doesn't signal
dirty in the destructor. Instead they are signaled as they are
destroyed in the containing classes.

BUG=angleproject:2151

Change-Id: I4cf575e4a01b48275ff78d75bc55b2d1fced591d
Reviewed-on: https://chromium-review.googlesource.com/673139
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/Renderbuffer.cpp b/src/libANGLE/Renderbuffer.cpp
index c9c37d1..17d7dbf 100644
--- a/src/libANGLE/Renderbuffer.cpp
+++ b/src/libANGLE/Renderbuffer.cpp
@@ -32,7 +32,14 @@
 
 Error Renderbuffer::onDestroy(const Context *context)
 {
-    return orphanImages(context);
+    ANGLE_TRY(orphanImages(context));
+
+    if (mRenderbuffer)
+    {
+        ANGLE_TRY(mRenderbuffer->onDestroy(context));
+    }
+
+    return NoError();
 }
 
 Renderbuffer::~Renderbuffer()
@@ -57,7 +64,7 @@
 {
     ANGLE_TRY(orphanImages(context));
 
-    ANGLE_TRY(mRenderbuffer->setStorage(internalformat, width, height));
+    ANGLE_TRY(mRenderbuffer->setStorage(context, internalformat, width, height));
 
     mWidth          = static_cast<GLsizei>(width);
     mHeight         = static_cast<GLsizei>(height);
@@ -77,7 +84,8 @@
 {
     ANGLE_TRY(orphanImages(context));
 
-    ANGLE_TRY(mRenderbuffer->setStorageMultisample(samples, internalformat, width, height));
+    ANGLE_TRY(
+        mRenderbuffer->setStorageMultisample(context, samples, internalformat, width, height));
 
     mWidth          = static_cast<GLsizei>(width);
     mHeight         = static_cast<GLsizei>(height);
@@ -93,7 +101,7 @@
 {
     ANGLE_TRY(orphanImages(context));
 
-    ANGLE_TRY(mRenderbuffer->setStorageEGLImageTarget(image));
+    ANGLE_TRY(mRenderbuffer->setStorageEGLImageTarget(context, image));
 
     setTargetImage(context, image);