< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLBlitLoops.m

Print this page
*** 140,11 ***
  
  //#define TRACE_drawTex2Tex
  
  void drawTex2Tex(MTLContext *mtlc,
                          id<MTLTexture> src, id<MTLTexture> dst,
!                         jboolean isSrcOpaque, jboolean isDstOpaque, jint hint,
                          jint sx1, jint sy1, jint sx2, jint sy2,
                          jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2)
  {
  #ifdef TRACE_drawTex2Tex
      J2dRlsTraceLn2(J2D_TRACE_VERBOSE, "drawTex2Tex: src tex=%p, dst tex=%p", src, dst);
--- 140,11 ---
  
  //#define TRACE_drawTex2Tex
  
  void drawTex2Tex(MTLContext *mtlc,
                          id<MTLTexture> src, id<MTLTexture> dst,
!                         jboolean isSrcOpaque, jboolean isDstOpaque,
                          jint sx1, jint sy1, jint sx2, jint sy2,
                          jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2)
  {
  #ifdef TRACE_drawTex2Tex
      J2dRlsTraceLn2(J2D_TRACE_VERBOSE, "drawTex2Tex: src tex=%p, dst tex=%p", src, dst);

*** 153,13 ***
      J2dRlsTraceLn4(J2D_TRACE_VERBOSE, "  dx1=%f dy1=%f dx2=%f dy2=%f", dx1, dy1, dx2, dy2);
  #endif //TRACE_drawTex2Tex
  
      id<MTLRenderCommandEncoder> encoder = [mtlc.encoderManager getTextureEncoder:dst
                                                                       isSrcOpaque:isSrcOpaque
!                                                                      isDstOpaque:isDstOpaque
-                                                                    interpolation:hint
-     ];
  
      struct TxtVertex quadTxVerticesBuffer[6];
      fillTxQuad(quadTxVerticesBuffer, sx1, sy1, sx2, sy2, src.width, src.height, dx1, dy1, dx2, dy2, dst.width, dst.height);
  
      [encoder setVertexBytes:quadTxVerticesBuffer length:sizeof(quadTxVerticesBuffer) atIndex:MeshVertexBuffer];
--- 153,11 ---
      J2dRlsTraceLn4(J2D_TRACE_VERBOSE, "  dx1=%f dy1=%f dx2=%f dy2=%f", dx1, dy1, dx2, dy2);
  #endif //TRACE_drawTex2Tex
  
      id<MTLRenderCommandEncoder> encoder = [mtlc.encoderManager getTextureEncoder:dst
                                                                       isSrcOpaque:isSrcOpaque
!                                                                      isDstOpaque:isDstOpaque];
  
      struct TxtVertex quadTxVerticesBuffer[6];
      fillTxQuad(quadTxVerticesBuffer, sx1, sy1, sx2, sy2, src.width, src.height, dx1, dy1, dx2, dy2, dst.width, dst.height);
  
      [encoder setVertexBytes:quadTxVerticesBuffer length:sizeof(quadTxVerticesBuffer) atIndex:MeshVertexBuffer];

*** 249,11 ***
   */
  
  static void
  MTLBlitSwToTextureViaPooledTexture(
          MTLContext *mtlc, SurfaceDataRasInfo *srcInfo, BMTLSDOps * bmtlsdOps,
!         MTLRasterFormatInfo * rfi, jboolean useBlitEncoder, jint hint,
          jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2)
  {
      const int sw = srcInfo->bounds.x2 - srcInfo->bounds.x1;
      const int sh = srcInfo->bounds.y2 - srcInfo->bounds.y1;
      id<MTLTexture> dest = bmtlsdOps->pTexture;
--- 247,11 ---
   */
  
  static void
  MTLBlitSwToTextureViaPooledTexture(
          MTLContext *mtlc, SurfaceDataRasInfo *srcInfo, BMTLSDOps * bmtlsdOps,
!         MTLRasterFormatInfo * rfi, jboolean useBlitEncoder,
          jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2)
  {
      const int sw = srcInfo->bounds.x2 - srcInfo->bounds.x1;
      const int sh = srcInfo->bounds.y2 - srcInfo->bounds.y1;
      id<MTLTexture> dest = bmtlsdOps->pTexture;

*** 279,11 ***
                      destinationSlice:0
                      destinationLevel:0
                     destinationOrigin:MTLOriginMake(dx1, dy1, 0)];
          [blitEncoder endEncoding];
      } else {
!         drawTex2Tex(mtlc, swizzledTexture != nil ? swizzledTexture : texBuff, dest, !rfi->hasAlpha, bmtlsdOps->isOpaque, hint,
                      0, 0, sw, sh, dx1, dy1, dx2, dy2);
      }
  
      if (swizzledTexture != nil) {
          [swizzledTexture release];
--- 277,11 ---
                      destinationSlice:0
                      destinationLevel:0
                     destinationOrigin:MTLOriginMake(dx1, dy1, 0)];
          [blitEncoder endEncoding];
      } else {
!         drawTex2Tex(mtlc, swizzledTexture != nil ? swizzledTexture : texBuff, dest, !rfi->hasAlpha, bmtlsdOps->isOpaque,
                      0, 0, sw, sh, dx1, dy1, dx2, dy2);
      }
  
      if (swizzledTexture != nil) {
          [swizzledTexture release];

*** 485,11 ***
      }
  
  #ifdef TRACE_ISOBLIT
      J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via sampling]");
  #endif //TRACE_ISOBLIT
