On Thu, 11 Feb 2021 11:51:57 GMT, Ajit Ghaisas <aghai...@openjdk.org> wrote:

>> **Description :**
>> This is the implementation of [JEP 382 : New macOS Rendering 
>> Pipeline](https://bugs.openjdk.java.net/browse/JDK-8238361)
>> It implements a Java 2D internal rendering pipeline for macOS using the 
>> Apple Metal API.
>> The entire work on this was done under [OpenJDK Project - 
>> Lanai](http://openjdk.java.net/projects/lanai/)
>> 
>> We iterated through several Early Access (EA) builds and have reached a 
>> stage where it is ready to be integrated to openjdk/jdk. The latest EA build 
>> is available at - https://jdk.java.net/lanai/
>> 
>> A new option -Dsun.java2d.metal=true | True needs to be used to use this 
>> pipeline.
>> 
>> **Testing :**
>> This implementation has been tested with the tests present at - [Test Plan 
>> for JEP 382: New macOS Rendering 
>> Pipeline](https://bugs.openjdk.java.net/browse/JDK-8251396)
>> 
>> **Note to reviewers :**
>> 1) Default rendering pipeline on macOS has not been changed by this PR. 
>> OpenGL still stays as the default rendering pipeline and Metal rendering 
>> pipeline is optional to choose.
>> 
>> 2) To apply and test this PR - 
>> To enable the metal pipeline you must specify on command line 
>> -Dsun.java2d.metal=true (No message will be printed in this case) or 
>> -Dsun.java2d.metal=True (A message indicating Metal rendering pipeline is 
>> enabled gets printed)
>> 
>> 3) Review comments (including some preliminary informal review comments) are 
>> tracked with JBS issues - https://bugs.openjdk.java.net/issues/?filter=40598
>
> Ajit Ghaisas has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - Lanai PR#181 - 8261143 - aghaisas
>  - Lanai PR#180 - 8261546 - jdv

Changes requested by gziemski (Committer).

src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLLayer.m line 112:

> 110:                 sourceSize:MTLSizeMake(self.buffer.width, 
> self.buffer.height, 1)
> 111:                 toTexture:mtlDrawable.texture destinationSlice:0 
> destinationLevel:0 destinationOrigin:MTLOriginMake(0, 0, 0)];
> 112:         [blitEncoder endEncoding];

There is an issue with this code. Running Java2D.jar in Xcode asserts here with 
this message:

2021-02-11 14:11:45.710457-0600 java[49971:9486360] Metal API Validation Enabled
2021-02-11 14:11:46.038720-0600 system_profiler[49975:9486885] Metal API 
Validation Enabled
-[MTLDebugBlitCommandEncoder 
internalValidateCopyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:options:]:474:
 failed assertion `(sourceOrigin.y + sourceSize.height)(444) must be <= 
height(400).'
(lldb) 

and forcing the execution past it results in the java process crashing.

A solution would be to clip the src size like this:

        NSUInteger src_x = self.leftInset*self.contentsScale;
        NSUInteger src_y = self.topInset*self.contentsScale;
        NSUInteger src_w = self.buffer.width-src_x;
        NSUInteger src_h = self.buffer.height-src_y;
        
        [blitEncoder
                copyFromTexture:self.buffer sourceSlice:0 sourceLevel:0
                sourceOrigin:MTLOriginMake((jint)src_x, (jint)src_y, 0)
                sourceSize:MTLSizeMake(src_w, src_h, 1)
                toTexture:mtlDrawable.texture destinationSlice:0 
destinationLevel:0 destinationOrigin:MTLOriginMake(0, 0, 0)];
        [blitEncoder endEncoding];

-------------

PR: https://git.openjdk.java.net/jdk/pull/2403

Reply via email to