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) ||