Fix scaling of float color to RGB565. The scaling factors ensure that the components are rounded correctly even after alpha blending, which may multiply colors by colors. Bug 24332884 Change-Id: Ib75602e89996b2fd1a319a132a681295fb2a18a6 Reviewed-on: https://swiftshader-review.googlesource.com/5048 Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Shader/PixelProgram.cpp b/src/Shader/PixelProgram.cpp index 6eca4eb..7065330 100644 --- a/src/Shader/PixelProgram.cpp +++ b/src/Shader/PixelProgram.cpp
@@ -584,10 +584,20 @@ Pointer<Byte> buffer = cBuffer[index] + q * *Pointer<Int>(data + OFFSET(DrawData, colorSliceB[index])); Vector4s color; - color.x = convertFixed16(c[index].x, false); - color.y = convertFixed16(c[index].y, false); - color.z = convertFixed16(c[index].z, false); - color.w = convertFixed16(c[index].w, false); + if(state.targetFormat[index] == FORMAT_R5G6B5) + { + color.x = UShort4(c[index].x * Float4(0xFBFF), false); + color.y = UShort4(c[index].y * Float4(0xFDFF), false); + color.z = UShort4(c[index].z * Float4(0xFBFF), false); + color.w = UShort4(c[index].w * Float4(0xFFFF), false); + } + else + { + color.x = convertFixed16(c[index].x, false); + color.y = convertFixed16(c[index].y, false); + color.z = convertFixed16(c[index].z, false); + color.w = convertFixed16(c[index].w, false); + } if(state.multiSampleMask & (1 << q)) {