buildSrc/src/main/java/com/sun/scenario/effect/compiler/backend/sw/me/MEBackend.java

Print this page




  62     }
  63     
  64     public static class GenCode {
  65         public String javaCode;
  66         public String nativeCode;
  67     }
  68 
  69     private static void appendGetRelease(StringBuilder get,
  70                                          StringBuilder rel,
  71                                          String ctype,
  72                                          String cbufName, String jarrayName)
  73     {
  74         get.append("j" + ctype + " *" + cbufName + " = (j" + ctype + " *)");
  75         get.append("env->GetPrimitiveArrayCritical(" + jarrayName + ", 0);\n");
  76         get.append("if (" + cbufName + " == NULL) return;\n");
  77         rel.append("env->ReleasePrimitiveArrayCritical(" + jarrayName + ", " + cbufName + ", JNI_ABORT);\n");
  78     }
  79 
  80     public final GenCode getGenCode(String effectName,
  81                                     String peerName,

  82                                     String interfaceName)
  83     {
  84         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();

  85         StringBuilder interfaceDecl = new StringBuilder();
  86         StringBuilder constants = new StringBuilder();
  87         StringBuilder samplers = new StringBuilder();
  88         StringBuilder srcRects = new StringBuilder();
  89         StringBuilder posDecls = new StringBuilder();
  90         StringBuilder pixInitY = new StringBuilder();
  91         StringBuilder pixInitX = new StringBuilder();
  92         StringBuilder posIncrY = new StringBuilder();
  93         StringBuilder posInitY = new StringBuilder();
  94         StringBuilder posIncrX = new StringBuilder();
  95         StringBuilder posInitX = new StringBuilder();
  96         StringBuilder jparams = new StringBuilder();
  97         StringBuilder jparamDecls = new StringBuilder();
  98         StringBuilder cparamDecls = new StringBuilder();
  99         StringBuilder arrayGet = new StringBuilder();
 100         StringBuilder arrayRelease = new StringBuilder();
 101 
 102         appendGetRelease(arrayGet, arrayRelease, "int", "dst", "dst_arr");
 103         
 104         // TODO: only need to declare these if pixcoord is referenced


 247                 posIncrX.append("pos" + i + "_x += inc" + i + "_x;\n");
 248                 posIncrY.append("pos" + i + "_y += inc" + i + "_y;\n");
 249 
 250                 jparams.append(",\n");
 251                 jparams.append("src" + i + "Rect[0], src" + i + "Rect[1],\n");
 252                 jparams.append("src" + i + "Rect[2], src" + i + "Rect[3],\n");
 253                 jparams.append("src" + i + "w, src" + i + "h, src" + i + "scan");
 254                 
 255                 jparamDecls.append(",\n");
 256                 jparamDecls.append("float src" + i + "Rect_x1, float src" + i + "Rect_y1,\n");
 257                 jparamDecls.append("float src" + i + "Rect_x2, float src" + i + "Rect_y2,\n");
 258                 jparamDecls.append("int src" + i + "w, int src" + i + "h, int src" + i + "scan");
 259 
 260                 cparamDecls.append(",\n");
 261                 cparamDecls.append("jfloat src" + i + "Rect_x1, jfloat src" + i + "Rect_y1,\n");
 262                 cparamDecls.append("jfloat src" + i + "Rect_x2, jfloat src" + i + "Rect_y2,\n");
 263                 cparamDecls.append("jint src" + i + "w, jint src" + i + "h, jint src" + i + "scan");
 264             }
 265         }
 266 




 267         if (interfaceName != null) {
 268             interfaceDecl.append("implements "+interfaceName);
 269         }
 270 
 271         Reader template = new InputStreamReader(getClass().getResourceAsStream("MEJavaGlue.stg"));
 272         StringTemplateGroup group = new StringTemplateGroup(template, DefaultTemplateLexer.class);
 273         StringTemplate jglue = group.getInstanceOf("glue");
 274         jglue.setAttribute("effectName", effectName);
 275         jglue.setAttribute("peerName", peerName);

 276         jglue.setAttribute("interfaceDecl", interfaceDecl.toString());
 277         jglue.setAttribute("usercode", usercode.toString());
 278         jglue.setAttribute("samplers", samplers.toString());
 279         jglue.setAttribute("srcRects", srcRects.toString());
 280         jglue.setAttribute("constants", constants.toString());
 281         jglue.setAttribute("params", jparams.toString());
 282         jglue.setAttribute("paramDecls", jparamDecls.toString());
 283 
 284         template = new InputStreamReader(getClass().getResourceAsStream("MENativeGlue.stg"));
 285         group = new StringTemplateGroup(template, DefaultTemplateLexer.class);
 286         StringTemplate cglue = group.getInstanceOf("glue");
 287         cglue.setAttribute("peerName", peerName);
 288         cglue.setAttribute("jniName", peerName.replace("_", "_1"));
 289         cglue.setAttribute("paramDecls", cparamDecls.toString());
 290         cglue.setAttribute("arrayGet", arrayGet.toString());
 291         cglue.setAttribute("arrayRelease", arrayRelease.toString());
 292         cglue.setAttribute("posDecls", posDecls.toString());
 293         cglue.setAttribute("pixInitY", pixInitY.toString());
 294         cglue.setAttribute("pixInitX", pixInitX.toString());
 295         cglue.setAttribute("posIncrY", posIncrY.toString());




  62     }
  63     
  64     public static class GenCode {
  65         public String javaCode;
  66         public String nativeCode;
  67     }
  68 
  69     private static void appendGetRelease(StringBuilder get,
  70                                          StringBuilder rel,
  71                                          String ctype,
  72                                          String cbufName, String jarrayName)
  73     {
  74         get.append("j" + ctype + " *" + cbufName + " = (j" + ctype + " *)");
  75         get.append("env->GetPrimitiveArrayCritical(" + jarrayName + ", 0);\n");
  76         get.append("if (" + cbufName + " == NULL) return;\n");
  77         rel.append("env->ReleasePrimitiveArrayCritical(" + jarrayName + ", " + cbufName + ", JNI_ABORT);\n");
  78     }
  79 
  80     public final GenCode getGenCode(String effectName,
  81                                     String peerName,
  82                                     String genericsName,
  83                                     String interfaceName)
  84     {
  85         Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables();
  86         StringBuilder genericsDecl = new StringBuilder();
  87         StringBuilder interfaceDecl = new StringBuilder();
  88         StringBuilder constants = new StringBuilder();
  89         StringBuilder samplers = new StringBuilder();
  90         StringBuilder srcRects = new StringBuilder();
  91         StringBuilder posDecls = new StringBuilder();
  92         StringBuilder pixInitY = new StringBuilder();
  93         StringBuilder pixInitX = new StringBuilder();
  94         StringBuilder posIncrY = new StringBuilder();
  95         StringBuilder posInitY = new StringBuilder();
  96         StringBuilder posIncrX = new StringBuilder();
  97         StringBuilder posInitX = new StringBuilder();
  98         StringBuilder jparams = new StringBuilder();
  99         StringBuilder jparamDecls = new StringBuilder();
 100         StringBuilder cparamDecls = new StringBuilder();
 101         StringBuilder arrayGet = new StringBuilder();
 102         StringBuilder arrayRelease = new StringBuilder();
 103 
 104         appendGetRelease(arrayGet, arrayRelease, "int", "dst", "dst_arr");
 105         
 106         // TODO: only need to declare these if pixcoord is referenced


 249                 posIncrX.append("pos" + i + "_x += inc" + i + "_x;\n");
 250                 posIncrY.append("pos" + i + "_y += inc" + i + "_y;\n");
 251 
 252                 jparams.append(",\n");
 253                 jparams.append("src" + i + "Rect[0], src" + i + "Rect[1],\n");
 254                 jparams.append("src" + i + "Rect[2], src" + i + "Rect[3],\n");
 255                 jparams.append("src" + i + "w, src" + i + "h, src" + i + "scan");
 256                 
 257                 jparamDecls.append(",\n");
 258                 jparamDecls.append("float src" + i + "Rect_x1, float src" + i + "Rect_y1,\n");
 259                 jparamDecls.append("float src" + i + "Rect_x2, float src" + i + "Rect_y2,\n");
 260                 jparamDecls.append("int src" + i + "w, int src" + i + "h, int src" + i + "scan");
 261 
 262                 cparamDecls.append(",\n");
 263                 cparamDecls.append("jfloat src" + i + "Rect_x1, jfloat src" + i + "Rect_y1,\n");
 264                 cparamDecls.append("jfloat src" + i + "Rect_x2, jfloat src" + i + "Rect_y2,\n");
 265                 cparamDecls.append("jint src" + i + "w, jint src" + i + "h, jint src" + i + "scan");
 266             }
 267         }
 268 
 269         if (genericsName != null) {
 270             genericsDecl.append("<"+genericsName+">");
 271         }
 272 
 273         if (interfaceName != null) {
 274             interfaceDecl.append("implements "+interfaceName);
 275         }
 276 
 277         Reader template = new InputStreamReader(getClass().getResourceAsStream("MEJavaGlue.stg"));
 278         StringTemplateGroup group = new StringTemplateGroup(template, DefaultTemplateLexer.class);
 279         StringTemplate jglue = group.getInstanceOf("glue");
 280         jglue.setAttribute("effectName", effectName);
 281         jglue.setAttribute("peerName", peerName);
 282         jglue.setAttribute("genericsDecl", genericsDecl.toString());
 283         jglue.setAttribute("interfaceDecl", interfaceDecl.toString());
 284         jglue.setAttribute("usercode", usercode.toString());
 285         jglue.setAttribute("samplers", samplers.toString());
 286         jglue.setAttribute("srcRects", srcRects.toString());
 287         jglue.setAttribute("constants", constants.toString());
 288         jglue.setAttribute("params", jparams.toString());
 289         jglue.setAttribute("paramDecls", jparamDecls.toString());
 290 
 291         template = new InputStreamReader(getClass().getResourceAsStream("MENativeGlue.stg"));
 292         group = new StringTemplateGroup(template, DefaultTemplateLexer.class);
 293         StringTemplate cglue = group.getInstanceOf("glue");
 294         cglue.setAttribute("peerName", peerName);
 295         cglue.setAttribute("jniName", peerName.replace("_", "_1"));
 296         cglue.setAttribute("paramDecls", cparamDecls.toString());
 297         cglue.setAttribute("arrayGet", arrayGet.toString());
 298         cglue.setAttribute("arrayRelease", arrayRelease.toString());
 299         cglue.setAttribute("posDecls", posDecls.toString());
 300         cglue.setAttribute("pixInitY", pixInitY.toString());
 301         cglue.setAttribute("pixInitX", pixInitX.toString());
 302         cglue.setAttribute("posIncrY", posIncrY.toString());