!     drawTex2Tex(mtlc, srcTex, dstTex, srcOps->isOpaque, dstOps->isOpaque, hint, sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2);
  }
  
  /**
   * General blit method for copying a system memory ("Sw") surface to a native MTL surface.
   * Parameter texture == true only in SwToTextureBlit (straight copy from sw to texture), dest coordinates will always be integers.
--- 483,11 ---
      }
  
  #ifdef TRACE_ISOBLIT
      J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via sampling]");
  #endif //TRACE_ISOBLIT
!     drawTex2Tex(mtlc, srcTex, dstTex, srcOps->isOpaque, dstOps->isOpaque, sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2);
  }
  
  /**
   * General blit method for copying a system memory ("Sw") surface to a native MTL surface.
   * Parameter texture == true only in SwToTextureBlit (straight copy from sw to texture), dest coordinates will always be integers.

*** 613,17 ***
                      replaceTextureRegion(dest, &srcInfo, &rfi, (int) dx1, (int) dy1, (int) dx2, (int) dy2);
                  } else {
  #ifdef TRACE_BLIT
                      J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via pooled + blit]");
  #endif //TRACE_BLIT
!                     MTLBlitSwToTextureViaPooledTexture(mtlc, &srcInfo, dstOps, &rfi, true, hint, dx1, dy1, dx2, dy2);
                  }
              } else { // !useReplaceRegion
  #ifdef TRACE_BLIT
                  J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via pooled texture]");
  #endif //TRACE_BLIT
!                 MTLBlitSwToTextureViaPooledTexture(mtlc, &srcInfo, dstOps, &rfi, false, hint, dx1, dy1, dx2, dy2);
              }
          }
          SurfaceData_InvokeRelease(env, srcOps, &srcInfo);
      }
      SurfaceData_InvokeUnlock(env, srcOps, &srcInfo);
--- 611,17 ---
                      replaceTextureRegion(dest, &srcInfo, &rfi, (int) dx1, (int) dy1, (int) dx2, (int) dy2);
                  } else {
  #ifdef TRACE_BLIT
                      J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via pooled + blit]");
  #endif //TRACE_BLIT
!                     MTLBlitSwToTextureViaPooledTexture(mtlc, &srcInfo, dstOps, &rfi, true, dx1, dy1, dx2, dy2);
                  }
              } else { // !useReplaceRegion
  #ifdef TRACE_BLIT
                  J2dTraceImpl(J2D_TRACE_VERBOSE, JNI_TRUE," [via pooled texture]");
  #endif //TRACE_BLIT
!                 MTLBlitSwToTextureViaPooledTexture(mtlc, &srcInfo, dstOps, &rfi, false, dx1, dy1, dx2, dy2);
              }
          }
          SurfaceData_InvokeRelease(env, srcOps, &srcInfo);
      }
      SurfaceData_InvokeUnlock(env, srcOps, &srcInfo);
< prev index next >