Re: RFR: 8297681: Unnecessary color conversion during 4BYTE_ABGR_PRE to INT_ARGB_PRE blit

2022-11-29 Thread Phil Race
On Sun, 27 Nov 2022 06:26:48 GMT, Sergey Bylokhov  wrote:

> I have found that drawing the BufferedImage.4BYTE_ABGR_PRE to the 
> INT_ARGB_PRE image caused java2d to do an additional conversion from/to ARGB 
> format. That conversion is done via a native 
> [loop](https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/java.desktop/share/native/libawt/java2d/loops/AlphaMath.c#L32)
>  which tries to approximate the math,  it is better to skip such conversion.
> 
> An additional benefit is ~x2 performance improvements of this blit, so it 
> will have the same performance as the opposite INT_ARGB_PRE to 4BYTE_ABGR_PRE 
> blit. 
> 
> 
> global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
> translucent,graphics.opts.alpharule=Src,graphics.opts.sizes=100:
> fix: 286439.77665 (var=3.42%) (100.0%)
> ***|
> ***|
> ** |
> base: 167280.80808 (var=1.8%) (58.4%)
> ** |
> ** |
> ** | 
> 
> global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
> translucent,graphics.opts.alpharule=SrcOver,graphics.opts.sizes=100:
> fix: 325989.80002 (var=1.58%) (100.0%)
> *** |
> |
> |
> base: 200830.44521 (var=1.58%) (61.61%)
> * |
> * |
> * | 
> 
> 
> To implement direct 4BYTE_ABGR_PRE to INT_ARGB_PRE blit it is necessary to 
> "declare" and "register" blit only, all other macros are already in place.

Marked as reviewed by prr (Reviewer).

-

PR: https://git.openjdk.org/jdk/pull/11376


Re: RFR: 8297681: Unnecessary color conversion during 4BYTE_ABGR_PRE to INT_ARGB_PRE blit

2022-11-28 Thread Laurent Bourgès
On Sun, 27 Nov 2022 06:26:48 GMT, Sergey Bylokhov  wrote:

> I have found that drawing the BufferedImage.4BYTE_ABGR_PRE to the 
> INT_ARGB_PRE image caused java2d to do an additional conversion from/to ARGB 
> format. That conversion is done via a native 
> [loop](https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/java.desktop/share/native/libawt/java2d/loops/AlphaMath.c#L32)
>  which tries to approximate the math,  it is better to skip such conversion.
> 
> An additional benefit is ~x2 performance improvements of this blit, so it 
> will have the same performance as the opposite INT_ARGB_PRE to 4BYTE_ABGR_PRE 
> blit. 
> 
> 
> global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
> translucent,graphics.opts.alpharule=Src,graphics.opts.sizes=100:
> fix: 286439.77665 (var=3.42%) (100.0%)
> ***|
> ***|
> ** |
> base: 167280.80808 (var=1.8%) (58.4%)
> ** |
> ** |
> ** | 
> 
> global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
> translucent,graphics.opts.alpharule=SrcOver,graphics.opts.sizes=100:
> fix: 325989.80002 (var=1.58%) (100.0%)
> *** |
> |
> |
> base: 200830.44521 (var=1.58%) (61.61%)
> * |
> * |
> * | 
> 
> 
> To implement direct 4BYTE_ABGR_PRE to INT_ARGB_PRE blit it is necessary to 
> "declare" and "register" blit only, all other macros are already in place.

Excellent finding !
LGTM, not an official reviewer.

-

PR: https://git.openjdk.org/jdk/pull/11376


RFR: 8297681: Unnecessary color conversion during 4BYTE_ABGR_PRE to INT_ARGB_PRE blit

2022-11-27 Thread Sergey Bylokhov
I have found that drawing the BufferedImage.4BYTE_ABGR_PRE to the INT_ARGB_PRE 
image caused java2d to do an additional conversion from/to ARGB format. That 
conversion is done via a native 
[loop](https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/java.desktop/share/native/libawt/java2d/loops/AlphaMath.c#L32)
 which tries to approximate the math,  it is better to skip such conversion.

An additional benefit is ~x2 performance improvements of this blit, so it will 
have the same performance as the opposite INT_ARGB_PRE to 4BYTE_ABGR_PRE blit. 


global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
translucent,graphics.opts.alpharule=Src,graphics.opts.sizes=100:
fix: 286439.77665 (var=3.42%) (100.0%)
***|
***|
** |
base: 167280.80808 (var=1.8%) (58.4%)
** |
** |
** | 

global.dest=BufImg(IntArgbPre),graphics.imaging.src=4ByteAbgrPre
translucent,graphics.opts.alpharule=SrcOver,graphics.opts.sizes=100:
fix: 325989.80002 (var=1.58%) (100.0%)
*** |
|
|
base: 200830.44521 (var=1.58%) (61.61%)
* |
* |
* | 


To implement direct 4BYTE_ABGR_PRE to INT_ARGB_PRE blit it is necessary to 
"declare" and "register" blit only, all other macros are already in place.

-

Commit messages:
 - Update SkipConversionIfPossible.java
 - Update SkipConversionIfPossible.java
 - make 4BYTE_ABGR_PRE to TYPE_INT_ARGB_PRE blit direct

Changes: https://git.openjdk.org/jdk/pull/11376/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11376&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8297681
  Stats: 98 lines in 2 files changed: 97 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/11376.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11376/head:pull/11376

PR: https://git.openjdk.org/jdk/pull/11376