<AWT Dev> RFR: 8260931: Implement JEP 382: New macOS Rendering Pipeline [v7]

Gerard Ziemski gziemski at openjdk.java.net
Thu Feb 11 21:06:41 UTC 2021


On Thu, 11 Feb 2021 20:58:36 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:

>> 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(src_x, src_y, 0)
>>                 sourceSize:MTLSizeMake(src_w, src_h, 1)
>>                 toTexture:mtlDrawable.texture destinationSlice:0 destinationLevel:0 destinationOrigin:MTLOriginMake(0, 0, 0)];
>>         [blitEncoder endEncoding];
>
> I guess you will only see this if `Metal API Validation Enabled`

Which actually begs a question of whether we tested with `Metal API Validation Enabled` ?

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

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


More information about the awt-dev mailing list