|
|
Home » Developing U++ » U++ Developers corner » SSE2 and SVO optimization (Painter, memcpy....)
Re: BufferPainter::Clear() optimization [message #53999 is a reply to message #53997] |
Wed, 20 May 2020 12:52   |
Tom1
Messages: 1303 Registered: March 2007
|
Ultimate Contributor |
|
|
mirek wrote on Wed, 20 May 2020 13:23OK, after retesting, I think it might be at most 3% faster. Looking at fillers, I think there is much more time spent in AlphaBlend function - even if it is just for segment start/end pixels. Perhaps that one should be SSE2 optimized? 
Mirek
Hi,
My SSE2 battery is now 'discharged' for a while.... Need to recharge before next use. 
I also did some testing on span filler with memcpy. This is based on using IMAGE_OPAQUE of the image being rendered. It does improve the speed somewhat, but the edges cause a problem since the edge is alpha blended even if FILL_FAST is specified. So, this needs some reconsideration and better knowledge on the Painter internals (i.e. beyond my level...):
BufferPainter.h:
struct SpanSource {
int kind;
SpanSource(){
kind = IMAGE_OPAQUE;
}
virtual void Get(RGBA *span, int x, int y, unsigned len) = 0;
virtual ~SpanSource() {}
};
Fillers.cpp:
void SpanFiller::Render(int val, int len)
{
if(val == 0) {
t += len;
s += len;
return;
}
if(alpha != 256)
val = alpha * val >> 8;
if(val == 256) {
if(ss->kind==IMAGE_OPAQUE) memcpy(t,s,len*sizeof(RGBA)); // apex_memcpy() would be even faster
else{
for(int i = 0; i < len; i++) {
if(s[i].a == 255)
t[i] = s[i];
else
AlphaBlend(t[i], s[i]);
}
}
t += len;
s += len;
}
else {
const RGBA *e = t + len;
while(t < e)
AlphaBlendCover8(*t++, *s++, val);
}
}
Painter/Image.cpp:
struct PainterImageSpan : SpanSource, PainterImageSpanData {
LinearInterpolator interpolator;
PainterImageSpan(const PainterImageSpanData& f)
: PainterImageSpanData(f) {
interpolator.Set(xform);
kind = image.GetKindNoScan(); // Add this
}
Best regards,
Tom
|
|
|
 |
|
SSE2 and SVO optimization (Painter, memcpy....)
By: Tom1 on Mon, 27 April 2020 19:19
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 28 April 2020 10:12
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 28 April 2020 10:20
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 28 April 2020 10:27
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 28 April 2020 10:33
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 28 April 2020 11:10
|
 |
|
Re: BufferPainter::Clear() optimization
By: Oblivion on Tue, 28 April 2020 11:27
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 28 April 2020 11:17
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 15 May 2020 09:04
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 10:18
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 15 May 2020 11:33
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 11:41
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 15 May 2020 11:47
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 12:08
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 15 May 2020 13:15
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 13:36
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 23:13
|
 |
|
Re: BufferPainter::Clear() optimization
By: Didier on Fri, 15 May 2020 23:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sat, 16 May 2020 01:59
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sun, 17 May 2020 08:47
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sun, 17 May 2020 10:01
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sun, 17 May 2020 15:49
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sun, 17 May 2020 18:05
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sun, 17 May 2020 20:56
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sun, 17 May 2020 21:46
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sun, 17 May 2020 23:25
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 10:16
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 11:13
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 13:31
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 13:53
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 16:06
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 17:08
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 18:12
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 18:28
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 20:57
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 21:20
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Mon, 18 May 2020 21:40
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 21:56
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 13:33
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Sun, 17 May 2020 00:10
|
 |
|
Re: BufferPainter::Clear() optimization
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 15 May 2020 12:28
|
 |
|
Re: BufferPainter::Clear() optimization
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 18 May 2020 13:43
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 19 May 2020 00:02
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 19 May 2020 08:59
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 19 May 2020 09:14
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 19 May 2020 09:49
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 19 May 2020 12:35
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 19 May 2020 12:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 19 May 2020 13:18
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 19 May 2020 16:22
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 01:34
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 01:52
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 08:22
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 10:04
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 10:20
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 10:55
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 11:56
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 12:23
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 12:41
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 12:53
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 13:01
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 15:18
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Thu, 21 May 2020 16:21
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 15:58
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 16:15
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 17:16
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 17:31
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Wed, 20 May 2020 17:37
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 19:51
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Thu, 21 May 2020 09:04
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Thu, 21 May 2020 13:28
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Thu, 21 May 2020 16:38
|
 |
|
Re: BufferPainter::Clear() optimization
By: koldo on Thu, 21 May 2020 17:51
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Thu, 21 May 2020 19:22
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Thu, 21 May 2020 19:25
|
 |
|
Re: BufferPainter::Clear() optimization
By: Didier on Fri, 22 May 2020 09:32
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 10:04
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 10:05
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 10:28
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 22 May 2020 11:13
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 11:39
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 22 May 2020 11:46
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 22 May 2020 11:59
|
 |
|
Re: BufferPainter::Clear() optimization
By: koldo on Fri, 22 May 2020 12:47
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 13:01
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 22 May 2020 13:06
|
 |
|
Re: BufferPainter::Clear() optimization
By: koldo on Fri, 22 May 2020 16:58
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 19:03
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sun, 24 May 2020 10:20
|
 |
|
Re: BufferPainter::Clear() optimization
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 26 May 2020 13:14
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 26 May 2020 14:15
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 01 June 2020 00:39
|
 |
|
Re: BufferPainter::Clear() optimization
By: omari on Mon, 01 June 2020 11:24
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Mon, 01 June 2020 15:47
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 02 June 2020 13:59
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 02 June 2020 17:43
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Tue, 02 June 2020 18:31
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Thu, 04 June 2020 17:23
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Thu, 04 June 2020 17:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: Novo on Thu, 04 June 2020 18:07
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Thu, 04 June 2020 20:20
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 12 June 2020 12:23
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 12 June 2020 12:55
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 12 June 2020 16:28
|
 |
|
Re: BufferPainter::Clear() optimization
By: Novo on Fri, 12 June 2020 18:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sat, 13 June 2020 10:15
|
 |
|
Re: BufferPainter::Clear() optimization
By: coolman on Sat, 13 June 2020 10:33
|
 |
|
Re: BufferPainter::Clear() optimization
By: Novo on Sat, 13 June 2020 13:07
|
 |
|
Re: BufferPainter::Clear() optimization
By: coolman on Sat, 13 June 2020 14:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: Didier on Sun, 14 June 2020 12:45
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Sun, 14 June 2020 14:09
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Thu, 04 June 2020 18:48
|
 |
|
Re: BufferPainter::Clear() optimization
By: koldo on Fri, 22 May 2020 10:29
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Fri, 22 May 2020 11:32
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Fri, 22 May 2020 11:32
|
 |
|
Re: BufferPainter::Clear() optimization
By: Tom1 on Wed, 20 May 2020 12:52
|
 |
|
Re: BufferPainter::Clear() optimization
By: mirek on Tue, 19 May 2020 11:32
|
Goto Forum:
Current Time: Sat Jun 07 03:11:45 CEST 2025
Total time taken to generate the page: 0.04895 seconds
|
|
|