OpenJDK / lanai / lanai
changeset 57649:a89720df2d17
8237458: J2Ddemo test becomes unresponsive after launching
Backed out changeset 09b8eb38bbfa
8236137 (avoid texture reallocations inside vertex-cache)
author | avu |
---|---|
date | Mon, 20 Jan 2020 16:54:42 +0300 |
parents | 2e3d5e1ba69d |
children | b97bada6ccdf |
files | src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m |
diffstat | 2 files changed, 19 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m Tue Jan 14 15:32:41 2020 +0530 +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m Mon Jan 20 16:54:42 2020 +0300 @@ -262,7 +262,6 @@ return; } [[mtlc getCommandBufferWrapper] registerPooledTexture:texHandle]; - [texHandle release]; id<MTLTexture> texBuff = texHandle.texture; id<MTLTexture> swizzledTexture = replaceTextureRegion(texBuff, srcInfo, rfi, 0, 0, sw, sh);
--- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m Tue Jan 14 15:32:41 2020 +0530 +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLVertexCache.m Mon Jan 20 16:54:42 2020 +0300 @@ -32,7 +32,6 @@ #include "MTLPaints.h" #include "MTLVertexCache.h" -#include "MTLTexturePool.h" #include "common.h" typedef struct _J2DVertex { @@ -43,7 +42,7 @@ static J2DVertex *vertexCache = NULL; static jint vertexCacheIndex = 0; -static MTLPooledTextureHandle * maskCacheTex = NULL; +static id<MTLTexture> maskCacheTex = NULL; static jint maskCacheIndex = 0; static id<MTLRenderCommandEncoder> encoder = NULL; @@ -91,7 +90,7 @@ [encoder setVertexBytes: vertexCache length:vertexCacheIndex * sizeof(J2DVertex) atIndex:MeshVertexBuffer]; - [encoder setFragmentTexture:maskCacheTex.texture atIndex: 0]; + [encoder setFragmentTexture:maskCacheTex atIndex: 0]; for (int i = 0; i < maskCacheIndex; i++) { J2dTraceLn1(J2D_TRACE_INFO, "MTLVertexCache_FlushVertexCache : draw texture at index %d", i); [encoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:i*6 vertexCount:6]; @@ -99,12 +98,8 @@ } vertexCacheIndex = 0; maskCacheIndex = 0; - - if (maskCacheTex != nil) { - [[mtlc getCommandBufferWrapper] registerPooledTexture:maskCacheTex]; - [maskCacheTex release]; - maskCacheTex = nil; - } + [maskCacheTex release]; + maskCacheTex = nil; } /** @@ -154,13 +149,14 @@ // when we need more than 1 byte to store a pixel(LCD) we need to update // below code. if (maskCacheTex == NULL) { - maskCacheTex = [mtlc.texturePool getTexture:MTLVC_MASK_CACHE_WIDTH_IN_TEXELS - height:MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS - format:MTLPixelFormatA8Unorm]; - if (maskCacheTex == nil) { - J2dTraceLn(J2D_TRACE_ERROR, "MTLVertexCache_InitMaskCache: can't obtain temporary texture object from pool"); - return JNI_FALSE; - } + MTLTextureDescriptor *textureDescriptor = + [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatA8Unorm + width:MTLVC_MASK_CACHE_WIDTH_IN_TEXELS + height:MTLVC_MASK_CACHE_HEIGHT_IN_TEXELS + mipmapped:NO]; + + maskCacheTex = [mtlc.device newTextureWithDescriptor:textureDescriptor]; + [textureDescriptor release]; } // init special fully opaque tile in the upper-right corner of // the mask cache texture @@ -180,8 +176,7 @@ }; - // do we really need this?? - [maskCacheTex.texture replaceRegion:region + [maskCacheTex replaceRegion:region mipmapLevel:0 withBytes:tile bytesPerRow:bytesPerRow]; @@ -215,11 +210,8 @@ J2dTraceLn(J2D_TRACE_INFO, "MTLVertexCache_DisableMaskCache"); MTLVertexCache_FlushVertexCache(mtlc); MTLVertexCache_RestoreColorState(mtlc); - if (maskCacheTex != nil) { - [[mtlc getCommandBufferWrapper] registerPooledTexture:maskCacheTex]; - [maskCacheTex release]; - maskCacheTex = nil; - } + [maskCacheTex release]; + maskCacheTex = nil; maskCacheIndex = 0; free(vertexCache); vertexCache = NULL; @@ -251,6 +243,8 @@ { J2dTraceLn2(J2D_TRACE_INFO, "maskCacheIndex = %d, vertexCacheIndex = %d", maskCacheIndex, vertexCacheIndex); MTLVertexCache_FlushVertexCache(mtlc); + [maskCacheTex release]; + maskCacheTex = nil; // TODO : Since we are not committing command buffer // in FlushVertexCache we need to create new maskcache // after present cache is full. Check whether we can @@ -285,7 +279,7 @@ // TODO : Research more and try removing memcpy logic. if (fullwidth <= width) { int height_offset = bytesPerRow * srcy; - [maskCacheTex.texture replaceRegion:region + [maskCacheTex replaceRegion:region mipmapLevel:0 withBytes:mask + height_offset bytesPerRow:bytesPerRow]; @@ -301,7 +295,7 @@ memcpy(tile + dst_offset, mask + src_offset, width); dst_offset = dst_offset + width; } - [maskCacheTex.texture replaceRegion:region + [maskCacheTex replaceRegion:region mipmapLevel:0 withBytes:tile bytesPerRow:bytesPerRow];