Vulkan: Bugfix in MSRTT and sRGB interaction

When updating color attachment colorspace make sure to update the
colorspace of the resolve attachment as well

Bug: angleproject:42264452
Tests: MSRTTSRGBES3Test.Basic*
Change-Id: I300da7414c3baadc94ab25907c6f394383dcf673
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7542410
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
diff --git a/src/libANGLE/renderer/vulkan/RenderTargetVk.h b/src/libANGLE/renderer/vulkan/RenderTargetVk.h
index 925b7d0..18c20c8 100644
--- a/src/libANGLE/renderer/vulkan/RenderTargetVk.h
+++ b/src/libANGLE/renderer/vulkan/RenderTargetVk.h
@@ -189,6 +189,11 @@
     {
         ASSERT(mImage && mImage->valid() && mImageViews);
         mImageViews->updateSrgbWriteControlMode(*mImage, srgbWriteControlMode);
+        if (hasResolveAttachment() && !isYuvResolve())
+        {
+            ASSERT(mResolveImage && mResolveImage->valid() && mResolveImageViews);
+            mResolveImageViews->updateSrgbWriteControlMode(*mResolveImage, srgbWriteControlMode);
+        }
     }
     bool hasColorspaceOverrideForRead() const
     {
diff --git a/src/tests/gl_tests/MultisampledRenderToTextureTest.cpp b/src/tests/gl_tests/MultisampledRenderToTextureTest.cpp
index 29aca9d..86ed434 100644
--- a/src/tests/gl_tests/MultisampledRenderToTextureTest.cpp
+++ b/src/tests/gl_tests/MultisampledRenderToTextureTest.cpp
@@ -4498,6 +4498,49 @@
     ASSERT_GL_NO_ERROR();
 }
 
+class MSRTTSRGBES3Test : public MSRTTES3Test
+{};
+
+// Test interaction between MSRTT and sRGB write control
+TEST_P(MSRTTSRGBES3Test, Basic)
+{
+    ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_multisampled_render_to_texture"));
+    ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_sRGB_write_control"));
+
+    GLTexture texture;
+    glBindTexture(GL_TEXTURE_2D, texture);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, 1, 1, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE,
+                 nullptr);
+
+    GLFramebuffer fboMS;
+    glBindFramebuffer(GL_FRAMEBUFFER, fboMS);
+    glFramebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
+                                         texture, 0, 4);
+
+    constexpr GLColor uniformColor(13, 54, 133, 255);
+    constexpr GLColor linearColor = uniformColor;
+    constexpr GLColor srgbColor(64, 127, 191, 255);
+
+    // Setup program and uniforms
+    ANGLE_GL_PROGRAM(program, essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
+    glUseProgram(program);
+    GLint colorLocation = glGetUniformLocation(program, essl1_shaders::ColorUniform());
+    ASSERT_NE(-1, colorLocation);
+    glUniform4fv(colorLocation, 1, uniformColor.toNormalizedVector().data());
+
+    // Enable sRGB encoding and render
+    glEnable(GL_FRAMEBUFFER_SRGB_EXT);
+    drawQuad(program, essl1_shaders::PositionAttrib(), 0.5f);
+    EXPECT_GL_NO_ERROR();
+    EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0);
+
+    // Disable sRGB encoding and render
+    glDisable(GL_FRAMEBUFFER_SRGB_EXT);
+    drawQuad(program, essl1_shaders::PositionAttrib(), 0.5f);
+    EXPECT_GL_NO_ERROR();
+    EXPECT_PIXEL_COLOR_NEAR(0, 0, linearColor, 1.0);
+}
+
 class MultisampledRenderToTextureWithAdvancedBlendTest : public MSRTTES3Test
 {
   protected:
@@ -4645,6 +4688,14 @@
     ES3_VULKAN().disable(Feature::SupportsSPIRV14),
     ES3_VULKAN_SWIFTSHADER().enable(Feature::EnableMultisampledRenderToTexture));
 
+GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MSRTTSRGBES3Test);
+ANGLE_INSTANTIATE_TEST_COMBINE_1(
+    MSRTTSRGBES3Test,
+    PrintToStringParamName,
+    testing::Bool(),
+    ANGLE_ALL_TEST_PLATFORMS_ES3,
+    ES3_VULKAN().enable(Feature::AllowMultisampledRenderToTextureEmulation));
+
 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MSRTTES31Test);
 ANGLE_INSTANTIATE_TEST_COMBINE_1(
     MSRTTES31Test,