Commit 90db6049 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Workaround Overlay draw issue on Android

On Android vector[n] translates to vector[0] likely due to a driver bug. This resulted in text such as: 12345678abcdefghijklmnopqrstuvwx to render as: 1234123412341234ijklijklijklijkl It also made graph data flicker. As a workaround, the shader now does an if-else on the value of n and uses a constant to load the appropriate component of the vector. Bug: angleproject:5690 Change-Id: Idb891e726fafa896a1064ef7b2941b8fd1c41ed1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2725769 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent d8557cc8
......@@ -276,9 +276,9 @@
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayCull.comp.00000005.inc":
"83626be8291a8a4364076cf82e714507",
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000000.inc":
"06bf671d56aede3201803753718221dc",
"4ea9b8189c0c40408ec99d0720786ba9",
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000001.inc":
"355a732629869769dd876ac920557cce",
"93ac001b7536d17fe7a1b2ccee195ee7",
"src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag":
"0b16d3ad95d7dbc2ce7175462152e4f9",
"src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag.json":
......@@ -322,7 +322,7 @@
"src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp.json":
"e5fd5bb63707753601e197635316430e",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp":
"b8576748a0916c8d59fc8b02e294f5a8",
"1b748944a5b8d37317b7d0e6a6ad5795",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json":
"af79e5153c99cdb1e6b551b11bbf7f6b",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
......
......@@ -81,7 +81,27 @@ uint getChar(const uint textWidget, const uvec2 coordInWidget, const uint fontGl
{
const uint charIndex = coordInWidget.x / fontGlyphWidth;
const uint packIndex = charIndex / 4;
const uint packedChars = textWidgetsData[textWidget].text[packIndex / 4][packIndex % 4];
const uvec4 arrayItem = textWidgetsData[textWidget].text[packIndex / 4];
const uint col = packIndex % 4;
// Work around Android bug with dynamic indexing of the matrix column.
uint packedChars;
if (col == 0)
{
packedChars = arrayItem[0];
}
else if (col == 1)
{
packedChars = arrayItem[1];
}
else if (col == 2)
{
packedChars = arrayItem[2];
}
else
{
packedChars = arrayItem[3];
}
const uint shift = (charIndex % 4) * 8;
#if IsBigEndian
......@@ -106,7 +126,25 @@ float sampleFont(const uint textChar,
uint getValue(const uint graphWidget, const uvec2 coordInWidget, const uint valueWidth)
{
const uint valueIndex = coordInWidget.x / valueWidth.x;
return graphWidgetsData[graphWidget].values[valueIndex / 4][valueIndex % 4];
const uvec4 arrayItem = graphWidgetsData[graphWidget].values[valueIndex / 4];
const uint col = valueIndex % 4;
// Work around Android bug with dynamic indexing of the vector component.
if (col == 0)
{
return arrayItem[0];
}
else if (col == 1)
{
return arrayItem[1];
}
else if (col == 2)
{
return arrayItem[2];
}
else
{
return arrayItem[3];
}
}
vec4 blend(const vec4 blendedSoFar, const vec4 color)
......
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