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 @@ ...@@ -276,9 +276,9 @@
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayCull.comp.00000005.inc": "src/libANGLE/renderer/vulkan/shaders/gen/OverlayCull.comp.00000005.inc":
"83626be8291a8a4364076cf82e714507", "83626be8291a8a4364076cf82e714507",
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000000.inc":
"06bf671d56aede3201803753718221dc", "4ea9b8189c0c40408ec99d0720786ba9",
"src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/OverlayDraw.comp.00000001.inc":
"355a732629869769dd876ac920557cce", "93ac001b7536d17fe7a1b2ccee195ee7",
"src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag": "src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag":
"0b16d3ad95d7dbc2ce7175462152e4f9", "0b16d3ad95d7dbc2ce7175462152e4f9",
"src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag.json": "src/libANGLE/renderer/vulkan/shaders/src/BlitResolve.frag.json":
...@@ -322,7 +322,7 @@ ...@@ -322,7 +322,7 @@
"src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp.json":
"e5fd5bb63707753601e197635316430e", "e5fd5bb63707753601e197635316430e",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp":
"b8576748a0916c8d59fc8b02e294f5a8", "1b748944a5b8d37317b7d0e6a6ad5795",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json":
"af79e5153c99cdb1e6b551b11bbf7f6b", "af79e5153c99cdb1e6b551b11bbf7f6b",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
......
...@@ -81,7 +81,27 @@ uint getChar(const uint textWidget, const uvec2 coordInWidget, const uint fontGl ...@@ -81,7 +81,27 @@ uint getChar(const uint textWidget, const uvec2 coordInWidget, const uint fontGl
{ {
const uint charIndex = coordInWidget.x / fontGlyphWidth; const uint charIndex = coordInWidget.x / fontGlyphWidth;
const uint packIndex = charIndex / 4; 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; const uint shift = (charIndex % 4) * 8;
#if IsBigEndian #if IsBigEndian
...@@ -106,7 +126,25 @@ float sampleFont(const uint textChar, ...@@ -106,7 +126,25 @@ float sampleFont(const uint textChar,
uint getValue(const uint graphWidget, const uvec2 coordInWidget, const uint valueWidth) uint getValue(const uint graphWidget, const uvec2 coordInWidget, const uint valueWidth)
{ {
const uint valueIndex = coordInWidget.x / valueWidth.x; 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) 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