text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  var broadcast_util = require("../../ops/broadcast_util");
  var BatchNormPackedProgram = (function () {
      function BatchNormPackedProgram(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) {
          this.supportsBroadcasting = true;
          this.usesPackedTextures = true;
          this.variableNames = ['x', 'mean', 'variance'];
          broadcast_util.assertAndGetBroadcastShape(xShape, meanShape);
          broadcast_util.assertAndGetBroadcastShape(xShape, varianceShape);
          var offsetSnippet = 'vec4(0.0)';
          if (offsetShape != null) {
              broadcast_util.assertAndGetBroadcastShape(xShape, offsetShape);
              this.variableNames.push('offset');
              offsetSnippet = 'getOffsetAtOutCoords()';
          }
          var scaleSnippet = 'vec4(1.0)';
          if (scaleShape != null) {
              broadcast_util.assertAndGetBroadcastShape(xShape, scaleShape);
              this.variableNames.push('scale');
              scaleSnippet = 'getScaleAtOutCoords()';
          }
          this.outputShape = xShape;
          this.userCode = "\n      void main() {\n        vec4 offset = " + offsetSnippet + ";\n        vec4 scale = " + scaleSnippet + ";\n\n        vec4 x = getXAtOutCoords();\n        vec4 mean = getMeanAtOutCoords();\n        vec4 variance = getVarianceAtOutCoords();\n\n        vec4 inv = scale * inversesqrt(variance + vec4(" + varianceEpsilon + "));\n\n        setOutput((x - mean) * inv + offset);\n      }\n    ";
      }
      return BatchNormPackedProgram;
  }());
  exports.BatchNormPackedProgram = BatchNormPackedProgram;
  //# sourceMappingURL=batchnorm_packed_gpu.js.map