Fix sRGB -> sRGB multisample resolves
Resolve must occur in linear space.
Bug b/119620965
Change-Id: I5c7c7c45a1448f44c702969e34e580dc299df70a
Test: dEQP-VK.renderpass.suballocation.multisample_resolve.*
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31871
Tested-by: Alexis Hétu <sugoi@google.com>
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index 57e5959..33763ac 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -1449,6 +1449,11 @@
{
return nullptr;
}
+ if(state.convertSRGB && state.sourceFormat.isSRGBformat()) // sRGB -> RGB
+ {
+ if(!ApplyScaleAndClamp(color, state)) return nullptr;
+ preScaled = true;
+ }
accum += color;
}
color = accum * Float4(1.0f / static_cast<float>(state.srcSamples));
@@ -1724,7 +1729,7 @@
bool doFilter = (filter != VK_FILTER_NEAREST);
State state(src->getFormat(srcAspect), dst->getFormat(dstAspect), src->getSampleCountFlagBits(), dst->getSampleCountFlagBits(),
- { doFilter, doFilter });
+ { doFilter, doFilter || (src->getSampleCountFlagBits() > 1) });
state.clampToEdge = (region.srcOffsets[0].x < 0) ||
(region.srcOffsets[0].y < 0) ||
(static_cast<uint32_t>(region.srcOffsets[1].x) > srcExtent.width) ||