Align memory access in Copy32FixedTo32FVertexData

Bug: angleproject:2895

Change-Id: Idfe379e34c4f165b91babcb1990df28fa151d807
Reviewed-on: https://chromium-review.googlesource.com/c/1286373
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
This commit is contained in:
Yuly Novikov 2018-10-16 17:30:48 -04:00 коммит произвёл Commit Bot
Родитель 4024e2179e
Коммит 25843dd651
2 изменённых файлов: 18 добавлений и 8 удалений

Просмотреть файл

@ -129,12 +129,26 @@ inline void Copy32FixedTo32FVertexData(const uint8_t *input, size_t stride, size
for (size_t i = 0; i < count; i++)
{
const GLfixed* offsetInput = reinterpret_cast<const GLfixed*>(input + (stride * i));
float* offsetOutput = reinterpret_cast<float*>(output) + i * outputComponentCount;
const uint8_t *offsetInput = input + i * stride;
float *offsetOutput = reinterpret_cast<float *>(output) + i * outputComponentCount;
for (size_t j = 0; j < inputComponentCount; j++)
// GLfixed access must be 4-byte aligned on arm32, input and stride sometimes are not
if (reinterpret_cast<uintptr_t>(offsetInput) % sizeof(GLfixed) == 0)
{
offsetOutput[j] = static_cast<float>(offsetInput[j]) * divisor;
for (size_t j = 0; j < inputComponentCount; j++)
{
offsetOutput[j] =
static_cast<float>(reinterpret_cast<const GLfixed *>(offsetInput)[j]) * divisor;
}
}
else
{
for (size_t j = 0; j < inputComponentCount; j++)
{
GLfixed alignedInput;
memcpy(&alignedInput, offsetInput + j * sizeof(GLfixed), sizeof(GLfixed));
offsetOutput[j] = static_cast<float>(alignedInput) * divisor;
}
}
// 4-component output formats would need special padding in the alpha channel.

Просмотреть файл

@ -197,10 +197,6 @@
// Passes on Pixel XL. Fails on 5x and Pixel 2. Might be fixd in latest driver.
2609 VULKAN ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.* = SKIP
// These two tests crash on 32-bit configs. Possibly due to an alignment bug.
2895 VULKAN ANDROID : dEQP-GLES2.functional.draw.random.42 = SKIP
2895 VULKAN ANDROID : dEQP-GLES2.functional.draw.random.59 = SKIP
// Fails on Nexus 5x only. TODO(jmadill): Remove suppression when possible. http://anglebug.com/2791
2791 VULKAN ANDROID : dEQP-GLES2.functional.clipping.* = SKIP
2599 VULKAN ANDROID : dEQP-GLES2.functional.rasterization.limits.points = FAIL