Commit 1978ff74 by Meng-Lin Wu

Fragment output RG, RGBA 16-bit formats.

Relevant dEQP tests: dEQP-GLES3.functional.fragment_out.basic.int.rg16i* dEQP-GLES3.functional.fragment_out.basic.uint.rg16ui* dEQP-GLES3.functional.fragment_out.basic.int.rgba16i* dEQP-GLES3.functional.fragment_out.basic.uint.rgba16ui* Change-Id: If57f6edb895c576f78cb4cdf6048c2063d884a6f Reviewed-on: https://swiftshader-review.googlesource.com/5651Tested-by: 's avatarMeng-Lin Wu <marleymoo@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 92a95e9c
...@@ -2387,7 +2387,33 @@ namespace sw ...@@ -2387,7 +2387,33 @@ namespace sw
break; break;
case FORMAT_G16R16I: case FORMAT_G16R16I:
case FORMAT_G16R16UI: case FORMAT_G16R16UI:
ASSERT(false); if((rgbaWriteMask & 0x00000003) != 0x0)
{
buffer = cBuffer + 4 * x;
UInt2 rgbaMask;
UShort4 packedCol = UShort4(As<Int4>(oC.x));
UShort4 value = *Pointer<UShort4>(buffer);
UInt2 mergedMask = *Pointer<UInt2>(constants + OFFSET(Constants, maskD01Q) + xMask * 8);
if((rgbaWriteMask & 0x3) != 0x3)
{
Int tmpMask = *Pointer<Int>(constants + OFFSET(Constants, maskW4Q[rgbaWriteMask & 0x3][0]));
rgbaMask = As<UInt2>(Int2(tmpMask, tmpMask));
mergedMask &= rgbaMask;
}
*Pointer<UInt2>(buffer) = (As<UInt2>(packedCol) & mergedMask) | (As<UInt2>(value) & ~mergedMask);
buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
packedCol = UShort4(As<Int4>(oC.y));
value = *Pointer<UShort4>(buffer);
mergedMask = *Pointer<UInt2>(constants + OFFSET(Constants, maskD23Q) + xMask * 8);
if((rgbaWriteMask & 0x3) != 0x3)
{
mergedMask &= rgbaMask;
}
*Pointer<UInt2>(buffer) = (As<UInt2>(packedCol) & mergedMask) | (As<UInt2>(value) & ~mergedMask);
}
break; break;
case FORMAT_G8R8I: case FORMAT_G8R8I:
case FORMAT_G8R8UI: case FORMAT_G8R8UI:
...@@ -2503,7 +2529,33 @@ namespace sw ...@@ -2503,7 +2529,33 @@ namespace sw
break; break;
case FORMAT_A16B16G16R16I: case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI: case FORMAT_A16B16G16R16UI:
ASSERT(false); if((rgbaWriteMask & 0x0000000F) != 0x0)
{
buffer = cBuffer + 8 * x;
UInt4 rgbaMask;
UShort8 value = *Pointer<UShort8>(buffer);
UShort8 packedCol = UShort8(UShort4(As<Int4>(oC.x)), UShort4(As<Int4>(oC.y)));
UInt4 mergedMask = *Pointer<UInt4>(constants + OFFSET(Constants, maskQ01X) + xMask * 16);
if((rgbaWriteMask & 0xF) != 0xF)
{
UInt2 tmpMask = *Pointer<UInt2>(constants + OFFSET(Constants, maskW4Q[rgbaWriteMask][0]));
rgbaMask = UInt4(tmpMask, tmpMask);
mergedMask &= rgbaMask;
}
*Pointer<UInt4>(buffer) = (As<UInt4>(packedCol) & mergedMask) | (As<UInt4>(value) & ~mergedMask);
buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
value = *Pointer<UShort8>(buffer);
packedCol = UShort8(UShort4(As<Int4>(oC.z)), UShort4(As<Int4>(oC.w)));
mergedMask = *Pointer<UInt4>(constants + OFFSET(Constants, maskQ23X) + xMask * 16);
if((rgbaWriteMask & 0xF) != 0xF)
{
mergedMask &= rgbaMask;
}
*Pointer<UInt4>(buffer) = (As<UInt4>(packedCol) & mergedMask) | (As<UInt4>(value) & ~mergedMask);
}
break; break;
case FORMAT_A8B8G8R8I: case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI: case FORMAT_A8B8G8R8UI:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment