Optimize non-native bilinear transforms
Reading directly from an array instead of calling a function pointer is much faster. Change-Id: I833b33448bad064d6f38d2f9ff44138d90206822 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
This commit is contained in:
parent
d4bc56cb42
commit
528279febe
@ -1931,10 +1931,17 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
|
||||
int x2;
|
||||
fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2);
|
||||
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
if (layout->bpp == QPixelLayout::BPP32) {
|
||||
buf1[i * 2 + 0] = ((const uint*)s1)[x1];
|
||||
buf1[i * 2 + 1] = ((const uint*)s1)[x2];
|
||||
buf2[i * 2 + 0] = ((const uint*)s2)[x1];
|
||||
buf2[i * 2 + 1] = ((const uint*)s2)[x2];
|
||||
} else {
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
}
|
||||
|
||||
fx += fdx;
|
||||
}
|
||||
@ -1989,10 +1996,17 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
|
||||
const uchar *s1 = data->texture.scanLine(y1);
|
||||
const uchar *s2 = data->texture.scanLine(y2);
|
||||
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
if (layout->bpp == QPixelLayout::BPP32) {
|
||||
buf1[i * 2 + 0] = ((const uint*)s1)[x1];
|
||||
buf1[i * 2 + 1] = ((const uint*)s1)[x2];
|
||||
buf2[i * 2 + 0] = ((const uint*)s2)[x1];
|
||||
buf2[i * 2 + 1] = ((const uint*)s2)[x2];
|
||||
} else {
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
}
|
||||
|
||||
fx += fdx;
|
||||
fy += fdy;
|
||||
@ -2074,10 +2088,17 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
|
||||
const uchar *s1 = data->texture.scanLine(y1);
|
||||
const uchar *s2 = data->texture.scanLine(y2);
|
||||
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
if (layout->bpp == QPixelLayout::BPP32) {
|
||||
buf1[i * 2 + 0] = ((const uint*)s1)[x1];
|
||||
buf1[i * 2 + 1] = ((const uint*)s1)[x2];
|
||||
buf2[i * 2 + 0] = ((const uint*)s2)[x1];
|
||||
buf2[i * 2 + 1] = ((const uint*)s2)[x2];
|
||||
} else {
|
||||
buf1[i * 2 + 0] = fetch(s1, x1);
|
||||
buf1[i * 2 + 1] = fetch(s1, x2);
|
||||
buf2[i * 2 + 0] = fetch(s2, x1);
|
||||
buf2[i * 2 + 1] = fetch(s2, x2);
|
||||
}
|
||||
|
||||
fx += fdx;
|
||||
fy += fdy;
|
||||
|
Loading…
x
Reference in New Issue
Block a user