diff options
author | Yann Bodson <yann.bodson@nokia.com> | 2009-08-31 00:29:56 (GMT) |
---|---|---|
committer | Yann Bodson <yann.bodson@nokia.com> | 2009-08-31 00:29:56 (GMT) |
commit | f5c0745622a914003aa75aaaa1e828854c1c85ba (patch) | |
tree | 6f9c27a22d5987a8bddd512222ab29dfeda5caf3 /src/opengl | |
parent | 9cc59a858d116f75c19a782602ab8679405d9764 (diff) | |
parent | 9dade8d2e57655019ed4dc2fcdc4e226401138a2 (diff) | |
download | Qt-f5c0745622a914003aa75aaaa1e828854c1c85ba.zip Qt-f5c0745622a914003aa75aaaa1e828854c1c85ba.tar.gz Qt-f5c0745622a914003aa75aaaa1e828854c1c85ba.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src/opengl')
22 files changed, 3949 insertions, 3759 deletions
diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp index 8f9a6a9..425b877 100644 --- a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp +++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp @@ -98,7 +98,7 @@ void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseSc case QPainterPath::MoveToElement: // qDebug("element[%d] is a MoveToElement", i); vertexArrayStops.append(vertexArray.size()); - vertexArray.add(points[i]); // Add the moveTo as a new vertex + lineToArray(points[i].x(), points[i].y()); // Add the moveTo as a new vertex break; case QPainterPath::LineToElement: // qDebug("element[%d] is a LineToElement", i); diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h index d5241a8..ace6b63 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h @@ -209,7 +209,7 @@ (QGLCustomShaderStage). The shader will implement a pre-defined method name which Qt's fragment pipeline will call: - lowp vec4 customShader(sampler2d src, vec2 srcCoords) + lowp vec4 customShader(lowp sampler2d imageTexture, highp vec2 textureCoords) The provided src and srcCoords parameters can be used to sample from the source image. diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h index cf930f3..c8e85ab 100644 --- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h @@ -73,8 +73,8 @@ static const char* const qglslMainVertexShader = "\ }"; static const char* const qglslMainWithTexCoordsVertexShader = "\ - attribute mediump vec2 textureCoordArray; \ - varying mediump vec2 textureCoords; \ + attribute highp vec2 textureCoordArray; \ + varying highp vec2 textureCoords; \ uniform highp float depth;\ void setPosition();\ void main(void) \ @@ -105,9 +105,9 @@ static const char* const qglslPositionWithPatternBrushVertexShader = "\ attribute highp vec4 vertexCoordsArray; \ uniform highp mat4 pmvMatrix; \ uniform mediump vec2 halfViewportSize; \ - uniform mediump vec2 invertedTextureSize; \ - uniform mediump mat3 brushTransform; \ - varying mediump vec2 patternTexCoords; \ + uniform highp vec2 invertedTextureSize; \ + uniform highp mat3 brushTransform; \ + varying highp vec2 patternTexCoords; \ void setPosition(void) { \ gl_Position = pmvMatrix * vertexCoordsArray;\ gl_Position.xy = gl_Position.xy / gl_Position.w; \ @@ -124,9 +124,9 @@ static const char* const qglslAffinePositionWithPatternBrushVertexShader = qglslPositionWithPatternBrushVertexShader; static const char* const qglslPatternBrushSrcFragmentShader = "\ - uniform sampler2D brushTexture;\ + uniform lowp sampler2D brushTexture;\ uniform lowp vec4 patternColor; \ - varying mediump vec2 patternTexCoords;\ + varying highp vec2 patternTexCoords;\ lowp vec4 srcPixel() { \ return patternColor * (1.0 - texture2D(brushTexture, patternTexCoords).r); \ }\n"; @@ -139,7 +139,7 @@ static const char* const qglslPositionWithLinearGradientBrushVertexShader = "\ uniform mediump vec2 halfViewportSize; \ uniform highp vec3 linearData; \ uniform highp mat3 brushTransform; \ - varying mediump float index ; \ + varying mediump float index; \ void setPosition() { \ gl_Position = pmvMatrix * vertexCoordsArray;\ gl_Position.xy = gl_Position.xy / gl_Position.w; \ @@ -155,7 +155,7 @@ static const char* const qglslAffinePositionWithLinearGradientBrushVertexShader = qglslPositionWithLinearGradientBrushVertexShader; static const char* const qglslLinearGradientBrushSrcFragmentShader = "\ - uniform sampler2D brushTexture; \ + uniform lowp sampler2D brushTexture; \ varying mediump float index; \ lowp vec4 srcPixel() { \ mediump vec2 val = vec2(index, 0.5); \ @@ -187,7 +187,7 @@ static const char* const qglslAffinePositionWithConicalGradientBrushVertexShader static const char* const qglslConicalGradientBrushSrcFragmentShader = "\n\ #define INVERSE_2PI 0.1591549430918953358 \n\ - uniform sampler2D brushTexture; \n\ + uniform lowp sampler2D brushTexture; \n\ uniform mediump float angle; \ varying highp vec2 A; \ lowp vec4 srcPixel() { \ @@ -226,7 +226,7 @@ static const char* const qglslAffinePositionWithRadialGradientBrushVertexShader = qglslPositionWithRadialGradientBrushVertexShader; static const char* const qglslRadialGradientBrushSrcFragmentShader = "\ - uniform sampler2D brushTexture; \ + uniform lowp sampler2D brushTexture; \ uniform highp float fmp2_m_radius2; \ uniform highp float inverse_2_fmp2_m_radius2; \ varying highp float b; \ @@ -243,9 +243,9 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\ attribute highp vec4 vertexCoordsArray; \ uniform highp mat4 pmvMatrix; \ uniform mediump vec2 halfViewportSize; \ - uniform mediump vec2 invertedTextureSize; \ - uniform mediump mat3 brushTransform; \ - varying mediump vec2 brushTextureCoords; \ + uniform highp vec2 invertedTextureSize; \ + uniform highp mat3 brushTransform; \ + varying highp vec2 brushTextureCoords; \ void setPosition(void) { \ gl_Position = pmvMatrix * vertexCoordsArray;\ gl_Position.xy = gl_Position.xy / gl_Position.w; \ @@ -255,23 +255,22 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\ gl_Position.xy = gl_Position.xy * invertedHTexCoordsZ; \ gl_Position.w = invertedHTexCoordsZ; \ brushTextureCoords.xy = (hTexCoords.xy * invertedTextureSize) * gl_Position.w; \ - brushTextureCoords.y = -brushTextureCoords.y; \ }"; static const char* const qglslAffinePositionWithTextureBrushVertexShader = qglslPositionWithTextureBrushVertexShader; static const char* const qglslTextureBrushSrcFragmentShader = "\ - varying mediump vec2 brushTextureCoords; \ - uniform sampler2D brushTexture; \ + varying highp vec2 brushTextureCoords; \ + uniform lowp sampler2D brushTexture; \ lowp vec4 srcPixel() { \ return texture2D(brushTexture, brushTextureCoords); \ }"; static const char* const qglslTextureBrushSrcWithPatternFragmentShader = "\ - varying mediump vec2 brushTextureCoords; \ + varying highp vec2 brushTextureCoords; \ uniform lowp vec4 patternColor; \ - uniform sampler2D brushTexture; \ + uniform lowp sampler2D brushTexture; \ lowp vec4 srcPixel() { \ return patternColor * (1.0 - texture2D(brushTexture, brushTextureCoords).r); \ }"; @@ -284,16 +283,16 @@ static const char* const qglslSolidBrushSrcFragmentShader = "\ }"; static const char* const qglslImageSrcFragmentShader = "\ - varying mediump vec2 textureCoords; \ - uniform sampler2D imageTexture; \ + varying highp vec2 textureCoords; \ + uniform lowp sampler2D imageTexture; \ lowp vec4 srcPixel() { \ return texture2D(imageTexture, textureCoords); \ }"; static const char* const qglslCustomSrcFragmentShader = "\ varying highp vec2 textureCoords; \ - uniform sampler2D imageTexture; \ - lowp vec4 customShader(sampler2D texture, vec2 coords); \ + uniform lowp sampler2D imageTexture; \ + lowp vec4 customShader(lowp sampler2D texture, highp vec2 coords); \ lowp vec4 srcPixel() { \ return customShader(imageTexture, textureCoords); \ }"; @@ -301,14 +300,14 @@ static const char* const qglslCustomSrcFragmentShader = "\ static const char* const qglslImageSrcWithPatternFragmentShader = "\ varying highp vec2 textureCoords; \ uniform lowp vec4 patternColor; \ - uniform sampler2D imageTexture; \ + uniform lowp sampler2D imageTexture; \ lowp vec4 srcPixel() { \ return patternColor * (1.0 - texture2D(imageTexture, textureCoords).r); \ }\n"; static const char* const qglslNonPremultipliedImageSrcFragmentShader = "\ varying highp vec2 textureCoords; \ - uniform sampler2D imageTexture; \ + uniform lowp sampler2D imageTexture; \ lowp vec4 srcPixel() { \ lowp vec4 sample = texture2D(imageTexture, textureCoords); \ sample.rgb = sample.rgb * sample.a; \ @@ -383,7 +382,7 @@ static const char* const qglslMainFragmentShader = "\ static const char* const qglslMaskFragmentShader = "\ varying highp vec2 textureCoords;\ - uniform sampler2D maskTexture;\ + uniform lowp sampler2D maskTexture;\ lowp vec4 applyMask(lowp vec4 src) \ {\ lowp vec4 mask = texture2D(maskTexture, textureCoords); \ diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 2901c1e..f2aabd2 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -219,6 +219,11 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) pex->transferMode(BrushDrawingMode); +#ifndef QT_OPENGL_ES_2 + if (pex->inRenderText) + glPushAttrib(GL_ENABLE_BIT | GL_VIEWPORT_BIT | GL_SCISSOR_BIT); +#endif + glDisable(GL_DEPTH_TEST); glDisable(GL_SCISSOR_TEST); @@ -268,6 +273,11 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) glViewport(0, 0, pex->width, pex->height); pex->updateDepthScissorTest(); + +#ifndef QT_OPENGL_ES_2 + if (pex->inRenderText) + glPopAttrib(); +#endif } void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) @@ -376,6 +386,7 @@ void QGL2PaintEngineExPrivate::useSimpleShader() void QGL2PaintEngineExPrivate::updateBrushTexture() { + Q_Q(QGL2PaintEngineEx); // qDebug("QGL2PaintEngineExPrivate::updateBrushTexture()"); Qt::BrushStyle style = currentBrush->style(); @@ -384,8 +395,8 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() QImage texImage = qt_imageForBrush(style, false); glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); - ctx->d_func()->bindTexture(texImage, GL_TEXTURE_2D, GL_RGBA, true); - updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, true); + ctx->d_func()->bindTexture(texImage, GL_TEXTURE_2D, GL_RGBA, true, QGLContext::InternalBindOption); + updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform); } else if (style >= Qt::LinearGradientPattern && style <= Qt::ConicalGradientPattern) { // Gradiant brush: All the gradiants use the same texture @@ -400,19 +411,18 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() glBindTexture(GL_TEXTURE_2D, texId); if (g->spread() == QGradient::RepeatSpread || g->type() == QGradient::ConicalGradient) - updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, true); + updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform); else if (g->spread() == QGradient::ReflectSpread) - updateTextureFilter(GL_TEXTURE_2D, GL_MIRRORED_REPEAT_IBM, true); + updateTextureFilter(GL_TEXTURE_2D, GL_MIRRORED_REPEAT_IBM, q->state()->renderHints & QPainter::SmoothPixmapTransform); else - updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, true); + updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, q->state()->renderHints & QPainter::SmoothPixmapTransform); } else if (style == Qt::TexturePattern) { const QPixmap& texPixmap = currentBrush->texture(); glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); - // TODO: Support y-inverted pixmaps as brushes - ctx->d_func()->bindTexture(texPixmap, GL_TEXTURE_2D, GL_RGBA, true); - updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, true); + ctx->d_func()->bindTexture(texPixmap, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption); + updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform); } brushTextureDirty = false; } @@ -667,7 +677,7 @@ void QGL2PaintEngineExPrivate::drawTexture(const QGLRect& dest, const QGLRect& s GLfloat dx = 1.0 / textureSize.width(); GLfloat dy = 1.0 / textureSize.height(); - QGLRect srcTextureRect(src.left*dx, 1.0 - src.top*dy, src.right*dx, 1.0 - src.bottom*dy); + QGLRect srcTextureRect(src.left*dx, src.top*dy, src.right*dx, src.bottom*dy); setCoords(staticVertexCoordinateArray, dest); setCoords(staticTextureCoordinateArray, srcTextureRect); @@ -675,7 +685,7 @@ void QGL2PaintEngineExPrivate::drawTexture(const QGLRect& dest, const QGLRect& s glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } -void QGL2PaintEngineEx::sync() +void QGL2PaintEngineEx::beginNativePainting() { Q_D(QGL2PaintEngineEx); ensureActive(); @@ -709,15 +719,25 @@ void QGL2PaintEngineEx::sync() #endif d->lastTexture = GLuint(-1); + d->resetGLState(); + d->needsSync = true; +} + +void QGL2PaintEngineExPrivate::resetGLState() +{ glDisable(GL_BLEND); glActiveTexture(GL_TEXTURE0); - glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); glDepthFunc(GL_LESS); glDepthMask(true); glClearDepth(1); +} +void QGL2PaintEngineEx::endNativePainting() +{ + Q_D(QGL2PaintEngineEx); d->needsSync = true; } @@ -826,6 +846,11 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path) glEnable(GL_STENCIL_TEST); prepareForDraw(currentBrush->isOpaque()); + +#ifndef QT_OPENGL_ES_2 + if (inRenderText) + shaderManager->currentProgram()->setUniformValue(location(QGLEngineShaderManager::Depth), zValueForRenderText()); +#endif composite(vertexCoordinateArray.boundingRect()); glDisable(GL_STENCIL_TEST); @@ -863,9 +888,21 @@ void QGL2PaintEngineExPrivate::fillStencilWithVertexArray(QGL2PEXVertexArray& ve glEnable(GL_STENCIL_TEST); // For some reason, this has to happen _after_ the simple shader is use()'d glDisable(GL_BLEND); +#ifndef QT_OPENGL_ES_2 + if (inRenderText) { + glPushAttrib(GL_ENABLE_BIT); + glDisable(GL_DEPTH_TEST); + } +#endif + // Draw the vertecies into the stencil buffer: drawVertexArrays(vertexArray, GL_TRIANGLE_FAN); +#ifndef QT_OPENGL_ES_2 + if (inRenderText) + glPopAttrib(); +#endif + // Enable color writes & disable stencil writes glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } @@ -971,9 +1008,19 @@ void QGL2PaintEngineExPrivate::drawVertexArrays(QGL2PEXVertexArray& vertexArray, glDisableVertexAttribArray(QT_VERTEX_COORDS_ATTR); } - - - +float QGL2PaintEngineExPrivate::zValueForRenderText() const +{ +#ifndef QT_OPENGL_ES_2 + // Get the z translation value from the model view matrix and + // transform it using the ortogonal projection with z-near = 0, + // and z-far = 1, which is used in QGLWidget::renderText() + GLdouble model[4][4]; + glGetDoublev(GL_MODELVIEW_MATRIX, &model[0][0]); + return -2 * model[3][2] - 1; +#else + return 0; +#endif +} /////////////////////////////////// Public Methods ////////////////////////////////////////// @@ -992,8 +1039,8 @@ void QGL2PaintEngineEx::fill(const QVectorPath &path, const QBrush &brush) if (brush.style() == Qt::NoBrush) return; - - ensureActive(); + if (!d->inRenderText) + ensureActive(); d->setBrush(&brush); d->fill(path); d->setBrush(&(state()->brush)); // reset back to the state's brush @@ -1074,6 +1121,7 @@ void QGL2PaintEngineEx::renderHintsChanged() Q_D(QGL2PaintEngineEx); d->lastTexture = GLuint(-1); + d->brushTextureDirty = true; // qDebug("QGL2PaintEngineEx::renderHintsChanged() not implemented!"); } @@ -1092,16 +1140,19 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - QGLTexture *texture = ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, true, true); + QGLTexture *texture = + ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, + QGLContext::InternalBindOption + | QGLContext::CanFlipNativePixmapBindOption); - GLfloat top = texture->yInverted ? (pixmap.height() - src.top()) : src.top(); - GLfloat bottom = texture->yInverted ? (pixmap.height() - src.bottom()) : src.bottom(); + GLfloat top = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.top()) : src.top(); + GLfloat bottom = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.bottom()) : src.bottom(); QGLRect srcRect(src.left(), top, src.right(), bottom); bool isBitmap = pixmap.isQBitmap(); bool isOpaque = !isBitmap && !pixmap.hasAlphaChannel(); - d->updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, + d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, texture->id); d->drawTexture(dest, srcRect, pixmap.size(), isOpaque, isBitmap); } @@ -1115,10 +1166,10 @@ void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, true); + QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption); GLuint id = texture->id; - d->updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, + d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, id); d->drawTexture(dest, src, image.size(), !image.hasAlphaChannel()); } @@ -1133,7 +1184,7 @@ void QGL2PaintEngineEx::drawTexture(const QRectF &dest, GLuint textureId, const glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); glBindTexture(GL_TEXTURE_2D, textureId); - d->updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, + d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, textureId); d->drawTexture(dest, src, size, false); } @@ -1142,7 +1193,8 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem { Q_D(QGL2PaintEngineEx); - ensureActive(); + if (!d->inRenderText) + ensureActive(); QOpenGL2PaintEngineState *s = state(); const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem); @@ -1191,6 +1243,8 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(const QPointF &p, const QTextIte if (cache->width() == 0 || cache->height() == 0) return; + if (inRenderText) + transferMode(BrushDrawingMode); transferMode(TextDrawingMode); if (glyphType == QFontEngineGlyphCache::Raster_A8) @@ -1229,6 +1283,11 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(const QPointF &p, const QTextIte prepareForDraw(false); // Text always causes src pixels to be transparent +#ifndef QT_OPENGL_ES_2 + if (inRenderText) + shaderManager->currentProgram()->setUniformValue(location(QGLEngineShaderManager::Depth), zValueForRenderText()); +#endif + shaderManager->currentProgram()->setUniformValue(location(QGLEngineShaderManager::MaskTexture), QT_MASK_TEXTURE_UNIT); if (vertexCoordinateArray.data() != oldVertexCoordinateDataPtr) @@ -1274,12 +1333,6 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev) glViewport(0, 0, d->width, d->height); -// glClearColor(0.0, 1.0, 0.0, 1.0); -// glClear(GL_COLOR_BUFFER_BIT); -// d->ctx->swapBuffers(); -// qDebug("You should see green now"); -// sleep(5); - d->brushTextureDirty = true; d->brushUniformsDirty = true; d->matrixDirty = true; @@ -1292,10 +1345,12 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev) d->use_system_clip = !systemClip().isEmpty(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_SCISSOR_TEST); - glDepthFunc(GL_LEQUAL); - glDepthMask(false); + if (!d->inRenderText) { + glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); + glDepthFunc(GL_LEQUAL); + glDepthMask(false); + } #if !defined(QT_OPENGL_ES_2) glDisable(GL_MULTISAMPLE); @@ -1356,6 +1411,8 @@ bool QGL2PaintEngineEx::end() d->drawable.doneCurrent(); d->ctx->d_ptr->active_engine = 0; + d->resetGLState(); + return false; } @@ -1499,7 +1556,7 @@ void QGL2PaintEngineEx::clip(const QVectorPath &path, Qt::ClipOperation op) if (op == Qt::ReplaceClip && !d->hasClipOperations()) op = Qt::IntersectClip; - if (!path.isEmpty() && op == Qt::IntersectClip && (path.hints() & QVectorPath::RectangleHint)) { + if (!path.isEmpty() && op == Qt::IntersectClip && (path.shape() == QVectorPath::RectangleHint)) { const QPointF* const points = reinterpret_cast<const QPointF*>(path.points()); QRectF rect(points[0], points[2]); @@ -1598,7 +1655,11 @@ void QGL2PaintEngineExPrivate::regenerateDepthClip() void QGL2PaintEngineExPrivate::systemStateChanged() { Q_Q(QGL2PaintEngineEx); - use_system_clip = !systemClip.isEmpty(); + + if (q->paintDevice()->devType() == QInternal::Widget) + use_system_clip = false; + else + use_system_clip = !systemClip.isEmpty(); glDisable(GL_DEPTH_TEST); q->state()->depthTestEnabled = false; @@ -1714,6 +1775,12 @@ QPainterState *QGL2PaintEngineEx::createState(QPainterState *orig) const return s; } +void QGL2PaintEngineEx::setRenderTextActive(bool active) +{ + Q_D(QGL2PaintEngineEx); + d->inRenderText = active; +} + QOpenGL2PaintEngineState::QOpenGL2PaintEngineState(QOpenGL2PaintEngineState &other) : QPainterState(other) { diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h index 7b734e3..68447bc 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h @@ -133,12 +133,16 @@ public: inline const QOpenGL2PaintEngineState *state() const { return static_cast<const QOpenGL2PaintEngineState *>(QPaintEngineEx::state()); } - virtual void sync(); + + void beginNativePainting(); + void endNativePainting(); const QGLContext* context(); QPixmapFilter *createPixmapFilter(int type) const; + void setRenderTextActive(bool); + private: Q_DISABLE_COPY(QGL2PaintEngineEx) }; @@ -154,7 +158,8 @@ public: ctx(0), currentBrush(0), inverseScale(1), - shaderManager(0) + shaderManager(0), + inRenderText(false) { } ~QGL2PaintEngineExPrivate(); @@ -168,6 +173,7 @@ public: void setBrush(const QBrush* brush); void transferMode(EngineMode newMode); + void resetGLState(); // fill, drawOutline, drawTexture & drawCachedGlyphs are the rendering entry points: void fill(const QVectorPath &path); @@ -188,6 +194,8 @@ public: inline void useSimpleShader(); inline QColor premultiplyColor(QColor c, GLfloat opacity); + float zValueForRenderText() const; + QGL2PaintEngineEx* q; QGLDrawable drawable; int width, height; @@ -237,6 +245,7 @@ public: GLuint lastTexture; bool needsSync; + bool inRenderText; }; QT_END_NAMESPACE diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 57ef70c..f3265b4 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1443,7 +1443,7 @@ bool QGLTextureCache::remove(QGLContext* ctx, GLuint textureId) for (int i = 0; i < keys.size(); ++i) { QGLTexture *tex = m_cache.object(keys.at(i)); if (tex->id == textureId && tex->context == ctx) { - tex->clean = true; // forces a glDeleteTextures() call + tex->options |= QGLContext::MemoryManagedBindOption; // forces a glDeleteTextures() call m_cache.remove(keys.at(i)); return true; } @@ -1479,7 +1479,7 @@ void QGLTextureCache::imageCleanupHook(qint64 cacheKey) if (qApp->thread() != QThread::currentThread()) return; QGLTexture *texture = instance()->getTexture(cacheKey); - if (texture && texture->clean) + if (texture && texture->options & QGLContext::MemoryManagedBindOption) instance()->remove(cacheKey); } @@ -1490,7 +1490,7 @@ void QGLTextureCache::pixmapCleanupHook(QPixmap* pixmap) if (qApp->thread() == QThread::currentThread()) { const qint64 cacheKey = pixmap->cacheKey(); QGLTexture *texture = instance()->getTexture(cacheKey); - if (texture && texture->clean) + if (texture && texture->options & QGLContext::MemoryManagedBindOption) instance()->remove(cacheKey); } #if defined(Q_WS_X11) @@ -1578,6 +1578,45 @@ Q_OPENGL_EXPORT QGLShareRegister* qgl_share_reg() Please note that QGLContext is not thread safe. */ +/*! + \enum QGLContext::BindOption + A set of options to decide how to bind a texture using bindTexture(). + + \value NoBindOption Don't do anything, pass the texture straight + thru. + + \value InvertedYBindOption Specifies that the texture should be flipped + over the X axis so that the texture coordinate 0,0 corresponds to + the top left corner. Inverting the texture implies a deep copy + prior to upload. + + \value MipmapBindOption Specifies that bindTexture should try + to generate mipmaps. If the GL implementation supports the \c + GL_SGIS_generate_mipmap extension, mipmaps will be automatically + generated for the texture. Mipmap generation is only supported for + the \c GL_TEXTURE_2D target. + + \value PremultipliedAlphaBindOption Specifies that the image should be + uploaded with premultiplied alpha and does a conversion accordingly. + + \value LinearFilteringBindOption Specifies that the texture filtering + should be set to GL_LINEAR. Default is GL_NEAREST. If mipmap is + also enabled, filtering will be set to GL_LINEAR_MIPMAP_LINEAR. + + \value DefaultBindOption In Qt 4.5 and earlier, bindTexture() + would mirror the image and automatically generate mipmaps. This + option helps preserve this default behavior. + + \omitvalue CanFlipNativePixmapBindOption Used by x11 from pixmap to choose + wether or not it can bind the pixmap upside down or not. + + \omitvalue MemoryManagedBindOption Used by paint engines to + indicate that the pixmap should be memory managed along side with + the pixmap/image that it stems from, e.g. installing destruction + hooks in them. + + \omitvalue InternalBindOption +*/ /*! \obsolete @@ -1633,7 +1672,6 @@ QGLContext::QGLContext(const QGLFormat &format) QGLContext::~QGLContext() { - Q_D(QGLContext); // remove any textures cached in this context QGLTextureCache::instance()->removeContextTextures(this); QGLTextureCache::deleteIfEmpty(); // ### thread safety @@ -1880,7 +1918,8 @@ QImage QGLContextPrivate::convertToGLFormat(const QImage &image, bool force_prem } /*! \internal */ -QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, bool clean) +QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, + QGLContext::BindOptions options) { const qint64 key = image.cacheKey(); QGLTexture *texture = textureCacheLookup(key, target); @@ -1890,7 +1929,7 @@ QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G } if (!texture) - texture = bindTexture(image, target, format, key, clean); + texture = bindTexture(image, target, format, key, options); // NOTE: bindTexture(const QImage&, GLenum, GLint, const qint64, bool) should never return null Q_ASSERT(texture); @@ -1900,68 +1939,128 @@ QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G return texture; } +// #define QGL_BIND_TEXTURE_DEBUG + QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, - const qint64 key, bool clean) + const qint64 key, QGLContext::BindOptions options) { Q_Q(QGLContext); - QGLContext *ctx = q; - - // the GL_BGRA format is only present in GL version >= 1.2 - GLenum texture_format = (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2) - ? GL_BGRA : GL_RGBA; +#ifdef QGL_BIND_TEXTURE_DEBUG + printf("QGLContextPrivate::bindTexture(), imageSize=(%d,%d), format=%x, options=%x\n", + image.width(), image.height(), format, int(options)); +#endif // Scale the pixmap if needed. GL textures needs to have the // dimensions 2^n+2(border) x 2^m+2(border), unless we're using GL // 2.0 or use the GL_TEXTURE_RECTANGLE texture target int tx_w = qt_next_power_of_two(image.width()); int tx_h = qt_next_power_of_two(image.height()); - bool scale = false; QImage img = image; if (( !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) ) && (target == GL_TEXTURE_2D && (tx_w != image.width() || tx_h != image.height()))) { - scale = true; + img = img.scaled(tx_w, tx_h); +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - upscaled to %dx%d\n", tx_w, tx_h); +#endif } + GLuint filtering = options & QGLContext::LinearFilteringBindOption ? GL_LINEAR : GL_NEAREST; + GLuint tx_id; glGenTextures(1, &tx_id); glBindTexture(target, tx_id); - glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(target, GL_TEXTURE_MAG_FILTER, filtering); + if (glFormat.directRendering() && QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap - && target == GL_TEXTURE_2D && !clean) + && target == GL_TEXTURE_2D + && options & QGLContext::MipmapBindOption) { +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - generating mipmaps\n"); +#endif glHint(GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST); #ifndef QT_OPENGL_ES glTexParameteri(target, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); #else glTexParameterf(target, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); #endif - glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(target, GL_TEXTURE_MIN_FILTER, options & QGLContext::LinearFilteringBindOption + ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST); } else { - glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(target, GL_TEXTURE_MIN_FILTER, filtering); } QImage::Format target_format = img.format(); - // Note: the clean param is only true when a texture is bound - // from the QOpenGLPaintEngine - in that case we have to force - // a premultiplied texture format - if (clean || img.format() != QImage::Format_ARGB32) - target_format = QImage::Format_ARGB32_Premultiplied; - if (img.format() != target_format) - img = img.convertToFormat(target_format); + bool premul = options & QGLContext::PremultipliedAlphaBindOption; + GLenum texture_format = QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2 + ? GL_BGRA : GL_RGBA; + GLuint pixel_type = GL_UNSIGNED_BYTE; + + switch (target_format) { + case QImage::Format_ARGB32: + if (premul) { + img = img.convertToFormat(target_format = QImage::Format_ARGB32_Premultiplied); +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - converting ARGB32 -> ARGB32_Premultiplied \n"); +#endif + } + break; + case QImage::Format_ARGB32_Premultiplied: + if (!premul) { + img = img.convertToFormat(target_format = QImage::Format_ARGB32); +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - converting ARGB32_Premultiplied -> ARGB32\n"); +#endif + } + break; + case QImage::Format_RGB16: + pixel_type = GL_UNSIGNED_SHORT_5_6_5; + texture_format = GL_RGB; + break; + case QImage::Format_RGB32: + if (format == GL_RGBA) + format = GL_RGB; + break; + + default: + if (img.hasAlphaChannel()) { + img = img.convertToFormat(premul + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_ARGB32); +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - converting to 32-bit alpha format\n"); +#endif + } else { + img = img.convertToFormat(QImage::Format_RGB32); +#ifdef QGL_BIND_TEXTURE_DEBUG + printf(" - converting to 32-bit\n"); +#endif + } + } - QImage tx(scale ? QSize(tx_w, tx_h) : img.size(), target_format); - convertToGLFormatHelper(tx, img, texture_format); - glTexImage2D(target, 0, format, tx.width(), tx.height(), 0, texture_format, - GL_UNSIGNED_BYTE, tx.bits()); + if (options & QGLContext::InvertedYBindOption) { + int ipl = img.bytesPerLine() / 4; + int h = img.height(); + for (int y=0; y<h/2; ++y) { + int *a = (int *) img.scanLine(y); + int *b = (int *) img.scanLine(h - y - 1); + for (int x=0; x<ipl; ++x) + qSwap(a[x], b[x]); + } + } + + const QImage &constRef = img; // to avoid detach in bits()... + glTexImage2D(target, 0, format, img.width(), img.height(), 0, texture_format, + pixel_type, constRef.bits()); // this assumes the size of a texture is always smaller than the max cache size int cost = img.width()*img.height()*4/1024; - QGLTexture *texture = new QGLTexture(q, tx_id, target, clean, false); + QGLTexture *texture = new QGLTexture(q, tx_id, target, options); QGLTextureCache::instance()->insert(q, key, texture, cost); return texture; } @@ -1980,7 +2079,7 @@ QGLTexture *QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum targe /*! \internal */ -QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean, bool canInvert) +QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QGLContext::BindOptions options) { Q_Q(QGLContext); QPixmapData *pd = pixmap.pixmapData(); @@ -2005,9 +2104,9 @@ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, #if defined(Q_WS_X11) // Try to use texture_from_pixmap if (pd->classId() == QPixmapData::X11Class) { - texture = bindTextureFromNativePixmap(pd, key, canInvert); + texture = bindTextureFromNativePixmap(pd, key, options); if (texture) { - texture->clean = clean; + texture->options |= QGLContext::MemoryManagedBindOption; texture->boundPixmap = pd; boundPixmaps.insert(pd, QPixmap(pixmap)); } @@ -2015,7 +2114,7 @@ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, #endif if (!texture) - texture = bindTexture(pixmap.toImage(), target, format, key, clean); + texture = bindTexture(pixmap.toImage(), target, format, key, options); // NOTE: bindTexture(const QImage&, GLenum, GLint, const qint64, bool) should never return null Q_ASSERT(texture); @@ -2061,6 +2160,20 @@ int QGLContextPrivate::maxTextureSize() } /*! + Generates and binds a 2D GL texture to the current context, based + on \a image. The generated texture id is returned and can be used in + later \c glBindTexture() calls. + + \overload +*/ +GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format) +{ + Q_D(QGLContext); + QGLTexture *texture = d->bindTexture(image, target, format, false, DefaultBindOption); + return texture->id; +} + +/*! Generates and binds a 2D GL texture to the current context, based on \a image. The generated texture id is returned and can be used in later \c glBindTexture() calls. @@ -2069,12 +2182,10 @@ int QGLContextPrivate::maxTextureSize() target is \c GL_TEXTURE_2D. The \a format parameter sets the internal format for the - texture. The default format is \c GL_RGBA8. + texture. The default format is \c GL_RGBA. - If the GL implementation supports the \c GL_SGIS_generate_mipmap - extension, mipmaps will be automatically generated for the - texture. Mipmap generation is only supported for the \c - GL_TEXTURE_2D target. + The binding \a options are a set of options used to decide how to + bind the texture to the context. The texture that is generated is cached, so multiple calls to bindTexture() with the same QImage will return the same texture @@ -2085,10 +2196,10 @@ int QGLContextPrivate::maxTextureSize() \sa deleteTexture() */ -GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format) +GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format, BindOptions options) { Q_D(QGLContext); - QGLTexture *texture = d->bindTexture(image, target, format, false); + QGLTexture *texture = d->bindTexture(image, target, format, false, options); return texture->id; } @@ -2097,7 +2208,16 @@ GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format) GLuint QGLContext::bindTexture(const QImage &image, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLContext); - QGLTexture *texture = d->bindTexture(image, GLenum(target), GLint(format), false); + QGLTexture *texture = d->bindTexture(image, GLenum(target), GLint(format), false, DefaultBindOption); + return texture->id; +} + +/*! \internal */ +GLuint QGLContext::bindTexture(const QImage &image, QMacCompatGLenum target, QMacCompatGLint format, + BindOptions options) +{ + Q_D(QGLContext); + QGLTexture *texture = d->bindTexture(image, GLenum(target), GLint(format), false, options); return texture->id; } #endif @@ -2109,7 +2229,20 @@ GLuint QGLContext::bindTexture(const QImage &image, QMacCompatGLenum target, QMa GLuint QGLContext::bindTexture(const QPixmap &pixmap, GLenum target, GLint format) { Q_D(QGLContext); - QGLTexture *texture = d->bindTexture(pixmap, target, format, false, false); + QGLTexture *texture = d->bindTexture(pixmap, target, format, DefaultBindOption); + return texture->id; +} + +/*! + \overload + + Generates and binds a 2D GL texture to the current context, based + on \a pixmap. +*/ +GLuint QGLContext::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, BindOptions options) +{ + Q_D(QGLContext); + QGLTexture *texture = d->bindTexture(pixmap, target, format, options); return texture->id; } @@ -2118,7 +2251,15 @@ GLuint QGLContext::bindTexture(const QPixmap &pixmap, GLenum target, GLint forma GLuint QGLContext::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLContext); - QGLTexture *texture = d->bindTexture(pixmap, GLenum(target), GLint(format), false, false); + QGLTexture *texture = d->bindTexture(pixmap, GLenum(target), GLint(format), DefaultBindOption); + return texture->id; +} +/*! \internal */ +GLuint QGLContext::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, QMacCompatGLint format, + BindOptions options) +{ + Q_D(QGLContext); + QGLTexture *texture = d->bindTexture(pixmap, GLenum(target), GLint(format), options); return texture->id; } #endif @@ -3937,6 +4078,10 @@ void QGLWidget::renderText(int x, int y, const QString &str, const QFont &font, bool auto_swap = autoBufferSwap(); QPaintEngine *engine = paintEngine(); +#ifndef QT_OPENGL_ES + if (engine->type() == QPaintEngine::OpenGL2) + static_cast<QGL2PaintEngineEx *>(engine)->setRenderTextActive(true); +#endif QPainter *p; bool reuse_painter = false; if (engine->isActive()) { @@ -3962,6 +4107,13 @@ void QGLWidget::renderText(int x, int y, const QString &str, const QFont &font, setAutoBufferSwap(false); // disable glClear() as a result of QPainter::begin() d->glcx->d_func()->clear_on_painter_begin = false; + if (engine->type() == QPaintEngine::OpenGL2) { + qt_save_gl_state(); +#ifndef QT_OPENGL_ES_2 + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +#endif + } p = new QPainter(this); } @@ -3985,7 +4137,13 @@ void QGLWidget::renderText(int x, int y, const QString &str, const QFont &font, delete p; setAutoBufferSwap(auto_swap); d->glcx->d_func()->clear_on_painter_begin = true; + if (engine->type() == QPaintEngine::OpenGL2) + qt_restore_gl_state(); } +#ifndef QT_OPENGL_ES + if (engine->type() == QPaintEngine::OpenGL2) + static_cast<QGL2PaintEngineEx *>(engine)->setRenderTextActive(false); +#endif } /*! \overload @@ -4018,6 +4176,10 @@ void QGLWidget::renderText(double x, double y, double z, const QString &str, con win_y = height - win_y; // y is inverted QPaintEngine *engine = paintEngine(); +#ifndef QT_OPENGL_ES + if (engine->type() == QPaintEngine::OpenGL2) + static_cast<QGL2PaintEngineEx *>(engine)->setRenderTextActive(true); +#endif QPainter *p; bool reuse_painter = false; #ifndef QT_OPENGL_ES @@ -4036,6 +4198,8 @@ void QGLWidget::renderText(double x, double y, double z, const QString &str, con setAutoBufferSwap(false); // disable glClear() as a result of QPainter::begin() d->glcx->d_func()->clear_on_painter_begin = false; + if (engine->type() == QPaintEngine::OpenGL2) + qt_save_gl_state(); p = new QPainter(this); } @@ -4074,9 +4238,15 @@ void QGLWidget::renderText(double x, double y, double z, const QString &str, con } else { p->end(); delete p; + if (engine->type() == QPaintEngine::OpenGL2) + qt_restore_gl_state(); setAutoBufferSwap(auto_swap); d->glcx->d_func()->clear_on_painter_begin = true; } +#ifndef QT_OPENGL_ES + if (engine->type() == QPaintEngine::OpenGL2) + static_cast<QGL2PaintEngineEx *>(engine)->setRenderTextActive(false); +#endif } QGLFormat QGLWidget::format() const @@ -4118,15 +4288,35 @@ bool QGLWidget::autoBufferSwap() const GLuint QGLWidget::bindTexture(const QImage &image, GLenum target, GLint format) { Q_D(QGLWidget); - return d->glcx->bindTexture(image, target, format); + return d->glcx->bindTexture(image, target, format, QGLContext::DefaultBindOption); +} + +/*! + \overload + + The binding \a options are a set of options used to decide how to + bind the texture to the context. + */ +GLuint QGLWidget::bindTexture(const QImage &image, GLenum target, GLint format, QGLContext::BindOptions options) +{ + Q_D(QGLWidget); + return d->glcx->bindTexture(image, target, format, options); } + #ifdef Q_MAC_COMPAT_GL_FUNCTIONS /*! \internal */ GLuint QGLWidget::bindTexture(const QImage &image, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLWidget); - return d->glcx->bindTexture(image, GLenum(target), GLint(format)); + return d->glcx->bindTexture(image, GLenum(target), GLint(format), QGLContext::DefaultBindOption); +} + +GLuint QGLWidget::bindTexture(const QImage &image, QMacCompatGLenum target, QMacCompatGLint format, + QGLContext::BindOptions options) +{ + Q_D(QGLWidget); + return d->glcx->bindTexture(image, GLenum(target), GLint(format), options); } #endif @@ -4139,7 +4329,23 @@ GLuint QGLWidget::bindTexture(const QImage &image, QMacCompatGLenum target, QMac GLuint QGLWidget::bindTexture(const QPixmap &pixmap, GLenum target, GLint format) { Q_D(QGLWidget); - return d->glcx->bindTexture(pixmap, target, format); + return d->glcx->bindTexture(pixmap, target, format, QGLContext::DefaultBindOption); +} + +/*! + \overload + + Generates and binds a 2D GL texture to the current context, based + on \a pixmap. The generated texture id is returned and can be used in + + The binding \a options are a set of options used to decide how to + bind the texture to the context. + */ +GLuint QGLWidget::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, + QGLContext::BindOptions options) +{ + Q_D(QGLWidget); + return d->glcx->bindTexture(pixmap, target, format, options); } #ifdef Q_MAC_COMPAT_GL_FUNCTIONS @@ -4147,7 +4353,14 @@ GLuint QGLWidget::bindTexture(const QPixmap &pixmap, GLenum target, GLint format GLuint QGLWidget::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLWidget); - return d->glcx->bindTexture(pixmap, target, format); + return d->glcx->bindTexture(pixmap, target, format, QGLContext::DefaultBindOption); +} + +GLuint QGLWidget::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, QMacCompatGLint format, + QGLContext::BindOptions options) +{ + Q_D(QGLWidget); + return d->glcx->bindTexture(pixmap, target, format, options); } #endif @@ -4264,10 +4477,10 @@ QPaintEngine *QGLWidget::paintEngine() const #elif defined(QT_OPENGL_ES_2) return qt_gl_2_engine(); #else - if (!qt_gl_preferGL2Engine()) - return qt_gl_engine(); - else + if (qt_gl_preferGL2Engine()) return qt_gl_2_engine(); + else + return qt_gl_engine(); #endif } @@ -4568,34 +4781,37 @@ QGLFormat QGLDrawable::format() const return QGLFormat(); } -GLuint QGLDrawable::bindTexture(const QImage &image, GLenum target, GLint format) +GLuint QGLDrawable::bindTexture(const QImage &image, GLenum target, GLint format, + QGLContext::BindOptions options) { QGLTexture *texture = 0; + options |= QGLContext::MemoryManagedBindOption; if (widget) - texture = widget->d_func()->glcx->d_func()->bindTexture(image, target, format, true); + texture = widget->d_func()->glcx->d_func()->bindTexture(image, target, format, options); else if (buffer) - texture = buffer->d_func()->qctx->d_func()->bindTexture(image, target, format, true); + texture = buffer->d_func()->qctx->d_func()->bindTexture(image, target, format, options); else if (fbo && QGLContext::currentContext()) - texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(image, target, format, true); + texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(image, target, format, options); #if defined(Q_WS_QWS) || (!defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)) else if (wsurf) - texture = wsurf->context()->d_func()->bindTexture(image, target, format, true); + texture = wsurf->context()->d_func()->bindTexture(image, target, format, options); #endif return texture->id; } -GLuint QGLDrawable::bindTexture(const QPixmap &pixmap, GLenum target, GLint format) +GLuint QGLDrawable::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, + QGLContext::BindOptions options) { QGLTexture *texture = 0; if (widget) - texture = widget->d_func()->glcx->d_func()->bindTexture(pixmap, target, format, true, true); + texture = widget->d_func()->glcx->d_func()->bindTexture(pixmap, target, format, options); else if (buffer) - texture = buffer->d_func()->qctx->d_func()->bindTexture(pixmap, target, format, true, true); + texture = buffer->d_func()->qctx->d_func()->bindTexture(pixmap, target, format, options); else if (fbo && QGLContext::currentContext()) - texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(pixmap, target, format, true, true); + texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(pixmap, target, format, options); #if defined(Q_WS_QWS) || (!defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)) else if (wsurf) - texture = wsurf->context()->d_func()->bindTexture(pixmap, target, format, true, true); + texture = wsurf->context()->d_func()->bindTexture(pixmap, target, format, options); #endif return texture->id; } diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 678bbb7..96a8b08 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -288,6 +288,29 @@ public: virtual void swapBuffers() const; + enum BindOption { + NoBindOption = 0x0000, + InvertedYBindOption = 0x0001, + MipmapBindOption = 0x0002, + PremultipliedAlphaBindOption = 0x0004, + LinearFilteringBindOption = 0x0008, + + MemoryManagedBindOption = 0x0010, // internal flag + CanFlipNativePixmapBindOption = 0x0020, // internal flag + + DefaultBindOption = LinearFilteringBindOption + | InvertedYBindOption + | MipmapBindOption, + InternalBindOption = MemoryManagedBindOption + | PremultipliedAlphaBindOption + }; + Q_DECLARE_FLAGS(BindOptions, BindOption) + + GLuint bindTexture(const QImage &image, GLenum target, GLint format, + BindOptions options); + GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, + BindOptions options); + GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, @@ -304,6 +327,10 @@ public: QMacCompatGLint format = GL_RGBA); GLuint bindTexture(const QPixmap &pixmap, QMacCompatGLenum = GL_TEXTURE_2D, QMacCompatGLint format = GL_RGBA); + GLuint bindTexture(const QImage &image, QMacCompatGLenum, QMacCompatGLint format, + BindOptions); + GLuint bindTexture(const QPixmap &pixmap, QMacCompatGLenum, QMacCompatGLint format, + BindOptions); void deleteTexture(QMacCompatGLuint tx_id); @@ -384,6 +411,7 @@ private: Q_DISABLE_COPY(QGLContext) }; +Q_DECLARE_OPERATORS_FOR_FLAGS(QGLContext::BindOptions); class Q_OPENGL_EXPORT QGLWidget : public QWidget { @@ -446,10 +474,16 @@ public: const QFont & fnt = QFont(), int listBase = 2000); QPaintEngine *paintEngine() const; + GLuint bindTexture(const QImage &image, GLenum target, GLint format, + QGLContext::BindOptions options); + GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, + QGLContext::BindOptions options); + GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + GLuint bindTexture(const QString &fileName); void deleteTexture(GLuint tx_id); @@ -462,6 +496,10 @@ public: QMacCompatGLint format = GL_RGBA); GLuint bindTexture(const QPixmap &pixmap, QMacCompatGLenum = GL_TEXTURE_2D, QMacCompatGLint format = GL_RGBA); + GLuint bindTexture(const QImage &image, QMacCompatGLenum, QMacCompatGLint format, + QGLContext::BindOptions); + GLuint bindTexture(const QPixmap &pixmap, QMacCompatGLenum, QMacCompatGLint format, + QGLContext::BindOptions); void deleteTexture(QMacCompatGLuint tx_id); diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index ab040ed..6905199 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -208,10 +208,12 @@ class QGLContextPrivate public: explicit QGLContextPrivate(QGLContext *context) : internal_context(false), q_ptr(context) {groupResources = new QGLContextGroupResources;} ~QGLContextPrivate() {if (!groupResources->refs.deref()) delete groupResources;} - QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format, bool clean); + QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format, + QGLContext::BindOptions options); QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format, const qint64 key, - bool clean = false); - QGLTexture *bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean, bool canInvert = false); + QGLContext::BindOptions options); + QGLTexture *bindTexture(const QPixmap &pixmap, GLenum target, GLint format, + QGLContext::BindOptions options); QGLTexture *textureCacheLookup(const qint64 key, GLenum target); void init(QPaintDevice *dev, const QGLFormat &format); QImage convertToGLFormat(const QImage &image, bool force_premul, GLenum texture_format); @@ -241,7 +243,8 @@ public: quint32 gpm; int screen; QHash<QPixmapData*, QPixmap> boundPixmaps; - QGLTexture *bindTextureFromNativePixmap(QPixmapData*, const qint64 key, bool canInvert); + QGLTexture *bindTextureFromNativePixmap(QPixmapData*, const qint64 key, + QGLContext::BindOptions options); static void destroyGlSurfaceForPixmap(QPixmapData*); static void unbindPixmapFromTexture(QPixmapData*); #endif @@ -319,8 +322,10 @@ public: void doneCurrent(); QSize size() const; QGLFormat format() const; - GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); - GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA, + QGLContext::BindOptions = QGLContext::InternalBindOption); + GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA, + QGLContext::BindOptions = QGLContext::InternalBindOption); QColor backgroundColor() const; QGLContext *context() const; bool autoFillBackground() const; @@ -404,15 +409,18 @@ extern Q_OPENGL_EXPORT QGLShareRegister* qgl_share_reg(); class QGLTexture { public: QGLTexture(QGLContext *ctx = 0, GLuint tx_id = 0, GLenum tx_target = GL_TEXTURE_2D, - bool _clean = false, bool _yInverted = false) - : context(ctx), id(tx_id), target(tx_target), clean(_clean), yInverted(_yInverted) + QGLContext::BindOptions opt = QGLContext::DefaultBindOption) + : context(ctx), + id(tx_id), + target(tx_target), + options(opt) #if defined(Q_WS_X11) - , boundPixmap(0) + , boundPixmap(0) #endif {} ~QGLTexture() { - if (clean) { + if (options & QGLContext::MemoryManagedBindOption) { QGLContext *current = const_cast<QGLContext *>(QGLContext::currentContext()); QGLContext *ctx = const_cast<QGLContext *>(context); Q_ASSERT(ctx); @@ -436,8 +444,9 @@ public: QGLContext *context; GLuint id; GLenum target; - bool clean; - bool yInverted; // NOTE: Y-Inverted textures are for internal use only! + + QGLContext::BindOptions options; + #if defined(Q_WS_X11) QPixmapData* boundPixmap; #endif diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp index dccdf63..a34ea37 100644 --- a/src/opengl/qgl_x11.cpp +++ b/src/opengl/qgl_x11.cpp @@ -1599,7 +1599,8 @@ bool qt_resolveTextureFromPixmap() #endif //defined(GLX_VERSION_1_3) && !defined(Q_OS_HPUX) -QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, const qint64 key, bool canInvert) +QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, const qint64 key, + QGLContext::BindOptions options) { #if !defined(GLX_VERSION_1_3) || defined(Q_OS_HPUX) return 0; @@ -1632,7 +1633,7 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, con GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT, // QGLContext::bindTexture() can't return an inverted texture, but QPainter::drawPixmap() can: - GLX_Y_INVERTED_EXT, canInvert ? GLX_DONT_CARE : False, + GLX_Y_INVERTED_EXT, options & QGLContext::CanFlipNativePixmapBindOption ? GLX_DONT_CARE : False, XNone }; configList = glXChooseFBConfig(x11Info.display(), x11Info.screen(), configAttribs, &configCount); @@ -1693,9 +1694,11 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, con glBindTexture(GL_TEXTURE_2D, textureId); - QGLTexture *texture = new QGLTexture(q, textureId, GL_TEXTURE_2D, canInvert, false); - texture->yInverted = (hasAlpha && RGBAConfigInverted) || (!hasAlpha && RGBConfigInverted); - if (texture->yInverted) + if (!((hasAlpha && RGBAConfigInverted) || (!hasAlpha && RGBConfigInverted))) + options &= ~QGLContext::InvertedYBindOption; + + QGLTexture *texture = new QGLTexture(q, textureId, GL_TEXTURE_2D, options); + if (texture->options & QGLContext::InvertedYBindOption) pixmapData->flags |= QX11PixmapData::InvertedWhenBoundToTexture; // We assume the cost of bound pixmaps is zero diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index b982a19..f40cdc9 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -490,12 +490,13 @@ void QGLWidgetPrivate::recreateEglSurface(bool force) } -QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData* pd, const qint64 key, bool canInvert) +QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData* pd, const qint64 key, + QGLContext::BindOptions options) { Q_Q(QGLContext); // The EGL texture_from_pixmap has no facility to invert the y coordinate - if (!canInvert) + if (!(options & QGLContext::CanFlipNativePixmapBindOption)) return 0; Q_ASSERT(pd->classId() == QPixmapData::X11Class); @@ -623,7 +624,10 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData* pd, cons return 0; } - QGLTexture *texture = new QGLTexture(q, textureId, GL_TEXTURE_2D, canInvert, true); + // Always inverted because the opposite is not supported... + options |= QGLContext::InvertedYBindOption; + + QGLTexture *texture = new QGLTexture(q, textureId, GL_TEXTURE_2D, options); pixmapData->flags |= QX11PixmapData::InvertedWhenBoundToTexture; // We assume the cost of bound pixmaps is zero diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h index b03fdfa..a5f83a5 100644 --- a/src/opengl/qglextensions_p.h +++ b/src/opengl/qglextensions_p.h @@ -410,6 +410,14 @@ struct QGLExtensionFuncs #define GL_BGRA 0x80E1 #endif +#ifndef GL_RGB16 +#define GL_RGB16 32852 +#endif + +#ifndef GL_UNSIGNED_SHORT_5_6_5 +#define GL_UNSIGNED_SHORT_5_6_5 33635 +#endif + #ifndef GL_MULTISAMPLE #define GL_MULTISAMPLE 0x809D #endif diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 52363cb..2b38e3d 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -516,12 +516,12 @@ void QGLFramebufferObjectPrivate::init(const QSize &sz, QGLFramebufferObject::At framebuffer objects more portable. \endlist + When using a QPainter to paint to a QGLFramebufferObject you should take + care that the QGLFramebufferObject is created with the CombinedDepthStencil + attachment for QPainter to be able to render correctly. Note that you need to create a QGLFramebufferObject with more than one sample per pixel for primitives to be antialiased when drawing using a - QPainter, unless if the QPainter::HighQualityAntialiasing render hint is - set. The QPainter::HighQualityAntialiasing render hint will enable - antialiasing as long as the \c{GL_ARB_fragment_program} extension is - present. To create a multisample framebuffer object you should use one of + QPainter. To create a multisample framebuffer object you should use one of the constructors that take a QGLFramebufferObject parameter, and set the QGLFramebufferObject::samples() property to a non-zero value. @@ -896,7 +896,7 @@ QPaintEngine *QGLFramebufferObject::paintEngine() const return qt_buffer_2_engine(); #else Q_D(const QGLFramebufferObject); - if (d->ctx->d_func()->internal_context || qt_gl_preferGL2Engine()) + if (qt_gl_preferGL2Engine()) return qt_buffer_2_engine(); else return qt_buffer_engine(); diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp index e1ee61a..0913606 100644 --- a/src/opengl/qglpixmapfilter.cpp +++ b/src/opengl/qglpixmapfilter.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE void QGLPixmapFilterBase::bindTexture(const QPixmap &src) const { - const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(src, GL_TEXTURE_2D, GL_RGBA, true, false); + const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(src, GL_TEXTURE_2D, GL_RGBA, QGLContext::BindOptions(QGLContext::DefaultBindOption | QGLContext::MemoryManagedBindOption)); } void QGLPixmapFilterBase::drawImpl(QPainter *painter, const QPointF &pos, const QPixmap &src, const QRectF& source) const @@ -338,7 +338,6 @@ bool QGLPixmapBlurFilter::processGL(QPainter *painter, const QPointF &pos, const QGL2PaintEngineEx *engine = static_cast<QGL2PaintEngineEx *>(painter->paintEngine()); - engine->syncState(); painter->save(); // ensure GL_LINEAR filtering is used @@ -418,7 +417,7 @@ QByteArray QGLPixmapBlurFilter::generateBlurShader(int radius, bool gaussianBlur source.append("uniform highp vec4 clip;\n"); } - source.append("lowp vec4 customShader(sampler2D src, vec2 srcCoords) {\n"); + source.append("lowp vec4 customShader(lowp sampler2D src, highp vec2 srcCoords) {\n"); QVector<qreal> sampleOffsets; QVector<qreal> weights; diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index f8bffd3..b07fb3b 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -104,7 +104,7 @@ QT_BEGIN_NAMESPACE on desktop systems. The programmer should restrict themselves to just features that are present in GLSL/ES, and avoid standard variable names that only work on the desktop. - + \section1 Simple shader example \code @@ -199,8 +199,11 @@ QT_BEGIN_NAMESPACE \value VertexShader Vertex shader written in the OpenGL Shading Language (GLSL). \value FragmentShader Fragment shader written in the OpenGL Shading Language (GLSL). + \value PartialVertexShader Partial vertex shader that will be concatenated with all other partial vertex shaders at link time. \value PartialFragmentShader Partial fragment shader that will be concatenated with all other partial fragment shaders at link time. + + \omitvalue PartialShader */ #ifndef GL_FRAGMENT_SHADER @@ -251,8 +254,7 @@ public: , shader(0) , shaderType(type) , compiled(false) - , isPartial(type == QGLShader::PartialVertexShader || - type == QGLShader::PartialFragmentShader) + , isPartial((type & QGLShader::PartialShader) != 0) , hasPartialSource(false) { } @@ -348,31 +350,6 @@ QGLShader::QGLShader(QGLShader::ShaderType type, QObject *parent) } /*! - Constructs a new QGLShader object from the source code in \a fileName - and attaches it to \a parent. If the filename ends in \c{.fsh}, - it is assumed to be a fragment shader, otherwise it is assumed to - be a vertex shader (normally the extension is \c{.vsh} for vertex shaders). - If the shader could not be loaded, then isCompiled() will return false. - - The shader will be associated with the current QGLContext. - - \sa isCompiled() -*/ -QGLShader::QGLShader(const QString& fileName, QObject *parent) - : QObject(parent) -{ - if (fileName.endsWith(QLatin1String(".fsh"), Qt::CaseInsensitive)) - d = new QGLShaderPrivate(QGLShader::FragmentShader, QGLContext::currentContext()); - else - d = new QGLShaderPrivate(QGLShader::VertexShader, QGLContext::currentContext()); - if (d->create() && !compileFile(fileName)) { - if (d->shader) - glDeleteShader(d->shader); - d->shader = 0; - } -} - -/*! Constructs a new QGLShader object of the specified \a type from the source code in \a fileName and attaches it to \a parent. If the shader could not be loaded, then isCompiled() will return false. @@ -413,31 +390,6 @@ QGLShader::QGLShader(QGLShader::ShaderType type, const QGLContext *context, QObj } /*! - Constructs a new QGLShader object from the source code in \a fileName - and attaches it to \a parent. If the filename ends in \c{.fsh}, - it is assumed to be a fragment shader, otherwise it is assumed to - be a vertex shader (normally the extension is \c{.vsh} for vertex shaders). - If the shader could not be loaded, then isCompiled() will return false. - - The shader will be associated with \a context. - - \sa isCompiled() -*/ -QGLShader::QGLShader(const QString& fileName, const QGLContext *context, QObject *parent) - : QObject(parent) -{ - if (fileName.endsWith(QLatin1String(".fsh"), Qt::CaseInsensitive)) - d = new QGLShaderPrivate(QGLShader::FragmentShader, context); - else - d = new QGLShaderPrivate(QGLShader::VertexShader, context); - if (d->create() && !compileFile(fileName)) { - if (d->shader) - glDeleteShader(d->shader); - d->shader = 0; - } -} - -/*! Constructs a new QGLShader object of the specified \a type from the source code in \a fileName and attaches it to \a parent. If the shader could not be loaded, then isCompiled() will return false. @@ -489,6 +441,16 @@ static const char qualifierDefines[] = "#define highp\n"; #endif +// The "highp" qualifier doesn't exist in fragment shaders +// on all ES platforms. When it doesn't exist, use "mediump". +#ifdef QT_OPENGL_ES +#define QGL_REDEFINE_HIGHP 1 +static const char redefineHighp[] = + "#ifndef GL_FRAGMENT_PRECISION_HIGH\n" + "#define highp mediump\n" + "#endif\n"; +#endif + /*! Sets the \a source code for this shader and compiles it. Returns true if the source was successfully compiled, false otherwise. @@ -511,6 +473,11 @@ bool QGLShader::compile(const char *source) #ifdef QGL_DEFINE_QUALIFIERS src.append(qualifierDefines); #endif +#ifdef QGL_REDEFINE_HIGHP + if (d->shaderType == FragmentShader || + d->shaderType == PartialFragmentShader) + src.append(redefineHighp); +#endif src.append(source); glShaderSource(d->shader, src.size(), src.data(), 0); return d->compile(this); @@ -917,6 +884,33 @@ bool QGLShaderProgram::addShader(QGLShader::ShaderType type, const QString& sour } /*! + Compiles the contents of \a fileName as a shader of the specified + \a type and adds it to this shader program. Returns true if + compilation was successful, false otherwise. The compilation errors + and warnings will be made available via log(). + + This function is intended to be a short-cut for quickly + adding vertex and fragment shaders to a shader program without + creating an instance of QGLShader first. + + \sa addShader() +*/ +bool QGLShaderProgram::addShaderFromFile + (QGLShader::ShaderType type, const QString& fileName) +{ + if (!init()) + return false; + QGLShader *shader = new QGLShader(type, this); + if (!shader->compileFile(fileName)) { + d->log = shader->log(); + delete shader; + return false; + } + d->anonShaders.append(shader); + return addShader(shader); +} + +/*! Removes \a shader from this shader program. The object is not deleted. \sa addShader(), link(), removeAllShaders() @@ -2983,6 +2977,7 @@ bool QGLShaderProgram::hasShaderPrograms(const QGLContext *context) #endif } + #endif QT_END_NAMESPACE diff --git a/src/opengl/qglshaderprogram.h b/src/opengl/qglshaderprogram.h index c5295eb..d747679 100644 --- a/src/opengl/qglshaderprogram.h +++ b/src/opengl/qglshaderprogram.h @@ -63,19 +63,21 @@ class Q_OPENGL_EXPORT QGLShader : public QObject { Q_OBJECT public: - enum ShaderType + enum ShaderTypeBits { - VertexShader, - FragmentShader, - PartialVertexShader, - PartialFragmentShader + VertexShader = 0x0001, + FragmentShader = 0x0002, + + PartialShader = 0x1000, + + PartialVertexShader = PartialShader | VertexShader, + PartialFragmentShader = PartialShader | FragmentShader }; + Q_DECLARE_FLAGS(ShaderType, ShaderTypeBits) explicit QGLShader(QGLShader::ShaderType type, QObject *parent = 0); - explicit QGLShader(const QString& fileName, QObject *parent = 0); QGLShader(const QString& fileName, QGLShader::ShaderType type, QObject *parent = 0); QGLShader(QGLShader::ShaderType type, const QGLContext *context, QObject *parent = 0); - QGLShader(const QString& fileName, const QGLContext *context, QObject *parent = 0); QGLShader(const QString& fileName, QGLShader::ShaderType type, const QGLContext *context, QObject *parent = 0); virtual ~QGLShader(); @@ -106,6 +108,9 @@ private: Q_DISABLE_COPY(QGLShader) }; +Q_DECLARE_OPERATORS_FOR_FLAGS(QGLShader::ShaderType) + + class QGLShaderProgramPrivate; class Q_OPENGL_EXPORT QGLShaderProgram : public QObject @@ -123,6 +128,7 @@ public: bool addShader(QGLShader::ShaderType type, const char *source); bool addShader(QGLShader::ShaderType type, const QByteArray& source); bool addShader(QGLShader::ShaderType type, const QString& source); + bool addShaderFromFile(QGLShader::ShaderType type, const QString& fileName); void removeAllShaders(); diff --git a/src/opengl/qgraphicsshadereffect.cpp b/src/opengl/qgraphicsshadereffect.cpp index d3f52f6..293413c 100644 --- a/src/opengl/qgraphicsshadereffect.cpp +++ b/src/opengl/qgraphicsshadereffect.cpp @@ -51,8 +51,6 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW - /*! \class QGraphicsShaderEffect \brief The QGraphicsShaderEffect class is the base class for creating @@ -64,7 +62,7 @@ QT_BEGIN_NAMESPACE The specific effect is defined by a fragment of GLSL source code supplied to setPixelShaderFragment(). This source code must define a function with the signature - \c{lowp vec4 customShader(sampler2D imageTexture, vec2 textureCoords)} + \c{lowp vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords)} that returns the source pixel value to use in the paint engine's shader program. The shader fragment is linked with the regular shader code used by the GL2 paint engine @@ -77,7 +75,7 @@ QT_BEGIN_NAMESPACE \code static char const colorizeShaderCode[] = "uniform lowp vec4 effectColor;\n" - "lowp vec4 customShader(sampler2D imageTexture, vec2 textureCoords) {\n" + "lowp vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords) {\n" " vec4 src = texture2D(imageTexture, textureCoords);\n" " float gray = dot(src.rgb, vec3(0.212671, 0.715160, 0.072169));\n" " vec4 colorize = 1.0-((1.0-gray)*(1.0-effectColor));\n" @@ -126,11 +124,11 @@ QT_BEGIN_NAMESPACE the drawItem() method will draw its item argument directly with no effect applied. - \sa QGrapicsEffect + \sa QGraphicsEffect */ static const char qglslDefaultImageFragmentShader[] = "\ - lowp vec4 customShader(sampler2D imageTexture, vec2 textureCoords) { \ + lowp vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords) { \ return texture2D(imageTexture, textureCoords); \ }\n"; @@ -215,13 +213,13 @@ QByteArray QGraphicsShaderEffect::pixelShaderFragment() const this shader effect to \a code. The \a code must define a GLSL function with the signature - \c{lowp vec4 customShader(sampler2D imageTexture, vec2 textureCoords)} + \c{lowp vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords)} that returns the source pixel value to use in the paint engine's shader program. The following is the default pixel shader fragment, which draws a pixmap with no effect applied: \code - lowp vec4 customShader(sampler2D imageTexture, vec2 textureCoords) { + lowp vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords) { return texture2D(imageTexture, textureCoords); } \endcode @@ -313,6 +311,4 @@ void QGraphicsShaderEffect::setUniforms(QGLShaderProgram *program) Q_UNUSED(program); } -#endif // QT_NO_GRAPHICSVIEW - QT_END_NAMESPACE diff --git a/src/opengl/qgraphicsshadereffect.h b/src/opengl/qgraphicsshadereffect.h index c4637d7..672973b 100644 --- a/src/opengl/qgraphicsshadereffect.h +++ b/src/opengl/qgraphicsshadereffect.h @@ -50,8 +50,6 @@ QT_BEGIN_NAMESPACE QT_MODULE(OpenGL) -#if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW - class QGLShaderProgram; class QGLCustomShaderEffectStage; class QGraphicsShaderEffectPrivate; @@ -78,8 +76,6 @@ private: friend class QGLCustomShaderEffectStage; }; -#endif // QT_NO_GRAPHICSVIEW - QT_END_NAMESPACE QT_END_HEADER diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp index 9434adf..ac41ab0 100644 --- a/src/opengl/qpaintengine_opengl.cpp +++ b/src/opengl/qpaintengine_opengl.cpp @@ -4351,13 +4351,6 @@ void QOpenGLPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, con GLdouble tc_w = r.width()/pm.width(); GLdouble tc_h = r.height()/pm.height(); - // Rotate the texture so that it is aligned correctly and the - // wrapping is done correctly - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glRotatef(180.0, 0.0, 1.0, 0.0); - glRotatef(180.0, 0.0, 0.0, 1.0); - q_vertexType vertexArray[4*2]; q_vertexType texCoordArray[4*2]; @@ -4376,7 +4369,6 @@ void QOpenGLPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, con glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); - glPopMatrix(); glDisable(GL_TEXTURE_2D); #ifndef QT_OPENGL_ES @@ -4433,13 +4425,13 @@ void QOpenGLPaintEngine::drawTextureRect(int tx_width, int tx_height, const QRec if (target == GL_TEXTURE_2D) { x1 = sr.x() / tx_width; x2 = x1 + sr.width() / tx_width; - y1 = 1.0 - (sr.bottom() / tx_height); - y2 = 1.0 - (sr.y() / tx_height); + y1 = 1 - (sr.bottom() / tx_height); + y2 = 1 - (sr.y() / tx_height); } else { x1 = sr.x(); x2 = sr.right(); - y1 = tx_height - sr.bottom(); - y2 = tx_height - sr.y(); + y1 = sr.bottom(); + y2 = sr.y(); } q_vertexType vertexArray[4*2]; diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index 80e99a0..c193f12 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -271,7 +271,7 @@ void QGLPixmapData::ensureCreated() const m_source = QImage(); } - m_texture.clean = false; + m_texture.options &= ~QGLContext::MemoryManagedBindOption; } QGLFramebufferObject *QGLPixmapData::fbo() const diff --git a/src/opengl/util/fragmentprograms_p.h b/src/opengl/util/fragmentprograms_p.h index 9451eda..6decaca 100644 --- a/src/opengl/util/fragmentprograms_p.h +++ b/src/opengl/util/fragmentprograms_p.h @@ -1,57 +1,6 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ #ifndef FRAGMENTPROGRAMS_H #define FRAGMENTPROGRAMS_H -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - enum FragmentVariable { VAR_BRUSH_TEXTURE, VAR_LINEAR, @@ -71,7 +20,7 @@ enum FragmentVariable { VAR_FMP2_M_RADIUS2, VAR_FMP, VAR_INV_MATRIX_M0, - VAR_ANGLE + VAR_ANGLE, }; enum FragmentBrushType { @@ -80,7 +29,7 @@ enum FragmentBrushType { FRAGMENT_PROGRAM_BRUSH_CONICAL, FRAGMENT_PROGRAM_BRUSH_LINEAR, FRAGMENT_PROGRAM_BRUSH_TEXTURE, - FRAGMENT_PROGRAM_BRUSH_PATTERN + FRAGMENT_PROGRAM_BRUSH_PATTERN, }; enum FragmentCompositionModeType { @@ -109,12 +58,12 @@ enum FragmentCompositionModeType { COMPOSITION_MODES_DIFFERENCE_NOMASK, COMPOSITION_MODES_EXCLUSION_NOMASK, COMPOSITION_MODE_BLEND_MODE_MASK, - COMPOSITION_MODE_BLEND_MODE_NOMASK + COMPOSITION_MODE_BLEND_MODE_NOMASK, }; enum FragmentMaskType { FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA, - FRAGMENT_PROGRAM_MASK_ELLIPSE_AA + FRAGMENT_PROGRAM_MASK_ELLIPSE_AA, }; static const unsigned int num_fragment_variables = 19; @@ -133,55 +82,55 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA = "TEMP R4;\n" "ADD R4.x, fragment.position, c[0];\n" "ADD R0.y, fragment.position, -c[0].x;\n" - "MAX R2.x, R0.y, fragment.texcoord[0].y;\n" + "MAX R3.w, fragment.texcoord[0].y, R0.y;\n" "ADD R0.x, fragment.position.y, c[0];\n" - "MIN R2.y, R0.x, fragment.texcoord[0].x;\n" - "ADD R3.x, fragment.position, -c[0];\n" + "MIN R3.z, R0.x, fragment.texcoord[0].x;\n" + "ADD R2.z, fragment.position.x, -c[0].x;\n" + "MOV R0.yw, R3.w;\n" + "MOV R0.xz, R3.z;\n" + "MAD R1, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n" + "MAD R1.zw, fragment.position.x, c[0].y, -R1;\n" + "MOV R0.z, R1.x;\n" + "MOV R0.w, R1.z;\n" + "MOV R0.y, R1.w;\n" + "MOV R0.x, R1.y;\n" + "MIN R2.xy, R0.zwzw, R0;\n" + "SGE R1.xy, R0, R0.zwzw;\n" "ADD R1.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n" - "MOV R3.y, R4.x;\n" - "MOV R0.yw, R2.x;\n" - "MOV R0.xz, R2.y;\n" - "MAD R0, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n" - "MAD R1.xy, fragment.position.x, c[0].y, -R0.zwzw;\n" - "MOV R0.w, R1.x;\n" - "MOV R1.x, R0.y;\n" - "MOV R0.z, R0.x;\n" - "SGE R2.zw, R1.xyxy, R0;\n" - "MAX R0.xy, R0.zwzw, R1;\n" - "MIN R0.zw, R0, R1.xyxy;\n" - "MAD R2.zw, R2, R1, fragment.texcoord[0];\n" - "ADD R1, R3.xyxy, -R0.zzww;\n" - "MAD R1, R1, R2.zzww, R2.x;\n" - "ADD R3.zw, R0.xyxy, R0;\n" - "ADD R3.y, R2, -R2.x;\n" - "ADD R2.zw, R1.xyyw, -R2.x;\n" - "ADD R4.zw, R4.x, -R0;\n" - "MUL R2.zw, R4, R2;\n" - "ADD R4.zw, R1.xyyw, R1.xyxz;\n" - "ADD R1.xz, R2.y, -R1;\n" - "MAD R2.zw, -R2, c[0].x, R3.y;\n" - "MAD R3.zw, R3, c[0].x, -R3.x;\n" - "MAD R3.zw, R3, R3.y, -R2;\n" - "ADD R1.y, R4.x, -R3.x;\n" - "MAD R4.zw, -R4, c[0].x, R2.y;\n" - "MUL R4.zw, R4, R1.y;\n" - "ADD R1.yw, R0.xxzy, -R3.x;\n" - "MUL R1.xy, R1.xzzw, R1.ywzw;\n" - "MAD R1.zw, R1.xyxy, c[0].x, -R4;\n" - "SGE R1.xy, R4.x, R0;\n" - "MUL R1.zw, R1.xyxy, R1;\n" - "MAD R1.xy, R1, R3.zwzw, R2.zwzw;\n" - "SGE R2.zw, R3.x, R0;\n" - "ADD R1.zw, R4, R1;\n" - "ADD R1.zw, R1, -R1.xyxy;\n" - "MAD R1.xy, R2.zwzw, R1.zwzw, R1;\n" - "ADD R1.xy, R1, -R3.y;\n" - "SGE R0.zw, R4.x, R0;\n" - "MAD R0.zw, R0, R1.xyxy, R3.y;\n" - "SGE R0.xy, R0, R3.x;\n" + "MAX R0.xy, R0.zwzw, R0;\n" + "MAD R3.xy, R1, R1.zwzw, fragment.texcoord[0].zwzw;\n" + "MOV R2.w, R4.x;\n" + "ADD R1, -R2.xxyy, R2.zwzw;\n" + "MAD R1, R1, R3.xxyy, R3.w;\n" + "ADD R3.xy, R1.ywzw, R1.xzzw;\n" + "ADD R4.zw, R3.z, -R1.xyxz;\n" + "ADD R1.zw, -R3.w, R1.xyyw;\n" + "ADD R1.xy, R4.x, -R2;\n" + "MUL R1.xy, R1, R1.zwzw;\n" + "MAD R3.xy, -R3, c[0].x, R3.z;\n" + "ADD R2.w, R4.x, -R2.z;\n" + "MUL R0.zw, R3.xyxy, R2.w;\n" + "ADD R2.w, R3.z, -R3;\n" + "ADD R3.xy, -R2.z, R0;\n" + "MUL R3.xy, R4.zwzw, R3;\n" + "ADD R4.zw, R2.xyxy, R0.xyxy;\n" + "MAD R1.zw, R4, c[0].x, -R2.z;\n" + "MAD R1.xy, -R1, c[0].x, R2.w;\n" + "MAD R4.zw, R2.w, R1, -R1.xyxy;\n" + "SGE R1.zw, R4.x, R0.xyxy;\n" + "MAD R3.xy, R3, c[0].x, -R0.zwzw;\n" + "MAD R1.xy, R1.zwzw, R4.zwzw, R1;\n" + "MAD R0.zw, R1, R3.xyxy, R0;\n" + "ADD R1.zw, R0, -R1.xyxy;\n" + "SGE R0.zw, R2.z, R2.xyxy;\n" + "MAD R0.zw, R0, R1, R1.xyxy;\n" + "ADD R0.zw, -R2.w, R0;\n" + "SGE R1.xy, R4.x, R2;\n" + "MAD R0.zw, R1.xyxy, R0, R2.w;\n" + "SGE R0.xy, R0, R2.z;\n" "MUL R0.xy, R0.zwzw, R0;\n" - "ADD R0.x, R3.y, -R0;\n" - "SGE R0.z, R2.y, R2.x;\n" + "ADD R0.x, R2.w, -R0;\n" + "SGE R0.z, R3, R3.w;\n" "ADD R0.x, R0, -R0.y;\n" "MUL result.color, R0.x, R0.z;\n" "END\n" @@ -195,20 +144,20 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA = "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R1.xyz, R0.y, c[2];\n" - "MAD R0.xyz, R0.x, c[1], R1;\n" - "ADD R0.xyz, R0, c[3];\n" + "ADD R0.xy, fragment.position, c[3];\n" + "MUL R1.xyz, R0.y, c[1];\n" + "MAD R0.xyz, R0.x, c[0], R1;\n" + "ADD R0.xyz, R0, c[2];\n" "RCP R2.z, R0.z;\n" - "MUL R0.zw, R0.xyxy, R2.z;\n" - "MUL R2.xy, R0.zwzw, fragment.texcoord[0];\n" - "MOV R1.xy, c[1];\n" - "MOV R1.zw, c[2].xyxy;\n" - "MOV R0.x, c[1].z;\n" - "MOV R0.y, c[2].z;\n" - "MAD R0, -R0.xyxy, R0.zzww, R1.xzyw;\n" + "MUL R1.zw, R0.xyxy, R2.z;\n" + "MUL R2.xy, R1.zwzw, fragment.texcoord[0];\n" + "MOV R1.x, c[0].z;\n" + "MOV R1.y, c[1].z;\n" + "MOV R0.xy, c[0];\n" + "MOV R0.zw, c[1].xyxy;\n" + "MAD R0, R1.zzww, -R1.xyxy, R0.xzyw;\n" "MUL R1.xy, R2, fragment.texcoord[0];\n" - "MUL R0, R0, R2.z;\n" + "MUL R0, R2.z, R0;\n" "MUL R1.xy, R1, c[4].x;\n" "MUL R1.zw, R1.xyxy, R0.xyxz;\n" "MUL R0.xy, R1, R0.ywzw;\n" @@ -230,36 +179,34 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA = static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MUL R0.xyz, R1, c[6].y;\n" - "MUL R2.xyz, R0, fragment.color.primary.w;\n" - "MUL R0.xyz, fragment.color.primary, c[6].x;\n" - "MAD R2.xyz, R0, R1.w, R2;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "ADD R0.w, -R1, c[4].x;\n" - "MUL R0.xyz, fragment.color.primary, c[5].y;\n" - "MAD R2.xyz, R0, R0.w, R2;\n" - "MUL R0.xyz, R1, c[5].z;\n" - "ADD R0.w, -fragment.color.primary, c[4].x;\n" - "MAD R2.xyz, R0, R0.w, R2;\n" - "ADD R0.y, -R1.w, c[4].x;\n" - "MUL R0.x, fragment.color.primary.w, R1.w;\n" - "MUL R0.y, fragment.color.primary.w, R0;\n" - "MUL R0.z, R1.w, R0.w;\n" - "DP3 R2.w, R0, c[5];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.xyz, R0, c[0].y;\n" + "MUL R2.xyz, fragment.color.primary.w, R1;\n" + "MUL R1.xyz, fragment.color.primary, c[0].x;\n" + "MAD R2.xyz, R0.w, R1, R2;\n" + "ADD R3.xy, fragment.position, c[4];\n" + "ADD R1.w, -R0, c[6].x;\n" + "MUL R1.xyz, fragment.color.primary, c[1].y;\n" + "MAD R2.xyz, R1.w, R1, R2;\n" + "MUL R1.xyz, R0, c[1].z;\n" + "ADD R2.w, -fragment.color.primary, c[6].x;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.z, R0.w, R2.w;\n" + "MUL R1.x, fragment.color.primary.w, R0.w;\n" + "MUL R1.y, fragment.color.primary.w, R1.w;\n" + "DP3 R2.w, R1, c[1];\n" + "MUL R3.xy, R3, c[2];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[5];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -270,21 +217,21 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "ADD R0.x, -R1.w, c[4];\n" - "MUL R0.xyz, fragment.color.primary, R0.x;\n" - "MAD R0.xyz, fragment.color.primary, R1, R0;\n" - "ADD R0.w, -fragment.color.primary, c[4].x;\n" - "MAD R2.xyz, R1, R0.w, R0;\n" - "ADD R0.z, fragment.color.primary.w, R1.w;\n" - "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R1.x, -R0.w, c[4];\n" + "MUL R1.xyz, fragment.color.primary, R1.x;\n" + "MAD R1.xyz, fragment.color.primary, R0, R1;\n" + "ADD R1.w, -fragment.color.primary, c[4].x;\n" + "MAD R2.xyz, R0, R1.w, R1;\n" + "ADD R1.z, fragment.color.primary.w, R0.w;\n" + "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -294,16 +241,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "ADD R2, fragment.color.primary, R1;\n" - "MUL R0.xy, R0, c[1];\n" - "MAD R2, -fragment.color.primary, R1, R2;\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "ADD R2, fragment.color.primary, R0;\n" + "MUL R1.xy, R1, c[0];\n" + "MAD R2, -fragment.color.primary, R0, R2;\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -315,7 +262,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[3];\n" + "MUL R0.xy, fragment.position, c[1];\n" "TEX R1, R0, texture[0], 2D;\n" "ADD R0.w, -R1, c[4].y;\n" "MUL R3.xyz, fragment.color.primary, R0.w;\n" @@ -336,11 +283,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAD R2.xyz, R0, R3, R2;\n" "ADD R0.z, fragment.color.primary.w, R1.w;\n" "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[2];\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[3];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -352,23 +299,23 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MUL R2.xyz, R1, fragment.color.primary.w;\n" - "MUL R0.xyz, fragment.color.primary, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "ADD R0.w, -R1, c[4].x;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "ADD R0.w, -fragment.color.primary, c[4].x;\n" - "MAD R2.xyz, R1, R0.w, R0;\n" - "ADD R0.z, fragment.color.primary.w, R1.w;\n" - "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" + "MUL R1.xyz, fragment.color.primary, R0.w;\n" + "MIN R1.xyz, R1, R2;\n" + "ADD R1.w, -R0, c[4].x;\n" + "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" + "ADD R1.w, -fragment.color.primary, c[4].x;\n" + "MAD R2.xyz, R0, R1.w, R1;\n" + "ADD R1.z, fragment.color.primary.w, R0.w;\n" + "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -379,35 +326,35 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MUL R2.xyz, R1, fragment.color.primary.w;\n" - "MUL R0.xyz, fragment.color.primary, R1.w;\n" - "MAX R0.xyz, R0, R2;\n" - "ADD R0.w, -R1, c[4].x;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "ADD R0.w, -fragment.color.primary, c[4].x;\n" - "MAD R2.xyz, R1, R0.w, R0;\n" - "ADD R0.z, fragment.color.primary.w, R1.w;\n" - "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" + "MUL R1.xyz, fragment.color.primary, R0.w;\n" + "MAX R1.xyz, R1, R2;\n" + "ADD R1.w, -R0, c[4].x;\n" + "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" + "ADD R1.w, -fragment.color.primary, c[4].x;\n" + "MAD R2.xyz, R0, R1.w, R1;\n" + "ADD R1.z, fragment.color.primary.w, R0.w;\n" + "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" "PARAM c[5] = { program.local[0..3],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[3];\n" + "MUL R0.xy, fragment.position, c[1];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R1.y, -fragment.color.primary.w, c[4].x;\n" "MAX R1.x, fragment.color.primary.w, c[4].y;\n" @@ -417,7 +364,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "RCP R1.x, R1.x;\n" "MAD R1.xyz, -fragment.color.primary, R1.x, c[4].x;\n" "MAX R1.xyz, R1, c[4].y;\n" - "MUL R2.xyz, R0, fragment.color.primary.w;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" "MUL R1.w, fragment.color.primary, R0;\n" "RCP R1.x, R1.x;\n" "RCP R1.y, R1.y;\n" @@ -430,11 +377,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAD R2.xyz, R2, R3, R1;\n" "ADD R1.z, fragment.color.primary.w, R0.w;\n" "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[3];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -442,29 +389,28 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" "PARAM c[5] = { program.local[0..3],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xy, fragment.position, c[3];\n" + "MUL R0.xy, fragment.position, c[1];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R1.w, -R0, c[4].x;\n" - "MUL R1.xyz, R0, fragment.color.primary.w;\n" + "MUL R1.xyz, fragment.color.primary.w, R0;\n" "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n" "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n" "MUL R3.xyz, fragment.color.primary.w, R1;\n" "MAX R1.xyz, fragment.color.primary, c[4].y;\n" + "ADD R2.w, -fragment.color.primary, c[4].x;\n" "MUL R4.xyz, fragment.color.primary, R1.w;\n" "RCP R1.x, R1.x;\n" "RCP R1.y, R1.y;\n" "RCP R1.z, R1.z;\n" "MAD R3.xyz, R3, R1, R4;\n" - "ADD R2.w, -fragment.color.primary, c[4].x;\n" "MUL R1.xyz, R0, R2.w;\n" "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" - "ADD R2.w, -fragment.color.primary, c[4].x;\n" "MAD R3.xyz, R0, R2.w, R3;\n" "MUL R1.w, fragment.color.primary, R0;\n" "ADD R3.xyz, R3, -R1;\n" @@ -472,11 +418,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAD R2.xyz, R2, R3, R1;\n" "ADD R1.z, fragment.color.primary.w, R0.w;\n" "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[3];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -489,7 +435,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[3];\n" + "MUL R0.xy, fragment.position, c[1];\n" "TEX R1, R0, texture[0], 2D;\n" "ADD R0.w, -R1, c[4].y;\n" "MUL R3.xyz, fragment.color.primary, R0.w;\n" @@ -510,11 +456,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAD R2.xyz, R0, R3, R2;\n" "ADD R0.z, fragment.color.primary.w, R1.w;\n" "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[2];\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[3];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -522,58 +468,56 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..3],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xy, fragment.position, c[3];\n" + "MUL R0.xy, fragment.position, c[1];\n" "TEX R0, R0, texture[0], 2D;\n" "MAX R1.x, R0.w, c[4].y;\n" "RCP R1.w, R1.x;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R1.xyz, -R2, c[4].w;\n" + "MUL R1.xyz, -R2, c[5].x;\n" "RSQ R2.w, R2.x;\n" - "ADD R4.xyz, R1, c[5].x;\n" + "ADD R4.xyz, R1, c[4].w;\n" "MAD R1.xyz, -R0, R1.w, c[4].x;\n" "RSQ R2.z, R2.z;\n" "RSQ R2.y, R2.y;\n" "RCP R2.x, R2.w;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R5.xyz, R2, R0.w, -R0;\n" + "MAD R5.xyz, R0.w, R2, -R0;\n" "MAD R2.xyz, fragment.color.primary, c[4].z, -fragment.color.primary.w;\n" "MUL R3.xyz, R1, R2;\n" "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n" "MUL R4.xyz, R5, R2;\n" "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n" - "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n" "MUL R3.xyz, R0, R3;\n" - "MUL R4.xyz, R0, c[4].w;\n" - "ADD R5.xyz, R5, -R3;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MUL R4.xyz, R4, R5;\n" - "ADD R2.xyz, R3, R4;\n" + "MAD R4.xyz, fragment.color.primary.w, R0, R4;\n" + "ADD R5.xyz, R4, -R3;\n" + "MUL R4.xyz, R0, c[5].x;\n" + "SGE R2.xyz, R4, R0.w;\n" + "MAD R2.xyz, R2, R5, R3;\n" "MUL R1.xyz, R0, R1;\n" "MUL R3.xyz, fragment.color.primary, c[4].z;\n" "ADD R2.xyz, R2, -R1;\n" "SGE R3.xyz, R3, fragment.color.primary.w;\n" - "MUL R2.xyz, R3, R2;\n" - "ADD R1.xyz, R1, R2;\n" + "MAD R1.xyz, R3, R2, R1;\n" "ADD R1.w, -R0, c[4].x;\n" "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" "ADD R1.w, -fragment.color.primary, c[4].x;\n" "MAD R2.xyz, R0, R1.w, R1;\n" "ADD R1.z, fragment.color.primary.w, R0.w;\n" "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[3];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -586,77 +530,75 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MUL R2.xyz, R1, fragment.color.primary.w;\n" - "MUL R0.xyz, fragment.color.primary, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "ADD R3.xyz, fragment.color.primary, R1;\n" - "MAD R2.xyz, -R0, c[4].x, R3;\n" - "ADD R0.z, fragment.color.primary.w, R1.w;\n" - "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R1.xyz, fragment.color.primary, R0;\n" + "MUL R3.xyz, fragment.color.primary.w, R0;\n" + "MUL R2.xyz, fragment.color.primary, R0.w;\n" + "MIN R2.xyz, R2, R3;\n" + "MAD R2.xyz, -R2, c[4].x, R1;\n" + "ADD R1.z, fragment.color.primary.w, R0.w;\n" + "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" "PARAM c[5] = { program.local[0..3],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[3];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MUL R0.xyz, R1, fragment.color.primary.w;\n" - "MAD R2.xyz, fragment.color.primary, R1.w, R0;\n" - "MUL R0.xyz, fragment.color.primary, R1;\n" - "MAD R0.xyz, -R0, c[4].y, R2;\n" - "ADD R0.w, -R1, c[4].x;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "ADD R0.w, -fragment.color.primary, c[4].x;\n" - "MAD R2.xyz, R1, R0.w, R0;\n" - "ADD R0.z, fragment.color.primary.w, R1.w;\n" - "MAD R2.w, -fragment.color.primary, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, fragment.position, c[1];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.xyz, fragment.color.primary.w, R0;\n" + "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n" + "MUL R1.xyz, fragment.color.primary, R0;\n" + "MAD R1.xyz, -R1, c[4].x, R2;\n" + "ADD R1.w, -R0, c[4].y;\n" + "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" + "ADD R1.w, -fragment.color.primary, c[4].y;\n" + "MAD R2.xyz, R0, R1.w, R1;\n" + "ADD R1.z, fragment.color.primary.w, R0.w;\n" + "MAD R2.w, -fragment.color.primary, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[2];\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[3];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[4] = { program.local[0],\n" - " { 1 },\n" - " program.local[2..3] };\n" + "PARAM c[4] = { program.local[0..2],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[0];\n" + "MUL R0.xy, fragment.position, c[2];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R1.xyz, R0, c[3].y;\n" - "MUL R2.xyz, R1, fragment.color.primary.w;\n" - "MUL R1.xyz, fragment.color.primary, c[3].x;\n" - "MAD R2.xyz, R1, R0.w, R2;\n" - "MUL R0.xyz, R0, c[2].z;\n" - "ADD R1.w, -R0, c[1].x;\n" - "MUL R1.xyz, fragment.color.primary, c[2].y;\n" - "MAD R1.xyz, R1, R1.w, R2;\n" - "ADD R1.w, -fragment.color.primary, c[1].x;\n" - "MAD result.color.xyz, R0, R1.w, R1;\n" - "ADD R0.y, -R0.w, c[1].x;\n" + "MUL R1.xyz, R0, c[0].y;\n" + "MUL R2.xyz, fragment.color.primary.w, R1;\n" + "MUL R1.xyz, fragment.color.primary, c[0].x;\n" + "MAD R2.xyz, R0.w, R1, R2;\n" + "MUL R0.xyz, R0, c[1].z;\n" + "ADD R1.w, -R0, c[3].x;\n" + "MUL R1.xyz, fragment.color.primary, c[1].y;\n" + "MAD R1.xyz, R1.w, R1, R2;\n" + "ADD R2.x, -fragment.color.primary.w, c[3];\n" + "MAD result.color.xyz, R2.x, R0, R1;\n" "MUL R0.x, fragment.color.primary.w, R0.w;\n" - "MUL R0.z, R0.w, R1.w;\n" - "MUL R0.y, fragment.color.primary.w, R0;\n" - "DP3 result.color.w, R0, c[2];\n" + "MUL R0.z, R0.w, R2.x;\n" + "MUL R0.y, fragment.color.primary.w, R1.w;\n" + "DP3 result.color.w, R0, c[1];\n" "END\n" ; @@ -732,7 +674,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R2;\n" "MUL R0.xy, fragment.position, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, fragment.color.primary.w;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" "MUL R1.xyz, fragment.color.primary, R0.w;\n" "MIN R1.xyz, R1, R2;\n" "ADD R1.w, -R0, c[1].x;\n" @@ -753,7 +695,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R2;\n" "MUL R0.xy, fragment.position, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, fragment.color.primary.w;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" "MUL R1.xyz, fragment.color.primary, R0.w;\n" "MAX R1.xyz, R1, R2;\n" "ADD R1.w, -R0, c[1].x;\n" @@ -768,7 +710,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" "PARAM c[2] = { program.local[0],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -782,7 +724,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" "MAD R2.xyz, -fragment.color.primary, R2.x, c[1].x;\n" "MAX R2.xyz, R2, c[1].y;\n" - "MUL R0.xyz, R0, fragment.color.primary.w;\n" + "MUL R0.xyz, fragment.color.primary.w, R0;\n" "MUL R1.w, fragment.color.primary, R0;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" @@ -801,7 +743,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" "PARAM c[2] = { program.local[0],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -809,7 +751,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R4;\n" "MUL R0.xy, fragment.position, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R1.xyz, R0, fragment.color.primary.w;\n" + "MUL R1.xyz, fragment.color.primary.w, R0;\n" "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n" "MAD R1.xyz, -fragment.color.primary.w, R0.w, R2;\n" "MUL R3.xyz, fragment.color.primary.w, R1;\n" @@ -822,7 +764,6 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "RCP R1.z, R1.z;\n" "MAD R1.xyz, R3, R1, R4;\n" "MUL R3.xyz, R0, R2.w;\n" - "ADD R2.w, -fragment.color.primary, c[1].x;\n" "MAD R0.xyz, R0, R2.w, R1;\n" "MAD R1.xyz, fragment.color.primary, R1.w, R3;\n" "MUL R1.w, fragment.color.primary, R0;\n" @@ -869,8 +810,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" "PARAM c[3] = { program.local[0],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -882,8 +823,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "MAX R1.x, R0.w, c[1].y;\n" "RCP R1.w, R1.x;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R1.xyz, -R2, c[1].w;\n" - "ADD R4.xyz, R1, c[2].x;\n" + "MUL R1.xyz, -R2, c[2].x;\n" + "ADD R4.xyz, R1, c[1].w;\n" "MAD R1.xyz, -R0, R1.w, c[1].x;\n" "RSQ R2.w, R2.x;\n" "RSQ R2.z, R2.z;\n" @@ -891,25 +832,23 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "RCP R2.x, R2.w;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R5.xyz, R2, R0.w, -R0;\n" + "MAD R5.xyz, R0.w, R2, -R0;\n" "MAD R2.xyz, fragment.color.primary, c[1].z, -fragment.color.primary.w;\n" "MUL R3.xyz, R1, R2;\n" "MAD R3.xyz, -R3, R4, fragment.color.primary.w;\n" "MUL R4.xyz, R5, R2;\n" "MAD R1.xyz, -R1, R2, fragment.color.primary.w;\n" - "MAD R5.xyz, R0, fragment.color.primary.w, R4;\n" "MUL R3.xyz, R0, R3;\n" - "MUL R4.xyz, R0, c[1].w;\n" - "ADD R5.xyz, R5, -R3;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MUL R4.xyz, R4, R5;\n" - "ADD R2.xyz, R3, R4;\n" + "MAD R4.xyz, fragment.color.primary.w, R0, R4;\n" + "ADD R5.xyz, R4, -R3;\n" + "MUL R4.xyz, R0, c[2].x;\n" + "SGE R2.xyz, R4, R0.w;\n" + "MAD R2.xyz, R2, R5, R3;\n" "MUL R1.xyz, R0, R1;\n" "MUL R3.xyz, fragment.color.primary, c[1].z;\n" "ADD R2.xyz, R2, -R1;\n" "SGE R3.xyz, R3, fragment.color.primary.w;\n" - "MUL R2.xyz, R3, R2;\n" - "ADD R1.xyz, R1, R2;\n" + "MAD R1.xyz, R3, R2, R1;\n" "ADD R1.w, -R0, c[1].x;\n" "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" "ADD R1.w, fragment.color.primary, R0;\n" @@ -928,7 +867,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "TEMP R2;\n" "MUL R0.xy, fragment.position, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, fragment.color.primary.w;\n" + "MUL R2.xyz, fragment.color.primary.w, R0;\n" "MUL R1.xyz, fragment.color.primary, R0.w;\n" "ADD R1.w, fragment.color.primary, R0;\n" "MIN R1.xyz, R1, R2;\n" @@ -941,20 +880,20 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" "PARAM c[2] = { program.local[0],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "MUL R0.xy, fragment.position, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R1.xyz, R0, fragment.color.primary.w;\n" + "MUL R1.xyz, fragment.color.primary.w, R0;\n" "MAD R2.xyz, fragment.color.primary, R0.w, R1;\n" "MUL R1.xyz, fragment.color.primary, R0;\n" - "MAD R1.xyz, -R1, c[1].y, R2;\n" - "ADD R1.w, -R0, c[1].x;\n" + "MAD R1.xyz, -R1, c[1].x, R2;\n" + "ADD R1.w, -R0, c[1].y;\n" "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" "ADD R1.w, fragment.color.primary, R0;\n" - "ADD R2.x, -fragment.color.primary.w, c[1];\n" + "ADD R2.x, -fragment.color.primary.w, c[1].y;\n" "MAD result.color.xyz, R0, R2.x, R1;\n" "MAD result.color.w, -fragment.color.primary, R0, R1;\n" "END\n" @@ -964,8 +903,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE "!!ARBfp1.0\n" "PARAM c[3] = { program.local[0..2] };\n" "TEMP R0;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[1];\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[0], 2D;\n" "DP4 R0.x, R0, c[2];\n" "MUL result.color, fragment.color.primary, R0.x;\n" @@ -974,359 +913,351 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[1] = { program.local[0] };\n" "MOV result.color, fragment.color.primary;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[12] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..11] };\n" + "PARAM c[12] = { program.local[0..10],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" "ADD R0.z, R0, R0.w;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.z, R0.y;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, c[7].x;\n" - "MUL R0.y, c[8].x, R0;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, c[11].y;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[11].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "ADD R2.w, -R1, c[7].z;\n" - "MUL R0.xyz, R0, c[10].y;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "MUL R0.xyz, R1, c[10].z;\n" - "ADD R3.z, -R0.w, c[7];\n" - "MAD R2.xyz, R0, R3.z, R2;\n" - "MUL R0.y, R0.w, R2.w;\n" - "MUL R0.x, R0.w, R1.w;\n" - "MUL R0.z, R1.w, R3;\n" - "DP3 R2.w, R0, c[10];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[11].x;\n" + "MUL R0.z, R0, c[11].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.x, R0.x;\n" + "RCP R0.z, R0.x;\n" + "ADD R1.x, -R0.y, R0.z;\n" + "MOV R0.x, c[11];\n" + "MUL R0.z, R0.x, c[1].x;\n" + "RCP R1.y, R0.z;\n" + "MUL R0.xy, fragment.position, c[8];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.x, R1, R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R0, c[5].y;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[5].x;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R3.xy, fragment.position, c[9];\n" + "ADD R2.w, -R0, c[11].z;\n" + "MUL R1.xyz, R1, c[6].y;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.xyz, R0, c[6].z;\n" + "ADD R3.z, -R1.w, c[11];\n" + "MAD R2.xyz, R3.z, R1, R2;\n" + "MUL R1.y, R1.w, R2.w;\n" + "MUL R1.x, R1.w, R0.w;\n" + "MUL R1.z, R0.w, R3;\n" + "DP3 R2.w, R1, c[6];\n" + "MUL R3.xy, R3, c[7];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[10];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.z, R0.y;\n" - "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, c[7].x;\n" - "MUL R0.y, c[8].x, R0;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2.x, -R1.w, c[7].z;\n" - "MUL R2.xyz, R0, R2.x;\n" - "MAD R0.xyz, R0, R1, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[9].x;\n" + "MUL R0.z, R0, c[9].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.x, R0.x;\n" + "RCP R0.z, R0.x;\n" + "ADD R1.x, -R0.y, R0.z;\n" + "MOV R0.x, c[9];\n" + "MUL R0.z, R0.x, c[1].x;\n" + "RCP R1.y, R0.z;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.x, R1, R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "ADD R2.x, -R0.w, c[9].z;\n" + "MUL R2.xyz, R1, R2.x;\n" + "MAD R1.xyz, R1, R0, R2;\n" + "ADD R2.x, -R1.w, c[9].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" - "ADD R3.xy, fragment.position, c[0];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.z, -R0, c[1].x;\n" + "ADD R3.xy, fragment.position, c[7];\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[9].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2, R0, R1;\n" - "MAD R2, -R0, R1, R2;\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.z, R0.x, R0.y;\n" + "TEX R1, R0.z, texture[2], 1D;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R2, R1, R0;\n" + "MAD R2, -R1, R0, R2;\n" + "MUL R3.xy, R3, c[5];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R1.xy, fragment.position, c[6];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[9].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "ADD R2.w, -R1, c[7].z;\n" + "ADD R2.w, -R1, c[9].z;\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[7].x;\n" + "MUL R2.xyz, R2, c[9].x;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MUL R3.xyz, R0, R1;\n" "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R3.xyz, R3, c[7].x, R4;\n" + "ADD R2.x, -R0.w, c[9].z;\n" + "MAD R3.xyz, R3, c[9].x, R4;\n" "MAD R3.xyz, R1, R2.x, R3;\n" "MAD R0.xyz, R1, R2.x, R0;\n" - "MUL R2.xyz, R1, c[7].x;\n" + "MUL R2.xyz, R1, c[9].x;\n" "ADD R0.xyz, R0, -R3;\n" "SGE R2.xyz, R2, R1.w;\n" "MAD R2.xyz, R2, R0, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, R0, c[5];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[8];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" - "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[9].x;\n" + "MUL R0.z, R0, c[9].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.z, R0.x;\n" + "MOV R0.x, c[9];\n" + "MUL R0.x, R0, c[1];\n" + "RCP R0.z, R0.z;\n" + "ADD R0.z, -R0.y, R0;\n" + "RCP R0.w, R0.x;\n" + "MUL R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[7].z;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[9].z;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[9].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" - "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[9].x;\n" + "MUL R0.z, R0, c[9].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.z, R0.x;\n" + "MOV R0.x, c[9];\n" + "MUL R0.x, R0, c[1];\n" + "RCP R0.z, R0.z;\n" + "ADD R0.z, -R0.y, R0;\n" + "RCP R0.w, R0.x;\n" + "MUL R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[7].z;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[9].z;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[9].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1, 1e-06 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[9].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "MAX R1.x, R0.w, c[7].w;\n" + "MAX R1.x, R0.w, c[9].w;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[7].z;\n" - "MAX R2.xyz, R1, c[7].w;\n" - "MUL R1.xy, fragment.position, c[9];\n" + "MAD R1.xyz, -R0, R1.x, c[9].z;\n" + "MAX R2.xyz, R1, c[9].w;\n" + "MUL R1.xy, fragment.position, c[6];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[7].z;\n" + "ADD R2.w, -R0, c[9].z;\n" "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[7].z;\n" + "ADD R2.w, -R1, c[9].z;\n" "MAD R4.xyz, R0, R2.w, R3;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MUL R2.w, R0, R1;\n" "MAD R0.xyz, R0, R1.w, R3;\n" "SGE R0.xyz, R0, R2.w;\n" @@ -1339,57 +1270,56 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD "MAD R2.xyz, R0, R4, R2;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, R0, c[5];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[8];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1, 9.9999997e-06 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MOV R0.y, c[9].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[7].w;\n" - "ADD R2.w, -R1, c[7].z;\n" + "MAX R2.xyz, R0, c[9].w;\n" + "ADD R2.w, -R1, c[9].z;\n" "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[7].z;\n" + "ADD R3.w, -R0, c[9].z;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" "RCP R2.z, R2.z;\n" @@ -1403,60 +1333,59 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD "MAD R2.xyz, R3, R2, R0;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, R0, c[5];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[8];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R1.xy, fragment.position, c[6];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[9].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "ADD R2.w, -R1, c[7].z;\n" + "ADD R2.w, -R1, c[9].z;\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[7].x;\n" + "MUL R2.xyz, R2, c[9].x;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MAD R2.xyz, R0, R2.w, R2;\n" "MUL R3.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[7].z;\n" - "MAD R3.xyz, R3, c[7].x, R4;\n" - "MUL R0.xyz, R0, c[7].x;\n" + "ADD R2.w, -R0, c[9].z;\n" + "MAD R3.xyz, R3, c[9].x, R4;\n" + "MUL R0.xyz, R0, c[9].x;\n" "SGE R0.xyz, R0, R0.w;\n" "MAD R3.xyz, R1, R2.w, R3;\n" "MAD R2.xyz, R1, R2.w, R2;\n" @@ -1464,21 +1393,20 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD "MAD R2.xyz, R0, R2, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, R0, c[5];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[8];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..6],\n" - " { 2, 4, 1, 9.9999997e-06 },\n" - " program.local[8..9],\n" - " { 8, 3 } };\n" + "PARAM c[11] = { program.local[0..8],\n" + " { 2, 4, 1, 9.9999997e-006 },\n" + " { 3, 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -1486,259 +1414,252 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[7];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[9];\n" + "MUL R0.x, R0, c[9];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MAX R0.z, R1.w, c[7].w;\n" - "RCP R2.w, R0.z;\n" - "MUL R2.xyz, R1, R2.w;\n" - "MUL R6.xyz, -R2, c[10].x;\n" - "MAD R3.xyz, -R1, R2.w, c[7].z;\n" + "MOV R0.z, c[9].x;\n" + "MUL R1.y, R0.z, c[1].x;\n" "RSQ R0.y, R0.y;\n" "RCP R0.y, R0.y;\n" - "ADD R0.x, -R0, R0.y;\n" - "MOV R0.y, c[7].x;\n" - "MUL R0.y, c[8].x, R0;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MAD R4.xyz, R0, c[7].x, -R0.w;\n" + "ADD R1.x, -R0, R0.y;\n" + "RCP R1.y, R1.y;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MAX R1.z, R0.w, c[9].w;\n" + "RCP R2.w, R1.z;\n" + "MUL R2.xyz, R0, R2.w;\n" + "MAD R6.xyz, -R2, c[10].y, c[10].x;\n" + "MAD R3.xyz, -R0, R2.w, c[9].z;\n" + "RSQ R2.w, R2.x;\n" + "RCP R2.x, R2.w;\n" + "MUL R1.x, R1, R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MAD R4.xyz, R1, c[9].x, -R1.w;\n" "MUL R5.xyz, R3, R4;\n" - "MAD R3.xyz, -R3, R4, R0.w;\n" - "ADD R6.xyz, R6, c[10].y;\n" - "RSQ R2.x, R2.x;\n" + "MAD R5.xyz, -R5, R6, R1.w;\n" + "MAD R3.xyz, -R3, R4, R1.w;\n" "RSQ R2.z, R2.z;\n" "RSQ R2.y, R2.y;\n" - "MAD R5.xyz, -R5, R6, R0.w;\n" - "MUL R3.xyz, R1, R3;\n" - "ADD R2.w, -R1, c[7].z;\n" - "RCP R2.x, R2.x;\n" + "MUL R5.xyz, R0, R5;\n" + "MUL R3.xyz, R0, R3;\n" + "ADD R2.w, -R0, c[9].z;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R1.w, -R1;\n" - "MUL R6.xyz, R2, R4;\n" - "MUL R2.xyz, R1, R5;\n" - "MAD R6.xyz, R1, R0.w, R6;\n" - "MUL R4.xyz, R0, c[7].x;\n" - "MUL R5.xyz, R1, c[10].x;\n" - "ADD R6.xyz, R6, -R2;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R2.xyz, R2, R5;\n" - "SGE R4.xyz, R4, R0.w;\n" + "MAD R2.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R1.w, R0, R2;\n" + "ADD R6.xyz, R2, -R5;\n" + "MUL R4.xyz, R1, c[9].x;\n" + "MUL R2.xyz, R0, c[10].y;\n" + "SGE R2.xyz, R2, R0.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" + "SGE R4.xyz, R4, R1.w;\n" "ADD R2.xyz, R2, -R3;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MAD R2.xyz, R4, R2, R3;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[9].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" "ADD R0.z, R0, R0.w;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.z, R0.y;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[9].xyxy;\n" - "MOV R0.y, c[7].x;\n" - "MUL R0.y, c[8].x, R0;\n" - "RCP R0.y, R0.y;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R3.xyz, R0, R1;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MUL R0.xyz, R0, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "MAD R2.xyz, -R0, c[7].x, R3;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[9].x;\n" + "MUL R0.z, R0, c[9].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.z, R0.x;\n" + "MOV R0.x, c[9];\n" + "MUL R0.x, R0, c[1];\n" + "RCP R0.z, R0.z;\n" + "ADD R0.z, -R0.y, R0;\n" + "RCP R0.w, R0.x;\n" + "MUL R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "ADD R2.xyz, R1, R0;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R1.xyz, R1, R0.w;\n" + "MIN R1.xyz, R1, R3;\n" + "MAD R2.xyz, -R1, c[9].x, R2;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 2, 4, 1 },\n" - " program.local[8..9] };\n" + "PARAM c[10] = { program.local[0..8],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[6];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[8].x, -R0;\n" - "MUL R0.y, R0.z, c[7];\n" - "MUL R0.x, R0, c[7];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[7].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[8].x, R0;\n" - "MUL R1.xy, fragment.position, c[9];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" - "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[7].x, R3;\n" - "ADD R2.w, -R1, c[7].z;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].z;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.x, c[9].x;\n" + "MUL R0.z, R0, c[9].y;\n" + "MAD R0.x, R0.y, R0.y, -R0.z;\n" + "RSQ R0.z, R0.x;\n" + "MOV R0.x, c[9];\n" + "MUL R0.x, R0, c[1];\n" + "RCP R0.z, R0.z;\n" + "ADD R0.z, -R0.y, R0;\n" + "RCP R0.w, R0.x;\n" + "MUL R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[6];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R1.w, R0;\n" + "MAD R3.xyz, R1, R0.w, R2;\n" + "MUL R2.xyz, R1, R0;\n" + "MAD R2.xyz, -R2, c[9].x, R3;\n" + "ADD R2.w, -R0, c[9].z;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[9].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, R1, c[5];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[8];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..8] };\n" + "PARAM c[9] = { program.local[0..7],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[8];\n" + "MUL R0.x, R0, c[8];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.z, R0.y;\n" - "RCP R0.z, R0.z;\n" + "RSQ R0.y, R0.y;\n" + "RCP R0.z, R0.y;\n" "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" + "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R1, c[8].y;\n" - "MOV R0.y, c[4].x;\n" - "MUL R0.y, c[5].x, R0;\n" + "MUL R2.xyz, R1, c[5].y;\n" + "MOV R0.y, c[8].x;\n" + "MUL R0.y, R0, c[1].x;\n" "RCP R0.y, R0.y;\n" "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[8].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R2.w, -R1, c[4].z;\n" - "MUL R0.xyz, R0, c[7].y;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[4].z;\n" - "MUL R1.xyz, R1, c[7].z;\n" - "MAD result.color.xyz, R1, R2.x, R0;\n" + "MUL R3.xyz, R0.w, R2;\n" + "MUL R2.xyz, R0, c[5].x;\n" + "MAD R2.xyz, R1.w, R2, R3;\n" + "ADD R2.w, -R1, c[8].z;\n" + "MUL R0.xyz, R0, c[6].y;\n" + "MAD R0.xyz, R2.w, R0, R2;\n" + "ADD R2.x, -R0.w, c[8].z;\n" + "MUL R1.xyz, R1, c[6].z;\n" + "MAD result.color.xyz, R2.x, R1, R0;\n" "MUL R0.x, R0.w, R1.w;\n" "MUL R0.z, R1.w, R2.x;\n" "MUL R0.y, R0.w, R2.w;\n" - "DP3 result.color.w, R0, c[7];\n" + "DP3 result.color.w, R0, c[6];\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" "RSQ R0.y, R0.y;\n" "RCP R0.z, R0.y;\n" "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, c[4].x;\n" - "MUL R0.y, c[5].x, R0;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" "RCP R0.y, R0.y;\n" "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "ADD R2.x, -R1.w, c[4].z;\n" + "ADD R2.x, -R1.w, c[6].z;\n" "MUL R2.xyz, R0, R2.x;\n" "MAD R0.xyz, R0, R1, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].z;\n" + "ADD R2.y, -R0.w, c[6].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -1746,31 +1667,30 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" "ADD R0.z, R0, R0.w;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" "ADD R0.x, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "MOV R0.y, c[4].x;\n" - "MUL R0.y, c[5].x, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" "RCP R0.y, R0.y;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" "MUL R0.x, R0, R0.y;\n" @@ -1782,50 +1702,49 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[6].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4].z;\n" - "MUL R2.xyz, R2, c[4].x;\n" + "ADD R2.w, -R1, c[6].z;\n" + "MUL R2.xyz, R2, c[6].x;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MAD R2.xyz, R0, R2.w, R2;\n" "MUL R3.xyz, R0, R2.w;\n" "MUL R0.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[4].z;\n" - "MAD R0.xyz, R0, c[4].x, R3;\n" + "ADD R2.w, -R0, c[6].z;\n" + "MAD R0.xyz, R0, c[6].x, R3;\n" "MAD R0.xyz, R1, R2.w, R0;\n" "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R1.xyz, R1, c[4].x;\n" + "MUL R1.xyz, R1, c[6].x;\n" "ADD R2.w, R0, R1;\n" "ADD R2.xyz, R2, -R0;\n" "SGE R1.xyz, R1, R1.w;\n" @@ -1836,43 +1755,42 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4].z;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].z;\n" + "ADD R2.y, -R0.w, c[6].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -1880,43 +1798,42 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4].z;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].z;\n" + "ADD R2.y, -R0.w, c[6].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -1924,45 +1841,44 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1, 1e-06 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[6].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MAX R1.x, R0.w, c[4].w;\n" + "MAX R1.x, R0.w, c[6].w;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[4].z;\n" - "MAX R2.xyz, R1, c[4].w;\n" - "MUL R1.xy, fragment.position, c[6];\n" + "MAD R1.xyz, -R0, R1.x, c[6].z;\n" + "MAX R2.xyz, R1, c[6].w;\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[4].z;\n" + "ADD R2.w, -R0, c[6].z;\n" "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[4].z;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R3.xyz, R0, R2.w, R3;\n" - "MUL R1.xyz, R1, R0.w;\n" + "MUL R1.xyz, R0.w, R1;\n" "MAD R0.xyz, R0, R1.w, R1;\n" "MUL R2.w, R0, R1;\n" "RCP R2.x, R2.x;\n" @@ -1980,46 +1896,45 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1, 9.9999997e-06 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" - "ADD R2.w, -R1, c[4].z;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[4].w;\n" + "MAX R2.xyz, R0, c[6].w;\n" "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[4].z;\n" + "ADD R3.w, -R0, c[6].z;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" "RCP R2.z, R2.z;\n" @@ -2038,50 +1953,49 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[6].x;\n" + "RSQ R0.z, R0.z;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" + "ADD R0.x, -R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "ADD R2.w, -R1, c[4].z;\n" + "ADD R2.w, -R1, c[6].z;\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[4].x;\n" + "MUL R2.xyz, R2, c[6].x;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MUL R3.xyz, R0, R1;\n" "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.w, -R0, c[4].z;\n" - "MUL R0.xyz, R0, c[4].x;\n" + "ADD R2.w, -R0, c[6].z;\n" + "MUL R0.xyz, R0, c[6].x;\n" "MAD R2.xyz, R1, R2.w, R2;\n" - "MAD R3.xyz, R3, c[4].x, R4;\n" + "MAD R3.xyz, R3, c[6].x, R4;\n" "MAD R1.xyz, R1, R2.w, R3;\n" "ADD R2.w, R0, R1;\n" "ADD R2.xyz, R2, -R1;\n" @@ -2093,10 +2007,9 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..3],\n" - " { 2, 4, 1, 9.9999997e-06 },\n" - " program.local[5..6],\n" - " { 8, 3 } };\n" + "PARAM c[8] = { program.local[0..5],\n" + " { 2, 4, 1, 9.9999997e-006 },\n" + " { 3, 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -2104,64 +2017,61 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MAX R0.z, R1.w, c[4].w;\n" + "MAX R0.z, R1.w, c[6].w;\n" "RCP R2.w, R0.z;\n" "MUL R2.xyz, R1, R2.w;\n" - "MUL R6.xyz, -R2, c[7].x;\n" - "MAD R3.xyz, -R1, R2.w, c[4].z;\n" + "MAD R6.xyz, -R2, c[7].y, c[7].x;\n" + "MAD R3.xyz, -R1, R2.w, c[6].z;\n" + "RSQ R2.w, R2.x;\n" + "RCP R2.x, R2.w;\n" "RSQ R0.y, R0.y;\n" "RCP R0.y, R0.y;\n" "ADD R0.x, -R0, R0.y;\n" - "MOV R0.y, c[4].x;\n" - "MUL R0.y, c[5].x, R0;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" "RCP R0.y, R0.y;\n" "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MAD R4.xyz, R0, c[4].x, -R0.w;\n" + "MAD R4.xyz, R0, c[6].x, -R0.w;\n" "MUL R5.xyz, R3, R4;\n" + "MAD R5.xyz, -R5, R6, R0.w;\n" "MAD R3.xyz, -R3, R4, R0.w;\n" - "ADD R6.xyz, R6, c[7].y;\n" - "RSQ R2.x, R2.x;\n" "RSQ R2.z, R2.z;\n" "RSQ R2.y, R2.y;\n" - "MAD R5.xyz, -R5, R6, R0.w;\n" + "MUL R5.xyz, R1, R5;\n" "MUL R3.xyz, R1, R3;\n" - "RCP R2.x, R2.x;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R1.w, -R1;\n" - "MUL R6.xyz, R2, R4;\n" - "MUL R2.xyz, R1, R5;\n" - "MUL R4.xyz, R0, c[4].x;\n" - "MAD R6.xyz, R1, R0.w, R6;\n" - "MUL R5.xyz, R1, c[7].x;\n" - "ADD R6.xyz, R6, -R2;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R2.xyz, R2, R5;\n" + "MAD R2.xyz, R1.w, R2, -R1;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R0.w, R1, R2;\n" + "ADD R6.xyz, R2, -R5;\n" + "MUL R4.xyz, R0, c[6].x;\n" + "MUL R2.xyz, R1, c[7].y;\n" + "SGE R2.xyz, R2, R1.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" "ADD R2.xyz, R2, -R3;\n" "SGE R4.xyz, R4, R0.w;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" - "ADD R2.w, -R1, c[4].z;\n" + "MAD R2.xyz, R4, R2, R3;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].z;\n" + "ADD R2.y, -R0.w, c[6].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -2169,86 +2079,84 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "ADD R0.xyz, R0, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R1.x, R0.w, R1.w;\n" - "MAD result.color.xyz, -R2, c[4].x, R0;\n" + "MAD result.color.xyz, -R2, c[6].x, R0;\n" "MAD result.color.w, -R0, R1, R1.x;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 2, 4, 1 },\n" - " program.local[5..6] };\n" + "PARAM c[7] = { program.local[0..5],\n" + " { 2, 4, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" "ADD R0.z, R0, R0.w;\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[6];\n" + "MUL R0.x, R0, c[6];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R0.x, -R0, R0.y;\n" + "RSQ R0.z, R0.y;\n" "RCP R0.z, R0.z;\n" - "MUL R0.x, R0, R0.z;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MOV R0.y, c[6].x;\n" + "MUL R0.y, R0, c[1].x;\n" + "RCP R0.y, R0.y;\n" + "MUL R0.x, R0, R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[4].x, R3;\n" - "ADD R2.w, -R1, c[4].z;\n" + "MAD R2.xyz, -R2, c[6].x, R3;\n" + "ADD R2.w, -R1, c[6].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].z;\n" + "ADD R2.y, -R0.w, c[6].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -2256,35 +2164,34 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK = "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..3],\n" - " { 2, 4 },\n" - " program.local[5..8] };\n" + "PARAM c[9] = { program.local[0..7],\n" + " { 2, 4 } };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.z, R0, R0.w;\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[8];\n" + "MUL R0.x, R0, c[8];\n" "MAD R0.y, R0.x, R0.x, -R0;\n" "RSQ R0.y, R0.y;\n" "RCP R0.y, R0.y;\n" "ADD R1.x, -R0, R0.y;\n" - "MOV R0.z, c[4].x;\n" - "MUL R0.z, c[5].x, R0;\n" + "MOV R0.z, c[8].x;\n" + "MUL R0.z, R0, c[1].x;\n" "RCP R1.y, R0.z;\n" "ADD R0.xy, fragment.position, c[6];\n" - "MUL R0.xy, R0, c[7];\n" + "MUL R0.xy, R0, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" "MUL R1.x, R1, R1.y;\n" - "DP4 R1.y, R0, c[8];\n" + "DP4 R1.y, R0, c[7];\n" "TEX R0, R1, texture[1], 1D;\n" "MUL result.color, R0, R1.y;\n" "END\n" @@ -2292,480 +2199,479 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..3],\n" - " { 2, 4 },\n" - " program.local[5] };\n" + "PARAM c[6] = { program.local[0..4],\n" + " { 2, 4 } };\n" "TEMP R0;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[3];\n" + "MAD R0.xyz, fragment.position.x, c[2], R0;\n" + "ADD R0.xyz, R0, c[4];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.xyxy;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" "ADD R0.z, R0, R0.w;\n" - "MUL R0.z, c[5].x, -R0;\n" - "MUL R0.y, R0.z, c[4];\n" - "MUL R0.x, R0, c[4];\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "MOV R0.z, c[4].x;\n" - "RSQ R0.y, R0.y;\n" - "MUL R0.z, c[5].x, R0;\n" - "RCP R0.y, R0.y;\n" + "MUL R0.z, -R0, c[1].x;\n" + "MUL R0.y, R0.z, c[5];\n" + "MUL R0.x, R0, c[5];\n" + "MAD R0.z, R0.x, R0.x, -R0.y;\n" + "MOV R0.y, c[5].x;\n" + "RSQ R0.z, R0.z;\n" + "MUL R0.y, R0, c[1].x;\n" "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0, R0.y;\n" - "MUL R0.x, R0, R0.z;\n" + "RCP R0.y, R0.y;\n" + "ADD R0.x, -R0, R0.z;\n" + "MUL R0.x, R0, R0.y;\n" "TEX result.color, R0, texture[0], 1D;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[13] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494 },\n" - " program.local[10..12] };\n" + "PARAM c[13] = { program.local[0..9],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, c[12].y;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[12].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "ADD R2.w, -R1, c[7];\n" - "MUL R0.xyz, R0, c[11].y;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "MUL R0.xyz, R1, c[11].z;\n" - "ADD R3.z, -R0.w, c[7].w;\n" - "MAD R2.xyz, R0, R3.z, R2;\n" - "MUL R0.y, R0.w, R2.w;\n" - "MUL R0.x, R0.w, R1.w;\n" - "MUL R0.z, R1.w, R3;\n" - "DP3 R2.w, R0, c[11];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[10].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[11].x, c[11].y;\n" + "MAD R1.z, R1, R1.y, -c[11];\n" + "MAD R1.z, R1, R1.y, c[11].w;\n" + "MAD R1.z, R1, R1.y, -c[12].x;\n" + "MAD R1.y, R1.z, R1, c[12];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[10].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[10].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R1.x, R0, c[10];\n" + "FLR R1.y, R1.x;\n" + "MUL R0.xy, fragment.position, c[7];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R1.x, R1, -R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R0, c[4].y;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[4].x;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R3.xy, fragment.position, c[8];\n" + "ADD R2.w, -R0, c[12].z;\n" + "MUL R1.xyz, R1, c[5].y;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.xyz, R0, c[5].z;\n" + "ADD R3.z, -R1.w, c[12];\n" + "MAD R2.xyz, R3.z, R1, R2;\n" + "MUL R1.y, R1.w, R2.w;\n" + "MUL R1.x, R1.w, R0.w;\n" + "MUL R1.z, R0.w, R3;\n" + "DP3 R2.w, R1, c[5];\n" + "MUL R3.xy, R3, c[6];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[9];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2.x, -R1.w, c[7].w;\n" - "MUL R2.xyz, R0, R2.x;\n" - "MAD R0.xyz, R0, R1, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R1.x, R0, c[8];\n" + "FLR R1.y, R1.x;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R1.x, R1, -R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "ADD R2.x, -R0.w, c[10].z;\n" + "MUL R2.xyz, R1, R2.x;\n" + "MAD R1.xyz, R1, R0, R2;\n" + "ADD R2.x, -R1.w, c[10].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" + "ADD R3.xy, fragment.position, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[8];\n" "FLR R0.y, R0.x;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2, R0, R1;\n" - "MAD R2, -R0, R1, R2;\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R0.z, R0.x, -R0.y;\n" + "TEX R1, R0.z, texture[2], 1D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R2, R1, R0;\n" + "MAD R2, -R1, R0, R2;\n" + "MUL R3.xy, R3, c[4];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 2 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[7];\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].y, c[8];\n" + "MAD R1.z, R1, R1.y, -c[8].w;\n" + "MAD R1.z, R1, R1.y, c[9].x;\n" + "MAD R1.z, R1, R1.y, -c[9].y;\n" + "MAD R1.y, R1.z, R1, c[9].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[9].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[10].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[10].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" + "MUL R1.xy, fragment.position, c[5];\n" + "TEX R1, R1, texture[0], 2D;\n" + "ADD R2.w, -R1, c[10];\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[9].y;\n" + "MUL R2.xyz, R2, c[10].z;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MUL R3.xyz, R0, R1;\n" "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R3.xyz, R3, c[9].y, R4;\n" + "ADD R2.x, -R0.w, c[10].w;\n" + "MAD R3.xyz, R3, c[10].z, R4;\n" "MAD R3.xyz, R1, R2.x, R3;\n" "MAD R0.xyz, R1, R2.x, R0;\n" - "MUL R2.xyz, R1, c[9].y;\n" + "MUL R2.xyz, R1, c[10].z;\n" "ADD R0.xyz, R0, -R3;\n" "SGE R2.xyz, R2, R1.w;\n" "MAD R2.xyz, R2, R0, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.z, R0.x, c[8].x;\n" + "FLR R0.w, R0.z;\n" + "ADD R1.x, R0.z, -R0.w;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[7];\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[10].z;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[10].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.z, R0.x, c[8].x;\n" + "FLR R0.w, R0.z;\n" + "ADD R1.x, R0.z, -R0.w;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[7];\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[10].z;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[10].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 1e-06 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].y, c[8];\n" + "MAD R1.z, R1, R1.y, -c[8].w;\n" + "MAD R1.z, R1, R1.y, c[9].x;\n" + "MAD R1.z, R1, R1.y, -c[9].y;\n" + "MAD R1.y, R1.z, R1, c[9].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[9].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[10].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[10].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "MAX R1.x, R0.w, c[9].y;\n" + "MAX R1.x, R0.w, c[10].w;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[7].w;\n" - "MAX R2.xyz, R1, c[9].y;\n" - "MUL R1.xy, fragment.position, c[10];\n" + "MAD R1.xyz, -R0, R1.x, c[10].z;\n" + "MAX R2.xyz, R1, c[10].w;\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[7];\n" + "ADD R2.w, -R0, c[10].z;\n" "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[7];\n" + "ADD R2.w, -R1, c[10].z;\n" "MAD R4.xyz, R0, R2.w, R3;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MUL R2.w, R0, R1;\n" "MAD R0.xyz, R0, R1.w, R3;\n" "SGE R0.xyz, R0, R2.w;\n" @@ -2778,70 +2684,70 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO "MAD R2.xyz, R0, R4, R2;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 9.9999997e-06 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[7];\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].y, c[8];\n" + "MAD R1.z, R1, R1.y, -c[8].w;\n" + "MAD R1.z, R1, R1.y, c[9].x;\n" + "MAD R1.z, R1, R1.y, -c[9].y;\n" + "MAD R1.y, R1.z, R1, c[9].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[9].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[10].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[10].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[9].y;\n" - "ADD R3.w, -R0, c[7];\n" + "MAX R2.xyz, R0, c[10].w;\n" + "ADD R2.w, -R1, c[10].z;\n" + "ADD R3.w, -R0, c[10].z;\n" "MUL R5.xyz, R0, R2.w;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" @@ -2856,74 +2762,74 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO "MAD R2.xyz, R3, R2, R0;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 2 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[7];\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].y, c[8];\n" + "MAD R1.z, R1, R1.y, -c[8].w;\n" + "MAD R1.z, R1, R1.y, c[9].x;\n" + "MAD R1.z, R1, R1.y, -c[9].y;\n" + "MAD R1.y, R1.z, R1, c[9].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[9].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[10].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[10].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[2], 1D;\n" + "MUL R1.xy, fragment.position, c[5];\n" + "TEX R1, R1, texture[0], 2D;\n" + "ADD R2.w, -R1, c[10];\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[9].y;\n" + "MUL R2.xyz, R2, c[10].z;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MAD R2.xyz, R0, R2.w, R2;\n" "MUL R3.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[7];\n" - "MAD R3.xyz, R3, c[9].y, R4;\n" - "MUL R0.xyz, R0, c[9].y;\n" + "ADD R2.w, -R0, c[10];\n" + "MAD R3.xyz, R3, c[10].z, R4;\n" + "MUL R0.xyz, R0, c[10].z;\n" "SGE R0.xyz, R0, R0.w;\n" "MAD R3.xyz, R1, R2.w, R3;\n" "MAD R2.xyz, R1, R2.w, R2;\n" @@ -2931,24 +2837,22 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO "MAD R2.xyz, R0, R2, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" - "PARAM c[12] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 9.9999997e-06, 2, 8 },\n" - " program.local[10],\n" - " { 3 } };\n" + "PARAM c[12] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1, 9.9999997e-006 },\n" + " { 2, 3, 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -2956,326 +2860,325 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MOV R1.x, c[7].y;\n" - "MUL R0.w, R0.z, R0.z;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "MAX R0.z, R1.w, c[9].y;\n" - "RCP R2.w, R0.z;\n" - "MUL R2.xyz, R1, R2.w;\n" - "RSQ R3.w, R2.x;\n" - "RSQ R4.y, R2.z;\n" - "RCP R4.x, R3.w;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MAD R3.xyz, R0, c[9].z, -R0.w;\n" - "RSQ R3.w, R2.y;\n" - "RCP R4.z, R4.y;\n" - "RCP R4.y, R3.w;\n" - "MAD R4.xyz, R4, R1.w, -R1;\n" - "MUL R6.xyz, R4, R3;\n" - "MUL R4.xyz, -R2, c[9].w;\n" - "MAD R2.xyz, -R1, R2.w, c[7].w;\n" - "ADD R5.xyz, R4, c[11].x;\n" - "MUL R4.xyz, R2, R3;\n" - "MAD R4.xyz, -R4, R5, R0.w;\n" - "MAD R2.xyz, -R2, R3, R0.w;\n" - "MAD R5.xyz, R1, R0.w, R6;\n" - "MUL R4.xyz, R1, R4;\n" - "MUL R6.xyz, R1, c[9].w;\n" - "ADD R5.xyz, R5, -R4;\n" - "SGE R6.xyz, R6, R1.w;\n" - "MUL R5.xyz, R6, R5;\n" - "ADD R3.xyz, R4, R5;\n" - "MUL R2.xyz, R1, R2;\n" - "MUL R4.xyz, R0, c[9].z;\n" - "ADD R3.xyz, R3, -R2;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[7];\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R1.x, R0, c[8];\n" + "FLR R1.y, R1.x;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MAX R2.x, R0.w, c[10].w;\n" + "RCP R2.w, R2.x;\n" + "MUL R2.xyz, R0, R2.w;\n" + "MAD R6.xyz, -R2, c[11].z, c[11].y;\n" + "MAD R3.xyz, -R0, R2.w, c[10].z;\n" + "RSQ R2.w, R2.x;\n" + "RCP R2.x, R2.w;\n" + "ADD R1.x, R1, -R1.y;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MAD R4.xyz, R1, c[11].x, -R1.w;\n" + "MUL R5.xyz, R3, R4;\n" + "MAD R5.xyz, -R5, R6, R1.w;\n" + "MAD R3.xyz, -R3, R4, R1.w;\n" + "RSQ R2.z, R2.z;\n" + "RSQ R2.y, R2.y;\n" + "MUL R5.xyz, R0, R5;\n" + "MUL R3.xyz, R0, R3;\n" + "ADD R2.w, -R0, c[10].z;\n" + "RCP R2.z, R2.z;\n" + "RCP R2.y, R2.y;\n" + "MAD R2.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R1.w, R0, R2;\n" + "ADD R6.xyz, R2, -R5;\n" + "MUL R4.xyz, R1, c[11].x;\n" + "MUL R2.xyz, R0, c[11].z;\n" + "SGE R2.xyz, R2, R0.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" + "SGE R4.xyz, R4, R1.w;\n" + "ADD R2.xyz, R2, -R3;\n" + "MAD R2.xyz, R4, R2, R3;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[10].z;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 2 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 2 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[10].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R3.xyz, R0, R1;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MUL R0.xyz, R0, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "MAD R2.xyz, -R0, c[9].y, R3;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.z, R0.x, c[8].x;\n" + "FLR R0.w, R0.z;\n" + "ADD R1.x, R0.z, -R0.w;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "ADD R2.xyz, R1, R0;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R1.xyz, R1, R0.w;\n" + "MIN R1.xyz, R1, R3;\n" + "MAD R2.xyz, -R1, c[10].z, R2;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..5],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[8],\n" - " { 0.15915494, 2 },\n" - " program.local[10] };\n" + "PARAM c[11] = { program.local[0..7],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[6].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[6].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[7].y;\n" - "CMP R0.x, R0, c[7], R1;\n" - "MAD R0.w, R0, c[6].z, -c[6];\n" - "MUL R1.xy, fragment.position, c[10];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[7].z, c[7].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[8];\n" - "MUL R0.x, R0, c[9];\n" - "FLR R0.y, R0.x;\n" - "ADD R0.x, R0, -R0.y;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[9].y, R3;\n" - "ADD R2.w, -R1, c[7];\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[7].w;\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[8].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[9].x, c[9].y;\n" + "MAD R1.z, R1, R1.y, -c[9];\n" + "MAD R1.z, R1, R1.y, c[9].w;\n" + "MAD R1.z, R1, R1.y, -c[10].x;\n" + "MAD R1.y, R1.z, R1, c[10];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[8].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[8].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.z, R0.x, c[8].x;\n" + "FLR R0.w, R0.z;\n" + "ADD R1.x, R0.z, -R0.w;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R1.w, R0;\n" + "MAD R3.xyz, R1, R0.w, R2;\n" + "MUL R2.xyz, R1, R0;\n" + "MAD R2.xyz, -R2, c[10].z, R3;\n" + "ADD R2.w, -R0, c[10];\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[10].w;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7..9] };\n" + "PARAM c[10] = { program.local[0..6],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" - "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[7].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].x, c[8].y;\n" + "MAD R1.z, R1, R1.y, -c[8];\n" + "MAD R1.z, R1, R1.y, c[8].w;\n" + "MAD R1.z, R1, R1.y, -c[9].x;\n" + "MAD R1.y, R1.z, R1, c[9];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[7].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R1, c[9].y;\n" + "MUL R2.xyz, R1, c[4].y;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[7];\n" + "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[9].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R2.w, -R1, c[4];\n" - "MUL R0.xyz, R0, c[8].y;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[4].w;\n" - "MUL R1.xyz, R1, c[8].z;\n" - "MAD result.color.xyz, R1, R2.x, R0;\n" + "MUL R3.xyz, R0.w, R2;\n" + "MUL R2.xyz, R0, c[4].x;\n" + "MAD R2.xyz, R1.w, R2, R3;\n" + "ADD R2.w, -R1, c[9].z;\n" + "MUL R0.xyz, R0, c[5].y;\n" + "MAD R0.xyz, R2.w, R0, R2;\n" + "ADD R2.x, -R0.w, c[9].z;\n" + "MUL R1.xyz, R1, c[5].z;\n" + "MAD result.color.xyz, R2.x, R1, R0;\n" "MUL R0.x, R0.w, R1.w;\n" "MUL R0.z, R1.w, R2.x;\n" "MUL R0.y, R0.w, R2.w;\n" - "DP3 result.color.w, R0, c[8];\n" + "DP3 result.color.w, R0, c[5];\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" - "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" + "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "ADD R2.x, -R1.w, c[4].w;\n" + "ADD R2.x, -R1.w, c[7].z;\n" "MUL R2.xyz, R0, R2.x;\n" "MAD R0.xyz, R0, R1, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].w;\n" + "ADD R2.y, -R0.w, c[7].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -3283,46 +3186,46 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" "FLR R0.y, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" @@ -3333,64 +3236,64 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 2 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[4];\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[5].y, c[5];\n" + "MAD R1.z, R1, R1.y, -c[5].w;\n" + "MAD R1.z, R1, R1.y, c[6].x;\n" + "MAD R1.z, R1, R1.y, -c[6].y;\n" + "MAD R1.y, R1.z, R1, c[6].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[6].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[7].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" + "MUL R1.xy, fragment.position, c[4];\n" + "TEX R1, R1, texture[0], 2D;\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[6].y;\n" + "ADD R2.w, -R1, c[7];\n" + "MUL R2.xyz, R2, c[7].z;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MAD R2.xyz, R0, R2.w, R2;\n" "MUL R3.xyz, R0, R2.w;\n" "MUL R0.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[4];\n" - "MAD R0.xyz, R0, c[6].y, R3;\n" + "ADD R2.w, -R0, c[7];\n" + "MAD R0.xyz, R0, c[7].z, R3;\n" "MAD R0.xyz, R1, R2.w, R0;\n" "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R1.xyz, R1, c[6].y;\n" + "MUL R1.xyz, R1, c[7].z;\n" "ADD R2.w, R0, R1;\n" "ADD R2.xyz, R2, -R0;\n" "SGE R1.xyz, R1, R1.w;\n" @@ -3401,57 +3304,57 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4];\n" + "ADD R2.w, -R1, c[7].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].w;\n" + "ADD R2.y, -R0.w, c[7].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -3459,57 +3362,57 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4];\n" + "ADD R2.w, -R1, c[7].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].w;\n" + "ADD R2.y, -R0.w, c[7].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -3517,59 +3420,59 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 1e-06 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[5].y, c[5];\n" + "MAD R1.z, R1, R1.y, -c[5].w;\n" + "MAD R1.z, R1, R1.y, c[6].x;\n" + "MAD R1.z, R1, R1.y, -c[6].y;\n" + "MAD R1.y, R1.z, R1, c[6].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[6].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[7].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MAX R1.x, R0.w, c[6].y;\n" + "MAX R1.x, R0.w, c[7].w;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[4].w;\n" - "MAX R2.xyz, R1, c[6].y;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MAD R1.xyz, -R0, R1.x, c[7].z;\n" + "MAX R2.xyz, R1, c[7].w;\n" + "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[4];\n" + "ADD R2.w, -R0, c[7].z;\n" "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[4];\n" + "ADD R2.w, -R1, c[7].z;\n" "MAD R3.xyz, R0, R2.w, R3;\n" - "MUL R1.xyz, R1, R0.w;\n" + "MUL R1.xyz, R0.w, R1;\n" "MAD R0.xyz, R0, R1.w, R1;\n" "MUL R2.w, R0, R1;\n" "RCP R2.x, R2.x;\n" @@ -3587,60 +3490,60 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 9.9999997e-06 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[4];\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[5].y, c[5];\n" + "MAD R1.z, R1, R1.y, -c[5].w;\n" + "MAD R1.z, R1, R1.y, c[6].x;\n" + "MAD R1.z, R1, R1.y, -c[6].y;\n" + "MAD R1.y, R1.z, R1, c[6].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[6].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[7].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" + "ADD R2.w, -R1, c[7].z;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[6].y;\n" + "MAX R2.xyz, R0, c[7].w;\n" "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[4];\n" + "ADD R3.w, -R0, c[7].z;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" "RCP R2.z, R2.z;\n" @@ -3659,64 +3562,64 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 2 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.0020000001, -0.01348047, 0.057477314, 0.12123907 },\n" + " { 0.19563593, 0.33299461, 0.99999565, 1.5707964 },\n" + " { 3.1415927, 0.15915494, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[4];\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5];\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[5].y, c[5];\n" + "MAD R1.z, R1, R1.y, -c[5].w;\n" + "MAD R1.z, R1, R1.y, c[6].x;\n" + "MAD R1.z, R1, R1.y, -c[6].y;\n" + "MAD R1.y, R1.z, R1, c[6].z;\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[6].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].x;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[7].y;\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" + "MUL R1.xy, fragment.position, c[4];\n" + "TEX R1, R1, texture[0], 2D;\n" + "ADD R2.w, -R1, c[7];\n" "ADD R3.xyz, R0.w, -R0;\n" "ADD R2.xyz, R1.w, -R1;\n" "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[6].y;\n" + "MUL R2.xyz, R2, c[7].z;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MUL R3.xyz, R0, R1;\n" "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.w, -R0, c[4];\n" - "MUL R0.xyz, R0, c[6].y;\n" + "ADD R2.w, -R0, c[7];\n" + "MUL R0.xyz, R0, c[7].z;\n" "MAD R2.xyz, R1, R2.w, R2;\n" - "MAD R3.xyz, R3, c[6].y, R4;\n" + "MAD R3.xyz, R3, c[7].z, R4;\n" "MAD R1.xyz, R1, R2.w, R3;\n" "ADD R2.w, R0, R1;\n" "ADD R2.xyz, R2, -R1;\n" @@ -3728,13 +3631,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 9.9999997e-06, 2, 8 },\n" - " program.local[7],\n" - " { 3 } };\n" + "PARAM c[9] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 1, 9.9999997e-006 },\n" + " { 2, 3, 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -3742,75 +3643,74 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MOV R1.x, c[4].y;\n" - "MUL R0.w, R0.z, R0.z;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" - "FLR R0.y, R0.x;\n" - "MAX R0.z, R1.w, c[6].y;\n" - "RCP R2.w, R0.z;\n" + "MAX R2.x, R1.w, c[7].w;\n" + "RCP R2.w, R2.x;\n" "MUL R2.xyz, R1, R2.w;\n" - "RSQ R3.w, R2.x;\n" - "RSQ R4.y, R2.z;\n" - "RCP R4.x, R3.w;\n" + "MAD R6.xyz, -R2, c[8].z, c[8].y;\n" + "MAD R3.xyz, -R1, R2.w, c[7].z;\n" + "RSQ R2.w, R2.x;\n" + "RCP R2.x, R2.w;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" + "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MAD R3.xyz, R0, c[6].z, -R0.w;\n" - "RSQ R3.w, R2.y;\n" - "RCP R4.z, R4.y;\n" - "RCP R4.y, R3.w;\n" - "MAD R4.xyz, R4, R1.w, -R1;\n" - "MUL R6.xyz, R4, R3;\n" - "MUL R4.xyz, -R2, c[6].w;\n" - "MAD R2.xyz, -R1, R2.w, c[4].w;\n" - "ADD R5.xyz, R4, c[8].x;\n" - "MUL R4.xyz, R2, R3;\n" - "MAD R4.xyz, -R4, R5, R0.w;\n" - "MAD R2.xyz, -R2, R3, R0.w;\n" - "MAD R5.xyz, R1, R0.w, R6;\n" - "MUL R4.xyz, R1, R4;\n" - "MUL R6.xyz, R1, c[6].w;\n" - "ADD R5.xyz, R5, -R4;\n" - "SGE R6.xyz, R6, R1.w;\n" - "MUL R5.xyz, R6, R5;\n" - "ADD R3.xyz, R4, R5;\n" - "MUL R2.xyz, R1, R2;\n" - "MUL R4.xyz, R0, c[6].z;\n" - "ADD R3.xyz, R3, -R2;\n" + "MAD R4.xyz, R0, c[8].x, -R0.w;\n" + "MUL R5.xyz, R3, R4;\n" + "MAD R5.xyz, -R5, R6, R0.w;\n" + "MAD R3.xyz, -R3, R4, R0.w;\n" + "RSQ R2.z, R2.z;\n" + "RSQ R2.y, R2.y;\n" + "MUL R5.xyz, R1, R5;\n" + "MUL R3.xyz, R1, R3;\n" + "RCP R2.z, R2.z;\n" + "RCP R2.y, R2.y;\n" + "MAD R2.xyz, R1.w, R2, -R1;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R0.w, R1, R2;\n" + "ADD R6.xyz, R2, -R5;\n" + "MUL R4.xyz, R0, c[8].x;\n" + "MUL R2.xyz, R1, c[8].z;\n" + "SGE R2.xyz, R2, R1.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" + "ADD R2.xyz, R2, -R3;\n" "SGE R4.xyz, R4, R0.w;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[4];\n" + "MAD R2.xyz, R4, R2, R3;\n" + "ADD R2.w, -R1, c[7].z;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].w;\n" + "ADD R2.y, -R0.w, c[7].z;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -3818,114 +3718,114 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 2 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 2 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" "FLR R0.y, R0.x;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "ADD R0.xyz, R0, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R1.x, R0.w, R1.w;\n" - "MAD result.color.xyz, -R2, c[6].y, R0;\n" + "MAD result.color.xyz, -R2, c[7].z, R0;\n" "MAD result.color.w, -R0, R1, R1.x;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494, 2 },\n" - " program.local[7] };\n" + "PARAM c[8] = { program.local[0..4],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565, 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[5].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[6].x, c[6].y;\n" + "MAD R1.z, R1, R1.y, -c[6];\n" + "MAD R1.z, R1, R1.y, c[6].w;\n" + "MAD R1.z, R1, R1.y, -c[7].x;\n" + "MAD R1.y, R1.z, R1, c[7];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[5].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[5].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[5];\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[6].y, R3;\n" - "ADD R2.w, -R1, c[4];\n" + "MAD R2.xyz, -R2, c[7].z, R3;\n" + "ADD R2.w, -R1, c[7];\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[4].w;\n" + "ADD R2.y, -R0.w, c[7].w;\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -3933,49 +3833,49 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK = "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 },\n" - " program.local[7..9] };\n" + "PARAM c[10] = { program.local[0..6],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565 } };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.y, R0.w;\n" - "RCP R1.x, R1.x;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.z, R0.x, R0.y, c[5].x;\n" - "MUL R1.x, R0.z, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[7].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[8].x, c[8].y;\n" + "MAD R1.z, R1, R1.y, -c[8];\n" + "MAD R1.z, R1, R1.y, c[8].w;\n" + "MAD R1.z, R1, R1.y, -c[9].x;\n" + "MAD R1.y, R1.z, R1, c[9];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R1.y, -R1.x, c[7].w;\n" + "ADD R0.z, -R0, R0.w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[7].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.z, R0.x, c[0].x;\n" + "MUL R1.x, R0.z, c[7];\n" "FLR R1.y, R1.x;\n" - "ADD R0.xy, fragment.position, c[7];\n" - "MUL R0.xy, R0, c[8];\n" + "ADD R0.xy, fragment.position, c[5];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R1.x, R1, -R1.y;\n" - "DP4 R1.y, R0, c[9];\n" + "DP4 R1.y, R0, c[6];\n" "TEX R0, R1, texture[1], 1D;\n" "MUL result.color, R0, R1.y;\n" "END\n" @@ -3983,42 +3883,43 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK = "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..2],\n" - " { 0.0020000001, 9.9999997e-10, 0.1963, 0.9817 },\n" - " { 2.3561945, 0.78539819, -1, 1 },\n" - " program.local[5],\n" - " { 0.15915494 } };\n" + "PARAM c[7] = { program.local[0..3],\n" + " { 0.15915494, 0.0020000001, 3.1415927, 1.5707964 },\n" + " { -0.01348047, 0.057477314, 0.12123907, 0.19563593 },\n" + " { 0.33299461, 0.99999565 } };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "ABS R0.w, R0.x;\n" - "ABS R0.z, R0.y;\n" - "ADD R0.z, R0, -R0.w;\n" - "ADD R0.w, R0.y, c[3].x;\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R0.w;\n" - "ABS R0.z, -R0.y;\n" - "ADD R0.z, R0, c[3].y;\n" - "ADD R0.w, R0.x, R0.z;\n" - "ADD R1.x, R0.z, -R0;\n" - "RCP R1.x, R1.x;\n" - "RCP R1.y, R0.w;\n" - "MUL R0.w, R0, R1.x;\n" - "ADD R0.z, R0.x, -R0;\n" - "MUL R0.z, R0, R1.y;\n" - "CMP R0.z, R0.x, R0.w, R0;\n" - "MUL R0.w, R0.z, R0.z;\n" - "MOV R1.x, c[4].y;\n" - "CMP R0.y, -R0, c[4].z, c[4].w;\n" - "MAD R0.w, R0, c[3].z, -c[3];\n" - "CMP R0.x, R0, c[4], R1;\n" - "MAD R0.x, R0.w, R0.z, R0;\n" - "MAD R0.x, R0, R0.y, c[5];\n" - "MUL R0.x, R0, c[6];\n" + "ABS R0.z, R0.x;\n" + "ABS R0.w, R0.y;\n" + "ADD R0.w, R0, -R0.z;\n" + "ADD R1.x, R0.y, c[4].y;\n" + "ABS R0.w, R0;\n" + "CMP R0.y, -R0.w, R0, R1.x;\n" + "ABS R0.w, -R0.y;\n" + "MAX R1.x, R0.z, R0.w;\n" + "RCP R1.y, R1.x;\n" + "MIN R1.x, R0.z, R0.w;\n" + "MUL R1.x, R1, R1.y;\n" + "MUL R1.y, R1.x, R1.x;\n" + "MAD R1.z, R1.y, c[5].x, c[5].y;\n" + "MAD R1.z, R1, R1.y, -c[5];\n" + "MAD R1.z, R1, R1.y, c[5].w;\n" + "MAD R1.z, R1, R1.y, -c[6].x;\n" + "MAD R1.y, R1.z, R1, c[6];\n" + "MUL R1.x, R1.y, R1;\n" + "ADD R0.z, -R0, R0.w;\n" + "ADD R1.y, -R1.x, c[4].w;\n" + "CMP R0.z, -R0, R1.y, R1.x;\n" + "ADD R0.w, -R0.z, c[4].z;\n" + "CMP R0.x, R0, R0.w, R0.z;\n" + "CMP R0.x, -R0.y, -R0, R0;\n" + "ADD R0.x, R0, c[0];\n" + "MUL R0.x, R0, c[4];\n" "FLR R0.y, R0.x;\n" "ADD R0.x, R0, -R0.y;\n" "TEX result.color, R0, texture[0], 1D;\n" @@ -4027,45 +3928,43 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..7],\n" - " { 1 },\n" - " program.local[9..10] };\n" + "PARAM c[11] = { program.local[0..9],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[6].z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, c[10].y;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[10].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "MUL R0.xyz, R0, c[9].y;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "MUL R0.xyz, R1, c[9].z;\n" - "ADD R2.w, -R0, c[8].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.y, -R1.w, c[8].x;\n" - "MUL R0.z, R1.w, R2.w;\n" - "MUL R0.x, R0.w, R1.w;\n" - "MUL R0.y, R0.w, R0;\n" - "DP3 R2.w, R0, c[9];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.zw, R0.xyxy, c[0].xyxy;\n" + "ADD R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[7];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.x, R1, c[0].z;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R0, c[4].y;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[4].x;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R3.xy, fragment.position, c[8];\n" + "ADD R2.w, -R0, c[10].x;\n" + "MUL R1.xyz, R1, c[5].y;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.xyz, R0, c[5].z;\n" + "ADD R3.z, -R1.w, c[10].x;\n" + "MAD R2.xyz, R3.z, R1, R2;\n" + "MUL R1.y, R1.w, R2.w;\n" + "MUL R1.x, R1.w, R0.w;\n" + "MUL R1.z, R0.w, R3;\n" + "DP3 R2.w, R1, c[5];\n" + "MUL R3.xy, R3, c[6];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[9];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -4076,30 +3975,30 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[6].z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2.x, -R1.w, c[8];\n" - "MUL R2.xyz, R0, R2.x;\n" - "MAD R0.xyz, R0, R1, R2;\n" + "MUL R0.zw, R0.xyxy, c[0].xyxy;\n" + "ADD R1.x, R0.z, R0.w;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.x, R1, c[0].z;\n" + "TEX R1, R1, texture[2], 1D;\n" "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R2.xyz, R1, R2.x;\n" + "MAD R1.xyz, R1, R0, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -4110,25 +4009,25 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "ADD R3.xy, fragment.position, c[0];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R2, R0, R1;\n" - "MAD R2, -R0, R1, R2;\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.z, R0.x, c[0];\n" + "ADD R3.xy, fragment.position, c[6];\n" + "TEX R1, R0.z, texture[2], 1D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R2, R1, R0;\n" + "MAD R2, -R1, R0, R2;\n" + "MUL R3.xy, R3, c[4];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -4141,16 +4040,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[2], 1D;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R1, c[8].y;\n" "ADD R3.xyz, R0.w, -R0;\n" @@ -4171,11 +4070,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MAD R2.xyz, R2, R0, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -4188,32 +4087,32 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.xy, R0, c[0];\n" + "ADD R0.z, R0.x, R0.y;\n" + "MUL R1.x, R0.z, c[0].z;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -4225,64 +4124,64 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.xy, R0, c[0];\n" + "ADD R0.z, R0.x, R0.y;\n" + "MUL R1.x, R0.z, c[0].z;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[2], 1D;\n" "MAX R1.x, R0.w, c[8].y;\n" "RCP R1.x, R1.x;\n" "MAD R2.xyz, -R0, R1.x, c[8].x;\n" "MAX R2.xyz, R2, c[8].y;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R0, c[8].x;\n" "MUL R3.xyz, R1, R2.w;\n" "ADD R2.w, -R1, c[8].x;\n" "MAD R4.xyz, R0, R2.w, R3;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MUL R2.w, R0, R1;\n" "MAD R0.xyz, R0, R1.w, R3;\n" "SGE R0.xyz, R0, R2.w;\n" @@ -4295,11 +4194,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MAD R2.xyz, R0, R4, R2;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -4307,25 +4206,25 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[2], 1D;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" @@ -4340,18 +4239,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MUL R4.xyz, R1, R3.w;\n" "MAD R0.xyz, R0, R2.w, R4;\n" "MUL R2.w, R0, R1;\n" - "ADD R3.w, -R0, c[8].x;\n" "MAD R2.xyz, R1, R3.w, R2;\n" "ADD R2.xyz, R2, -R0;\n" "SGE R3.xyz, R3, R2.w;\n" "MAD R2.xyz, R3, R2, R0;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -4365,16 +4263,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[2], 1D;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R1, c[8].y;\n" "ADD R3.xyz, R0.w, -R0;\n" @@ -4395,11 +4293,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MAD R2.xyz, R0, R2, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -4407,8 +4305,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" "PARAM c[10] = { program.local[0..7],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -4416,60 +4314,58 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R2.xyz, fragment.position.y, c[4];\n" - "MAD R3.xyz, fragment.position.x, c[3], R2;\n" - "MUL R0.xy, fragment.position, c[7];\n" - "TEX R1, R0, texture[0], 2D;\n" - "MAX R0.x, R1.w, c[8].y;\n" - "RCP R2.w, R0.x;\n" - "MUL R0.xyz, R1, R2.w;\n" - "RSQ R0.w, R0.x;\n" - "RSQ R2.y, R0.y;\n" - "ADD R3.xyz, R3, c[5];\n" - "RCP R2.x, R0.w;\n" - "RCP R0.w, R3.z;\n" - "MUL R3.xy, R3, R0.w;\n" - "RSQ R0.w, R0.z;\n" - "RCP R2.z, R0.w;\n" + "MUL R2.xyz, fragment.position.y, c[2];\n" + "MAD R3.xyz, fragment.position.x, c[1], R2;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MAX R1.x, R0.w, c[8].y;\n" + "RCP R2.w, R1.x;\n" + "MUL R1.xyz, R0, R2.w;\n" + "RSQ R1.w, R1.x;\n" + "RSQ R2.y, R1.y;\n" + "ADD R3.xyz, R3, c[3];\n" + "RCP R2.x, R1.w;\n" + "RCP R1.w, R3.z;\n" + "MUL R3.xy, R3, R1.w;\n" + "RSQ R1.w, R1.z;\n" + "RCP R2.z, R1.w;\n" "RCP R2.y, R2.y;\n" - "MAD R6.xyz, R2, R1.w, -R1;\n" - "MUL R2.xyz, -R0, c[8].w;\n" - "ADD R5.xyz, R2, c[9].x;\n" - "MAD R2.xyz, -R1, R2.w, c[8].x;\n" - "MUL R3.xy, R3, c[6];\n" - "ADD R0.w, R3.x, R3.y;\n" - "MUL R0.w, R0, c[6].z;\n" - "TEX R0, R0.w, texture[2], 1D;\n" - "MAD R3.xyz, R0, c[8].z, -R0.w;\n" + "MAD R6.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, -R1, c[9].x;\n" + "ADD R5.xyz, R2, c[8].w;\n" + "MAD R2.xyz, -R0, R2.w, c[8].x;\n" + "MUL R3.xy, R3, c[0];\n" + "ADD R1.w, R3.x, R3.y;\n" + "MUL R1.w, R1, c[0].z;\n" + "TEX R1, R1.w, texture[2], 1D;\n" + "MAD R3.xyz, R1, c[8].z, -R1.w;\n" "MUL R4.xyz, R2, R3;\n" - "MAD R4.xyz, -R4, R5, R0.w;\n" + "MAD R4.xyz, -R4, R5, R1.w;\n" + "MAD R2.xyz, -R2, R3, R1.w;\n" "MUL R5.xyz, R6, R3;\n" - "MAD R2.xyz, -R2, R3, R0.w;\n" - "MAD R6.xyz, R1, R0.w, R5;\n" - "MUL R4.xyz, R1, R4;\n" - "MUL R5.xyz, R1, c[8].w;\n" - "ADD R6.xyz, R6, -R4;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R3.xyz, R4, R5;\n" - "MUL R2.xyz, R1, R2;\n" - "MUL R4.xyz, R0, c[8].z;\n" + "MUL R4.xyz, R0, R4;\n" + "MAD R5.xyz, R1.w, R0, R5;\n" + "ADD R6.xyz, R5, -R4;\n" + "MUL R5.xyz, R0, c[9].x;\n" + "SGE R3.xyz, R5, R0.w;\n" + "MAD R3.xyz, R3, R6, R4;\n" + "MUL R2.xyz, R0, R2;\n" + "MUL R4.xyz, R1, c[8].z;\n" + "SGE R4.xyz, R4, R1.w;\n" "ADD R3.xyz, R3, -R2;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MAD R2.xyz, R4, R3, R2;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -4481,106 +4377,104 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[6].z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "ADD R3.xyz, R0, R1;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MUL R0.xyz, R0, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "MAD R2.xyz, -R0, c[8].x, R3;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, R0, c[0];\n" + "ADD R0.z, R0.x, R0.y;\n" + "MUL R1.x, R0.z, c[0].z;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "ADD R2.xyz, R1, R0;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R1.xyz, R1, R0.w;\n" + "MIN R1.xyz, R1, R3;\n" + "MAD R2.xyz, -R1, c[8].x, R2;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[6].z;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[8].y, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, R0, c[0];\n" + "ADD R0.z, R0.x, R0.y;\n" + "MUL R1.x, R0.z, c[0].z;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 1D;\n" + "MUL R2.xyz, R1.w, R0;\n" + "MAD R3.xyz, R1, R0.w, R2;\n" + "MUL R2.xyz, R1, R0;\n" + "MAD R2.xyz, -R2, c[8].x, R3;\n" + "ADD R2.w, -R0, c[8].y;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8].y;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 1 },\n" - " program.local[6..7] };\n" + "PARAM c[8] = { program.local[0..6],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R1, c[7].y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R2.xyz, R1, c[4].y;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[7].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "MUL R0.xyz, R0, c[6].y;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[5];\n" - "MUL R1.xyz, R1, c[6].z;\n" - "MAD result.color.xyz, R1, R2.x, R0;\n" - "ADD R0.y, -R1.w, c[5].x;\n" + "MUL R3.xyz, R0.w, R2;\n" + "MUL R2.xyz, R0, c[4].x;\n" + "MAD R2.xyz, R1.w, R2, R3;\n" + "ADD R2.w, -R1, c[7].x;\n" + "MUL R0.xyz, R0, c[5].y;\n" + "MAD R0.xyz, R2.w, R0, R2;\n" + "ADD R2.x, -R0.w, c[7];\n" + "MUL R1.xyz, R1, c[5].z;\n" + "MAD result.color.xyz, R2.x, R1, R0;\n" "MUL R0.x, R0.w, R1.w;\n" "MUL R0.z, R1.w, R2.x;\n" - "MUL R0.y, R0.w, R0;\n" - "DP3 result.color.w, R0, c[6];\n" + "MUL R0.y, R0.w, R2.w;\n" + "DP3 result.color.w, R0, c[5];\n" "END\n" ; @@ -4591,16 +4485,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "ADD R2.x, -R1.w, c[5];\n" "MUL R2.xyz, R0, R2.x;\n" @@ -4618,16 +4512,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "ADD R2, R0, R1;\n" "MAD result.color, -R0, R1, R2;\n" @@ -4642,14 +4536,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" @@ -4683,19 +4577,19 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" @@ -4714,19 +4608,19 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MAX R2.xyz, R2, R3;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" @@ -4740,19 +4634,19 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "MAX R1.x, R0.w, c[5].y;\n" "RCP R1.x, R1.x;\n" @@ -4764,7 +4658,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MUL R2.xyz, R1, R2.x;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R2.xyz, R0, R2.w, R2;\n" - "MUL R1.xyz, R1, R0.w;\n" + "MUL R1.xyz, R0.w, R1;\n" "MAD R0.xyz, R0, R1.w, R1;\n" "MUL R2.w, R0, R1;\n" "RCP R3.x, R3.x;\n" @@ -4783,25 +4677,25 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" @@ -4814,9 +4708,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "RCP R2.z, R2.z;\n" "MAD R2.xyz, R4, R2, R5;\n" "MUL R4.xyz, R1, R3.w;\n" - "MAD R0.xyz, R0, R2.w, R4;\n" - "ADD R3.w, -R0, c[5].x;\n" "MAD R1.xyz, R1, R3.w, R2;\n" + "MAD R0.xyz, R0, R2.w, R4;\n" "MUL R2.x, R0.w, R1.w;\n" "ADD R2.w, R0, R1;\n" "ADD R1.xyz, R1, -R0;\n" @@ -4835,14 +4728,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" @@ -4871,8 +4764,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" "PARAM c[7] = { program.local[0..4],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -4880,8 +4773,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R2.xyz, fragment.position.y, c[1];\n" - "MAD R3.xyz, fragment.position.x, c[0], R2;\n" + "MUL R2.xyz, fragment.position.y, c[2];\n" + "MAD R3.xyz, fragment.position.x, c[1], R2;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R1, R0, texture[0], 2D;\n" "MAX R0.x, R1.w, c[5].y;\n" @@ -4889,39 +4782,37 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "MUL R0.xyz, R1, R2.w;\n" "RSQ R0.w, R0.x;\n" "RSQ R2.y, R0.y;\n" - "ADD R3.xyz, R3, c[2];\n" + "ADD R3.xyz, R3, c[3];\n" "RCP R2.x, R0.w;\n" "RCP R0.w, R3.z;\n" "MUL R3.xy, R3, R0.w;\n" "RSQ R0.w, R0.z;\n" "RCP R2.z, R0.w;\n" "RCP R2.y, R2.y;\n" - "MAD R6.xyz, R2, R1.w, -R1;\n" - "MUL R2.xyz, -R0, c[5].w;\n" - "ADD R5.xyz, R2, c[6].x;\n" + "MAD R6.xyz, R1.w, R2, -R1;\n" + "MUL R2.xyz, -R0, c[6].x;\n" + "ADD R5.xyz, R2, c[5].w;\n" "MAD R2.xyz, -R1, R2.w, c[5].x;\n" - "MUL R3.xy, R3, c[3];\n" + "MUL R3.xy, R3, c[0];\n" "ADD R0.w, R3.x, R3.y;\n" - "MUL R0.w, R0, c[3].z;\n" + "MUL R0.w, R0, c[0].z;\n" "TEX R0, R0.w, texture[1], 1D;\n" "MAD R3.xyz, R0, c[5].z, -R0.w;\n" "MUL R4.xyz, R2, R3;\n" "MAD R4.xyz, -R4, R5, R0.w;\n" "MUL R5.xyz, R6, R3;\n" "MAD R2.xyz, -R2, R3, R0.w;\n" - "MAD R6.xyz, R1, R0.w, R5;\n" "MUL R4.xyz, R1, R4;\n" - "MUL R5.xyz, R1, c[5].w;\n" - "ADD R6.xyz, R6, -R4;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R3.xyz, R4, R5;\n" + "MAD R5.xyz, R0.w, R1, R5;\n" + "ADD R6.xyz, R5, -R4;\n" + "MUL R5.xyz, R1, c[6].x;\n" + "SGE R3.xyz, R5, R1.w;\n" + "MAD R3.xyz, R3, R6, R4;\n" "MUL R2.xyz, R1, R2;\n" "MUL R4.xyz, R0, c[5].z;\n" "ADD R3.xyz, R3, -R2;\n" "SGE R4.xyz, R4, R0.w;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, R2, R3;\n" + "MAD R2.xyz, R4, R3, R2;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" @@ -4939,19 +4830,19 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" - "MUL R1.xy, fragment.position, c[4];\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" - "TEX R1, R1, texture[0], 2D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "ADD R0.xyz, R0, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R1.x, R0.w, R1.w;\n" @@ -4963,30 +4854,30 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[5].y, R3;\n" - "ADD R2.w, -R1, c[5].x;\n" + "MAD R2.xyz, -R2, c[5].x, R3;\n" + "ADD R2.w, -R1, c[5].y;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" + "ADD R2.y, -R0.w, c[5];\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -4997,18 +4888,18 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "PARAM c[7] = { program.local[0..6] };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.z;\n" - "MUL R0.zw, R0, c[3].xyxy;\n" + "MUL R0.zw, R0, c[0].xyxy;\n" "ADD R1.x, R0.z, R0.w;\n" - "ADD R0.xy, fragment.position, c[4];\n" - "MUL R0.xy, R0, c[5];\n" + "ADD R0.xy, fragment.position, c[5];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "DP4 R1.y, R0, c[6];\n" - "MUL R1.x, R1, c[3].z;\n" + "MUL R1.x, R1, c[0].z;\n" "TEX R0, R1, texture[1], 1D;\n" "MUL result.color, R0, R1.y;\n" "END\n" @@ -5018,58 +4909,55 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MOD "!!ARBfp1.0\n" "PARAM c[4] = { program.local[0..3] };\n" "TEMP R0;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[3].z;\n" + "MUL R0.x, R0, c[0].z;\n" "TEX result.color, R0, texture[0], 1D;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..7],\n" - " { 1 },\n" - " program.local[9..10] };\n" + "PARAM c[11] = { program.local[0..9],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" - "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" - "TEX R0, R0, texture[2], 2D;\n" - "MUL R2.xyz, R1, c[10].y;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[10].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "MUL R0.xyz, R0, c[9].y;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.w, -R0, c[8].x;\n" - "MUL R0.xyz, R1, c[9].z;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.y, -R1.w, c[8].x;\n" - "MUL R0.z, R1.w, R2.w;\n" - "MUL R0.x, R0.w, R1.w;\n" - "MUL R0.y, R0.w, R0;\n" - "DP3 R2.w, R0, c[9];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" + "RCP R0.z, R1.z;\n" + "MUL R1.xy, R1, R0.z;\n" + "MUL R0.xy, fragment.position, c[7];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[2], 2D;\n" + "MUL R2.xyz, R0, c[4].y;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[4].x;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R3.xy, fragment.position, c[8];\n" + "ADD R2.w, -R0, c[10].x;\n" + "MUL R1.xyz, R1, c[5].y;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.xyz, R0, c[5].z;\n" + "ADD R3.z, -R1.w, c[10].x;\n" + "MAD R2.xyz, R3.z, R1, R2;\n" + "MUL R1.y, R1.w, R2.w;\n" + "MUL R1.x, R1.w, R0.w;\n" + "MUL R1.z, R0.w, R3;\n" + "DP3 R2.w, R1, c[5];\n" + "MUL R3.xy, R3, c[6];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[9];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -5080,29 +4968,28 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" - "RCP R1.x, R0.z;\n" - "MUL R0.xy, R0, R1.x;\n" - "MUL R0.xy, R0, c[6];\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" - "TEX R0, R0, texture[2], 2D;\n" - "ADD R2.x, -R1.w, c[8];\n" - "MUL R2.xyz, R0, R2.x;\n" - "MAD R0.xyz, R0, R1, R2;\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" + "RCP R0.z, R1.z;\n" + "MUL R1.xy, R1, R0.z;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R1, R1, texture[2], 2D;\n" "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R2.xyz, R1, R2.x;\n" + "MAD R1.xyz, R1, R0, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -5113,24 +5000,23 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "ADD R3.xy, fragment.position, c[0];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 2D;\n" - "ADD R2, R0, R1;\n" - "MAD R2, -R0, R1, R2;\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.zw, R0.xyxy, c[0].xyxy;\n" + "ADD R3.xy, fragment.position, c[6];\n" + "TEX R1, R0.zwzw, texture[2], 2D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "ADD R2, R1, R0;\n" + "MAD R2, -R1, R0, R2;\n" + "MUL R3.xy, R3, c[4];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -5143,15 +5029,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R1, c[8].y;\n" "ADD R3.xyz, R0.w, -R0;\n" @@ -5172,11 +5057,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "MAD R2.xyz, R2, R0, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -5189,31 +5074,30 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 2D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 2D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -5225,62 +5109,60 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 2D;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 2D;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[2], 2D;\n" "MAX R1.x, R0.w, c[8].y;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[8].x;\n" - "MAX R2.xyz, R1, c[8].y;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MAD R2.xyz, -R0, R1.x, c[8].x;\n" + "MAX R2.xyz, R2, c[8].y;\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R0, c[8].x;\n" "MUL R3.xyz, R1, R2.w;\n" "ADD R2.w, -R1, c[8].x;\n" "MAD R4.xyz, R0, R2.w, R3;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MUL R2.w, R0, R1;\n" "MAD R0.xyz, R0, R1.w, R3;\n" "SGE R0.xyz, R0, R2.w;\n" @@ -5293,11 +5175,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "MAD R2.xyz, R0, R4, R2;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -5305,24 +5187,23 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" "MUL R4.xyz, R0.w, R2;\n" @@ -5337,18 +5218,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "MUL R4.xyz, R1, R3.w;\n" "MAD R0.xyz, R0, R2.w, R4;\n" "MUL R2.w, R0, R1;\n" - "ADD R3.w, -R0, c[8].x;\n" "MAD R2.xyz, R1, R3.w, R2;\n" "ADD R2.xyz, R2, -R0;\n" "SGE R3.xyz, R3, R2.w;\n" "MAD R2.xyz, R3, R2, R0;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -5362,15 +5242,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" + "MUL R1.xy, fragment.position, c[5];\n" "TEX R1, R1, texture[0], 2D;\n" "ADD R2.w, -R1, c[8].y;\n" "ADD R3.xyz, R0.w, -R0;\n" @@ -5391,11 +5270,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "MAD R2.xyz, R0, R2, R3;\n" "ADD R0.z, R0.w, R1.w;\n" "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" + "ADD R0.xy, fragment.position, c[6];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" + "DP4 R0.x, R0, c[7];\n" "MAD result.color, R0.x, R2, R1;\n" "END\n" ; @@ -5403,8 +5282,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" "PARAM c[10] = { program.local[0..7],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -5412,59 +5291,56 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" - "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MAX R0.z, R1.w, c[8].y;\n" - "RCP R2.w, R0.z;\n" - "MUL R2.xyz, R1, R2.w;\n" - "MUL R6.xyz, -R2, c[8].w;\n" - "MAD R3.xyz, -R1, R2.w, c[8].x;\n" - "MOV R0.y, -R0;\n" - "TEX R0, R0, texture[2], 2D;\n" - "MAD R4.xyz, R0, c[8].z, -R0.w;\n" - "MUL R5.xyz, R3, R4;\n" - "MAD R3.xyz, -R3, R4, R0.w;\n" - "ADD R6.xyz, R6, c[9].x;\n" - "RSQ R2.x, R2.x;\n" - "RSQ R2.z, R2.z;\n" - "RSQ R2.y, R2.y;\n" - "MAD R5.xyz, -R5, R6, R0.w;\n" - "MUL R3.xyz, R1, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "RCP R2.x, R2.x;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MAX R1.x, R0.w, c[8].y;\n" + "RCP R2.w, R1.x;\n" + "MUL R1.xyz, R0, R2.w;\n" + "RSQ R1.w, R1.x;\n" + "RCP R2.x, R1.w;\n" + "RSQ R1.w, R1.y;\n" + "RSQ R2.z, R1.z;\n" + "MUL R3.xyz, fragment.position.y, c[2];\n" + "MAD R3.xyz, fragment.position.x, c[1], R3;\n" + "ADD R3.xyz, R3, c[3];\n" + "RCP R2.y, R1.w;\n" + "RCP R1.w, R3.z;\n" + "MUL R3.xy, R3, R1.w;\n" "RCP R2.z, R2.z;\n" - "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R1.w, -R1;\n" - "MUL R6.xyz, R2, R4;\n" - "MUL R2.xyz, R1, R5;\n" - "MAD R6.xyz, R1, R0.w, R6;\n" - "MUL R4.xyz, R0, c[8].z;\n" - "MUL R5.xyz, R1, c[8].w;\n" - "ADD R6.xyz, R6, -R2;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R2.xyz, R2, R5;\n" - "SGE R4.xyz, R4, R0.w;\n" - "ADD R2.xyz, R2, -R3;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MAD R6.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, -R1, c[9].x;\n" + "ADD R5.xyz, R2, c[8].w;\n" + "MAD R2.xyz, -R0, R2.w, c[8].x;\n" + "MUL R3.xy, R3, c[0];\n" + "TEX R1, R3, texture[2], 2D;\n" + "MAD R3.xyz, R1, c[8].z, -R1.w;\n" + "MUL R4.xyz, R2, R3;\n" + "MAD R4.xyz, -R4, R5, R1.w;\n" + "MAD R2.xyz, -R2, R3, R1.w;\n" + "MUL R5.xyz, R6, R3;\n" + "MUL R4.xyz, R0, R4;\n" + "MAD R5.xyz, R1.w, R0, R5;\n" + "ADD R6.xyz, R5, -R4;\n" + "MUL R5.xyz, R0, c[9].x;\n" + "SGE R3.xyz, R5, R0.w;\n" + "MAD R3.xyz, R3, R6, R4;\n" + "MUL R2.xyz, R0, R2;\n" + "MUL R4.xyz, R1, c[8].z;\n" + "SGE R4.xyz, R4, R1.w;\n" + "ADD R3.xyz, R3, -R2;\n" + "MAD R2.xyz, R4, R3, R2;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -5476,103 +5352,98 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" - "TEX R0, R0, texture[2], 2D;\n" - "ADD R3.xyz, R0, R1;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MUL R0.xyz, R0, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "MAD R2.xyz, -R0, c[8].x, R3;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 2D;\n" + "ADD R2.xyz, R1, R0;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R1.xyz, R1, R0.w;\n" + "MIN R1.xyz, R1, R3;\n" + "MAD R2.xyz, -R1, c[8].x, R2;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "TEX R0, R0, texture[2], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[8].y, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1, R1, texture[2], 2D;\n" + "MUL R2.xyz, R1.w, R0;\n" + "MAD R3.xyz, R1, R0.w, R2;\n" + "MUL R2.xyz, R1, R0;\n" + "MAD R2.xyz, -R2, c[8].x, R3;\n" + "ADD R2.w, -R0, c[8].y;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8].y;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 1 },\n" - " program.local[6..7] };\n" + "PARAM c[8] = { program.local[0..6],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" - "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" + "RCP R1.x, R0.z;\n" + "MUL R0.xy, R0, R1.x;\n" + "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R1, c[7].y;\n" - "MOV R0.y, -R0;\n" + "MUL R2.xyz, R1, c[4].y;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[7].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "MUL R0.xyz, R0, c[6].y;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[5];\n" - "MUL R1.xyz, R1, c[6].z;\n" - "MAD result.color.xyz, R1, R2.x, R0;\n" - "ADD R0.y, -R1.w, c[5].x;\n" + "MUL R3.xyz, R0.w, R2;\n" + "MUL R2.xyz, R0, c[4].x;\n" + "MAD R2.xyz, R1.w, R2, R3;\n" + "ADD R2.w, -R1, c[7].x;\n" + "MUL R0.xyz, R0, c[5].y;\n" + "MAD R0.xyz, R2.w, R0, R2;\n" + "ADD R2.x, -R0.w, c[7];\n" + "MUL R1.xyz, R1, c[5].z;\n" + "MAD result.color.xyz, R2.x, R1, R0;\n" "MUL R0.x, R0.w, R1.w;\n" "MUL R0.z, R1.w, R2.x;\n" - "MUL R0.y, R0.w, R0;\n" - "DP3 result.color.w, R0, c[6];\n" + "MUL R0.y, R0.w, R2.w;\n" + "DP3 result.color.w, R0, c[5];\n" "END\n" ; @@ -5583,15 +5454,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R1.x, R0.z;\n" "MUL R0.xy, R0, R1.x;\n" - "MUL R0.xy, R0, c[3];\n" "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2.x, -R1.w, c[5];\n" "MUL R2.xyz, R0, R2.x;\n" @@ -5609,15 +5479,14 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "ADD R2, R0, R1;\n" "MAD result.color, -R0, R1, R2;\n" @@ -5632,13 +5501,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" @@ -5672,18 +5540,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" @@ -5702,18 +5569,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "MAX R2.xyz, R2, R3;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" @@ -5727,41 +5593,40 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "MAX R1.x, R0.w, c[5].y;\n" "RCP R1.x, R1.x;\n" - "MAD R1.xyz, -R0, R1.x, c[5].x;\n" - "MAX R2.xyz, R1, c[5].y;\n" + "MAD R3.xyz, -R0, R1.x, c[5].x;\n" + "MAX R3.xyz, R3, c[5].y;\n" "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[5].x;\n" - "MUL R3.xyz, R1, R2.w;\n" + "ADD R2.x, -R0.w, c[5];\n" + "MUL R2.xyz, R1, R2.x;\n" "ADD R2.w, -R1, c[5].x;\n" - "MAD R3.xyz, R0, R2.w, R3;\n" - "MUL R1.xyz, R1, R0.w;\n" + "MAD R2.xyz, R0, R2.w, R2;\n" + "MUL R1.xyz, R0.w, R1;\n" "MAD R0.xyz, R0, R1.w, R1;\n" "MUL R2.w, R0, R1;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R1, R2, R3;\n" - "MAD R3.xyz, R0.w, R1.w, R3;\n" + "RCP R3.x, R3.x;\n" + "RCP R3.y, R3.y;\n" + "RCP R3.z, R3.z;\n" + "MAD R3.xyz, R1, R3, R2;\n" + "MAD R2.xyz, R0.w, R1.w, R2;\n" "ADD R1.x, R0.w, R1.w;\n" - "ADD R3.xyz, R3, -R2;\n" + "ADD R2.xyz, R2, -R3;\n" "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R3, R2;\n" + "MAD result.color.xyz, R0, R2, R3;\n" "MAD result.color.w, -R0, R1, R1.x;\n" "END\n" ; @@ -5769,24 +5634,23 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R2.xyz, -R0.w, R1.w, R3;\n" @@ -5799,9 +5663,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "RCP R2.z, R2.z;\n" "MAD R2.xyz, R4, R2, R5;\n" "MUL R4.xyz, R1, R3.w;\n" - "MAD R0.xyz, R0, R2.w, R4;\n" - "ADD R3.w, -R0, c[5].x;\n" "MAD R1.xyz, R1, R3.w, R2;\n" + "MAD R0.xyz, R0, R2.w, R4;\n" "MUL R2.x, R0.w, R1.w;\n" "ADD R2.w, R0, R1;\n" "ADD R1.xyz, R1, -R0;\n" @@ -5820,13 +5683,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" "MUL R1.xy, fragment.position, c[4];\n" "TEX R1, R1, texture[0], 2D;\n" @@ -5836,27 +5698,27 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "MUL R2.xyz, R2, R3;\n" "MUL R2.xyz, R2, c[5].x;\n" "MAD R2.xyz, R0.w, R1.w, -R2;\n" + "MAD R2.xyz, R0, R2.w, R2;\n" "MUL R4.xyz, R0, R2.w;\n" "MUL R3.xyz, R0, R1;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.w, -R0, c[5].y;\n" "MUL R0.xyz, R0, c[5].x;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" + "ADD R2.w, -R0, c[5].y;\n" "MAD R3.xyz, R3, c[5].x, R4;\n" - "MAD R1.xyz, R1, R2.w, R3;\n" - "ADD R2.w, R0, R1;\n" - "ADD R2.xyz, R2, -R1;\n" + "MAD R3.xyz, R1, R2.w, R3;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, R0.w, R1.w;\n" + "ADD R1.xyz, R1, -R3;\n" "SGE R0.xyz, R0, R0.w;\n" - "MAD result.color.xyz, R0, R2, R1;\n" - "MAD result.color.w, -R0, R1, R2;\n" + "MAD result.color.xyz, R0, R1, R3;\n" + "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" "PARAM c[7] = { program.local[0..4],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" @@ -5864,47 +5726,44 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R4;\n" "TEMP R5;\n" "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" - "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MAX R0.z, R1.w, c[5].y;\n" - "RCP R2.w, R0.z;\n" - "MUL R2.xyz, R1, R2.w;\n" - "MUL R6.xyz, -R2, c[5].w;\n" - "MAD R3.xyz, -R1, R2.w, c[5].x;\n" - "MOV R0.y, -R0;\n" - "TEX R0, R0, texture[1], 2D;\n" - "MAD R4.xyz, R0, c[5].z, -R0.w;\n" - "MUL R5.xyz, R3, R4;\n" - "MAD R3.xyz, -R3, R4, R0.w;\n" - "ADD R6.xyz, R6, c[6].x;\n" - "RSQ R2.x, R2.x;\n" - "RSQ R2.z, R2.z;\n" - "RSQ R2.y, R2.y;\n" - "MAD R5.xyz, -R5, R6, R0.w;\n" - "MUL R3.xyz, R1, R3;\n" - "RCP R2.x, R2.x;\n" + "MUL R0.xy, fragment.position, c[4];\n" + "TEX R1, R0, texture[0], 2D;\n" + "MAX R0.x, R1.w, c[5].y;\n" + "RCP R2.w, R0.x;\n" + "MUL R0.xyz, R1, R2.w;\n" + "RSQ R0.w, R0.x;\n" + "RCP R2.x, R0.w;\n" + "RSQ R0.w, R0.y;\n" + "RSQ R2.z, R0.z;\n" + "MUL R3.xyz, fragment.position.y, c[2];\n" + "MAD R3.xyz, fragment.position.x, c[1], R3;\n" + "ADD R3.xyz, R3, c[3];\n" + "RCP R2.y, R0.w;\n" + "RCP R0.w, R3.z;\n" + "MUL R3.xy, R3, R0.w;\n" "RCP R2.z, R2.z;\n" - "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R1.w, -R1;\n" - "MUL R6.xyz, R2, R4;\n" - "MUL R2.xyz, R1, R5;\n" + "MAD R6.xyz, R1.w, R2, -R1;\n" + "MUL R2.xyz, -R0, c[6].x;\n" + "ADD R5.xyz, R2, c[5].w;\n" + "MAD R2.xyz, -R1, R2.w, c[5].x;\n" + "MUL R3.xy, R3, c[0];\n" + "TEX R0, R3, texture[1], 2D;\n" + "MAD R3.xyz, R0, c[5].z, -R0.w;\n" + "MUL R4.xyz, R2, R3;\n" + "MAD R4.xyz, -R4, R5, R0.w;\n" + "MUL R5.xyz, R6, R3;\n" + "MAD R2.xyz, -R2, R3, R0.w;\n" + "MUL R4.xyz, R1, R4;\n" + "MAD R5.xyz, R0.w, R1, R5;\n" + "ADD R6.xyz, R5, -R4;\n" + "MUL R5.xyz, R1, c[6].x;\n" + "SGE R3.xyz, R5, R1.w;\n" + "MAD R3.xyz, R3, R6, R4;\n" + "MUL R2.xyz, R1, R2;\n" "MUL R4.xyz, R0, c[5].z;\n" - "MAD R6.xyz, R1, R0.w, R6;\n" - "MUL R5.xyz, R1, c[5].w;\n" - "ADD R6.xyz, R6, -R2;\n" - "SGE R5.xyz, R5, R1.w;\n" - "MUL R5.xyz, R5, R6;\n" - "ADD R2.xyz, R2, R5;\n" - "ADD R2.xyz, R2, -R3;\n" + "ADD R3.xyz, R3, -R2;\n" "SGE R4.xyz, R4, R0.w;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" + "MAD R2.xyz, R4, R3, R2;\n" "ADD R2.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" @@ -5922,18 +5781,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[4];\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" - "TEX R1, R1, texture[0], 2D;\n" "MUL R2.xyz, R0, R1.w;\n" - "MUL R3.xyz, R1, R0.w;\n" + "MUL R3.xyz, R0.w, R1;\n" "ADD R0.xyz, R0, R1;\n" "MIN R2.xyz, R2, R3;\n" "ADD R1.x, R0.w, R1.w;\n" @@ -5945,29 +5803,28 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" + "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" + "TEX R1, R0.zwzw, texture[0], 2D;\n" + "MUL R0.xy, R0, c[0];\n" "TEX R0, R0, texture[1], 2D;\n" - "MUL R2.xyz, R1, R0.w;\n" + "MUL R2.xyz, R0.w, R1;\n" "MAD R3.xyz, R0, R1.w, R2;\n" "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[5].y, R3;\n" - "ADD R2.w, -R1, c[5].x;\n" + "MAD R2.xyz, -R2, c[5].x, R3;\n" + "ADD R2.w, -R1, c[5].y;\n" "MAD R0.xyz, R0, R2.w, R2;\n" "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" + "ADD R2.y, -R0.w, c[5];\n" "MAD result.color.xyz, R1, R2.y, R0;\n" "MAD result.color.w, -R0, R1, R2.x;\n" "END\n" @@ -5978,19 +5835,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "PARAM c[7] = { program.local[0..6] };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R1.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" "RCP R0.z, R1.z;\n" "MUL R1.xy, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[4];\n" - "MUL R0.xy, R0, c[5];\n" + "ADD R0.xy, fragment.position, c[5];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "DP4 R1.z, R0, c[6];\n" - "MUL R1.xy, R1, c[3];\n" - "MOV R0.x, R1;\n" - "MOV R0.y, -R1;\n" - "TEX R0, R0, texture[1], 2D;\n" + "MUL R1.xy, R1, c[0];\n" + "TEX R0, R1, texture[1], 2D;\n" "MUL result.color, R0, R1.z;\n" "END\n" ; @@ -5999,58 +5854,55 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MO "!!ARBfp1.0\n" "PARAM c[4] = { program.local[0..3] };\n" "TEMP R0;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" + "MUL R0.xy, R0, c[0];\n" "TEX result.color, R0, texture[0], 2D;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..7],\n" - " { 1 },\n" - " program.local[9..10] };\n" + "PARAM c[11] = { program.local[0..9],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "MUL R2.xyz, R1, c[10].y;\n" - "MUL R3.xyz, R2, R0.w;\n" - "MUL R2.xyz, R0, c[10].x;\n" - "MAD R2.xyz, R2, R1.w, R3;\n" - "ADD R3.xy, fragment.position, c[0];\n" - "MUL R0.xyz, R0, c[9].y;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.w, -R0, c[8].x;\n" - "MUL R0.xyz, R1, c[9].z;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.y, -R1.w, c[8].x;\n" - "MUL R0.z, R1.w, R2.w;\n" - "MUL R0.x, R0.w, R1.w;\n" - "MUL R0.y, R0.w, R0;\n" - "DP3 R2.w, R0, c[9];\n" - "MUL R3.xy, R3, c[1];\n" - "TEX R0, R3, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MOV R1.y, -R1;\n" + "MUL R0.xy, fragment.position, c[7];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1.x, R1, texture[2], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "MUL R2.xyz, R0, c[4].y;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[4].x;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R3.xy, fragment.position, c[8];\n" + "ADD R2.w, -R0, c[10].x;\n" + "MUL R1.xyz, R1, c[5].y;\n" + "MAD R2.xyz, R2.w, R1, R2;\n" + "MUL R1.xyz, R0, c[5].z;\n" + "ADD R3.z, -R1.w, c[10].x;\n" + "MAD R2.xyz, R3.z, R1, R2;\n" + "MUL R1.y, R1.w, R2.w;\n" + "MUL R1.x, R1.w, R0.w;\n" + "MUL R1.z, R0.w, R3;\n" + "DP3 R2.w, R1, c[5];\n" + "MUL R3.xy, R3, c[6];\n" + "TEX R1, R3, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[9];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6061,30 +5913,30 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.y, -R0;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "ADD R2.x, -R1.w, c[8];\n" - "MUL R2.xyz, R0, R2.x;\n" - "MAD R0.xyz, R0, R1, R2;\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MOV R1.y, -R1;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "TEX R1.x, R1, texture[2], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R2.xyz, R1, R2.x;\n" + "MAD R1.xyz, R1, R0, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6095,24 +5947,24 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R1.x, R0, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[7];\n" - "ADD R3.xy, fragment.position, c[0];\n" + "MUL R0.xy, fragment.position, c[5];\n" + "ADD R3.xy, fragment.position, c[6];\n" "TEX R0, R0, texture[0], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" "ADD R2, R1, R0;\n" "MAD R2, -R1, R0, R2;\n" - "MUL R3.xy, R3, c[1];\n" + "MUL R3.xy, R3, c[4];\n" "TEX R1, R3, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6126,16 +5978,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R1.x, R0, texture[2], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, fragment.position, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R2.w, -R0, c[8].y;\n" "ADD R3.xyz, R1.w, -R1;\n" @@ -6156,11 +6008,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "MAD R2.xyz, R2, R1, R3;\n" "ADD R1.z, R1.w, R0.w;\n" "MAD R2.w, -R1, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6173,32 +6025,33 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[2], 2D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MIN R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6210,50 +6063,51 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[2], 2D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R2.xyz, R1, R0.w;\n" "MAX R2.xyz, R2, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "ADD R2.w, -R0, c[8].x;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8];\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R0.x, R0, texture[2], 2D;\n" "MUL R1, fragment.color.primary, R0.x;\n" @@ -6261,13 +6115,13 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "RCP R0.x, R0.x;\n" "MAD R0.xyz, -R1, R0.x, c[8].x;\n" "MAX R2.xyz, R0, c[8].y;\n" - "MUL R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, fragment.position, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R2.w, -R1, c[8].x;\n" "MUL R3.xyz, R0, R2.w;\n" "ADD R2.w, -R0, c[8].x;\n" "MAD R4.xyz, R1, R2.w, R3;\n" - "MUL R3.xyz, R0, R1.w;\n" + "MUL R3.xyz, R1.w, R0;\n" "MUL R2.w, R1, R0;\n" "MAD R1.xyz, R1, R0.w, R3;\n" "SGE R1.xyz, R1, R2.w;\n" @@ -6280,11 +6134,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "MAD R2.xyz, R1, R4, R2;\n" "ADD R1.z, R1.w, R0.w;\n" "MAD R2.w, -R1, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6292,25 +6146,26 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[2], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[2], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, fragment.position, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R2.xyz, R1.w, R0;\n" "MAD R3.xyz, R1, R0.w, R2;\n" "MAD R2.xyz, -R1.w, R0.w, R3;\n" "MUL R4.xyz, R1.w, R2;\n" @@ -6325,18 +6180,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "MUL R4.xyz, R0, R3.w;\n" "MAD R1.xyz, R1, R2.w, R4;\n" "MUL R2.w, R1, R0;\n" - "ADD R3.w, -R1, c[8].x;\n" "MAD R2.xyz, R0, R3.w, R2;\n" "ADD R2.xyz, R2, -R1;\n" "SGE R3.xyz, R3, R2.w;\n" "MAD R2.xyz, R3, R2, R1;\n" "ADD R1.z, R1.w, R0.w;\n" "MAD R2.w, -R1, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6350,16 +6204,16 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R1.x, R0, texture[2], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, fragment.position, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" "ADD R2.w, -R0, c[8].y;\n" "ADD R3.xyz, R1.w, -R1;\n" @@ -6380,11 +6234,11 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "MAD R2.xyz, R1, R2, R3;\n" "ADD R1.z, R1.w, R0.w;\n" "MAD R2.w, -R1, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6392,68 +6246,66 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT = "!!ARBfp1.0\n" "PARAM c[10] = { program.local[0..7],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R1.xyz, R0, c[5];\n" + "TEMP R6;\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" "RCP R0.z, R1.z;\n" "MUL R1.xy, R1, R0.z;\n" - "MUL R1.xy, R1, c[6];\n" + "MUL R1.xy, R1, c[0];\n" "MOV R1.y, -R1;\n" - "MUL R0.xy, fragment.position, c[7];\n" + "MUL R0.xy, fragment.position, c[5];\n" "TEX R0, R0, texture[0], 2D;\n" "MAX R1.z, R0.w, c[8].y;\n" "RCP R2.w, R1.z;\n" "MUL R2.xyz, R0, R2.w;\n" - "MUL R5.xyz, -R2, c[8].w;\n" - "MAD R4.xyz, -R0, R2.w, c[8].x;\n" + "MUL R6.xyz, -R2, c[9].x;\n" + "MAD R3.xyz, -R0, R2.w, c[8].x;\n" "TEX R1.x, R1, texture[2], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MAD R3.xyz, R1, c[8].z, -R1.w;\n" + "MAD R4.xyz, R1, c[8].z, -R1.w;\n" + "MUL R5.xyz, R3, R4;\n" + "MAD R3.xyz, -R3, R4, R1.w;\n" + "ADD R6.xyz, R6, c[8].w;\n" + "MAD R5.xyz, -R5, R6, R1.w;\n" "RSQ R2.x, R2.x;\n" "RSQ R2.z, R2.z;\n" "RSQ R2.y, R2.y;\n" - "MUL R4.xyz, R4, R3;\n" - "ADD R5.xyz, R5, c[9].x;\n" - "MUL R5.xyz, R4, R5;\n" - "ADD R4.xyz, R1.w, -R4;\n" + "MUL R5.xyz, R0, R5;\n" + "MUL R3.xyz, R0, R3;\n" "ADD R2.w, -R0, c[8].x;\n" "RCP R2.x, R2.x;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R0.w, -R0;\n" - "MUL R3.xyz, R2, R3;\n" - "ADD R2.xyz, R1.w, -R5;\n" - "MAD R5.xyz, R0, R1.w, R3;\n" - "MUL R2.xyz, R0, R2;\n" - "MUL R3.xyz, R0, c[8].w;\n" - "ADD R5.xyz, R5, -R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R3.xyz, R3, R5;\n" - "ADD R2.xyz, R2, R3;\n" - "MUL R3.xyz, R0, R4;\n" + "MAD R2.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R1.w, R0, R2;\n" + "ADD R6.xyz, R2, -R5;\n" "MUL R4.xyz, R1, c[8].z;\n" + "MUL R2.xyz, R0, c[9].x;\n" + "SGE R2.xyz, R2, R0.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" "SGE R4.xyz, R4, R1.w;\n" "ADD R2.xyz, R2, -R3;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" + "MAD R2.xyz, R4, R2, R3;\n" "MAD R1.xyz, R1, R2.w, R2;\n" "ADD R2.x, -R1.w, c[8];\n" "MAD R2.xyz, R0, R2.x, R1;\n" "ADD R1.z, R1.w, R0.w;\n" "MAD R2.w, -R1, R0, R1.z;\n" - "ADD R1.xy, fragment.position, c[0];\n" - "MUL R1.xy, R1, c[1];\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" "TEX R1, R1, texture[1], 2D;\n" "ADD R2, R2, -R0;\n" - "DP4 R1.x, R1, c[2];\n" + "DP4 R1.x, R1, c[7];\n" "MAD result.color, R1.x, R2, R0;\n" "END\n" ; @@ -6466,107 +6318,106 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "ADD R3.xyz, R0, R1;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MUL R0.xyz, R0, R1.w;\n" - "MIN R0.xyz, R0, R2;\n" - "MAD R2.xyz, -R0, c[8].x, R3;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[2], 2D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "ADD R2.xyz, R1, R0;\n" + "MUL R3.xyz, R1.w, R0;\n" + "MUL R1.xyz, R1, R0.w;\n" + "MIN R1.xyz, R1, R3;\n" + "MAD R2.xyz, -R1, c[8].x, R2;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION = "!!ARBfp1.0\n" "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[4];\n" - "MAD R0.xyz, fragment.position.x, c[3], R0;\n" - "ADD R0.xyz, R0, c[5];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[6];\n" - "MOV R0.y, -R0;\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "MUL R1.xy, fragment.position, c[7];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0, fragment.color.primary, R0.x;\n" - "MUL R2.xyz, R1, R0.w;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\n" - "MAD R2.xyz, -R2, c[8].y, R3;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R2.x, R0;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\n" - "ADD R0.xy, fragment.position, c[0];\n" - "MUL R0.xy, R0, c[1];\n" - "TEX R0, R0, texture[1], 2D;\n" - "ADD R2, R2, -R1;\n" - "DP4 R0.x, R0, c[2];\n" - "MAD result.color, R0.x, R2, R1;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[2], 2D;\n" + "MUL R0.xy, fragment.position, c[5];\n" + "TEX R0, R0, texture[0], 2D;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "MUL R2.xyz, R1.w, R0;\n" + "MAD R3.xyz, R1, R0.w, R2;\n" + "MUL R2.xyz, R1, R0;\n" + "MAD R2.xyz, -R2, c[8].x, R3;\n" + "ADD R2.w, -R0, c[8].y;\n" + "MAD R1.xyz, R1, R2.w, R2;\n" + "ADD R2.x, -R1.w, c[8].y;\n" + "MAD R2.xyz, R0, R2.x, R1;\n" + "ADD R1.z, R1.w, R0.w;\n" + "MAD R2.w, -R1, R0, R1.z;\n" + "ADD R1.xy, fragment.position, c[6];\n" + "MUL R1.xy, R1, c[4];\n" + "TEX R1, R1, texture[1], 2D;\n" + "ADD R2, R2, -R0;\n" + "DP4 R1.x, R1, c[7];\n" + "MAD result.color, R1.x, R2, R0;\n" "END\n" ; static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK = "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 1 },\n" - " program.local[6..7] };\n" + "PARAM c[8] = { program.local[0..6],\n" + " { 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" - "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.w, -R0.y;\n" - "MOV R0.z, R0.x;\n" - "TEX R1.x, R0.zwzw, texture[1], 2D;\n" - "MUL R0.xy, fragment.position, c[4];\n" + "MUL R0.zw, R0.xyxy, R0.z;\n" + "MUL R1.xy, R0.zwzw, c[0];\n" + "MOV R1.y, -R1;\n" + "MUL R0.xy, fragment.position, c[6];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, c[7].y;\n" + "MUL R2.xyz, R0, c[4].y;\n" + "TEX R1.x, R1, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R3.xyz, R2, R1.w;\n" - "MUL R2.xyz, R1, c[7].x;\n" - "MUL R0.xyz, R0, c[6].z;\n" - "MAD R2.xyz, R2, R0.w, R3;\n" - "MUL R1.xyz, R1, c[6].y;\n" - "ADD R2.w, -R0, c[5].x;\n" - "MAD R1.xyz, R1, R2.w, R2;\n" - "ADD R2.x, -R1.w, c[5];\n" - "MAD result.color.xyz, R0, R2.x, R1;\n" - "ADD R0.y, -R0.w, c[5].x;\n" + "MUL R3.xyz, R1.w, R2;\n" + "MUL R2.xyz, R1, c[4].x;\n" + "MUL R0.xyz, R0, c[5].z;\n" + "MAD R2.xyz, R0.w, R2, R3;\n" + "ADD R2.w, -R0, c[7].x;\n" + "MUL R1.xyz, R1, c[5].y;\n" + "MAD R1.xyz, R2.w, R1, R2;\n" + "ADD R2.x, -R1.w, c[7];\n" + "MAD result.color.xyz, R2.x, R0, R1;\n" "MUL R0.x, R1.w, R0.w;\n" "MUL R0.z, R0.w, R2.x;\n" - "MUL R0.y, R1.w, R0;\n" - "DP3 result.color.w, R0, c[6];\n" + "MUL R0.y, R1.w, R2.w;\n" + "DP3 result.color.w, R0, c[5];\n" "END\n" ; @@ -6577,12 +6428,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.zw, R0.xyxy, R0.z;\n" - "MUL R1.xy, R0.zwzw, c[3];\n" + "MUL R1.xy, R0.zwzw, c[0];\n" "MOV R1.y, -R1;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" @@ -6604,12 +6455,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.w, -R0.y;\n" "MOV R0.z, R0.x;\n" "TEX R1.x, R0.zwzw, texture[1], 2D;\n" @@ -6629,12 +6480,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R1.x, R0, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" @@ -6670,19 +6521,20 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[1], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[1], 2D;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" "MUL R2.xyz, R1, R0.w;\n" - "MUL R3.xyz, R0, R1.w;\n" + "MUL R3.xyz, R1.w, R0;\n" "MIN R2.xyz, R2, R3;\n" "ADD R2.w, -R0, c[5].x;\n" "MAD R1.xyz, R1, R2.w, R2;\n" @@ -6701,19 +6553,20 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[1], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[1], 2D;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" "MUL R2.xyz, R1, R0.w;\n" - "MUL R3.xyz, R0, R1.w;\n" + "MUL R3.xyz, R1.w, R0;\n" "MAX R2.xyz, R2, R3;\n" "ADD R2.w, -R0, c[5].x;\n" "MAD R1.xyz, R1, R2.w, R2;\n" @@ -6727,17 +6580,17 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 1e-06 } };\n" + " { 1, 1e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R0.x, R0, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R0.x;\n" @@ -6751,7 +6604,7 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "MUL R3.xyz, R0, R2.w;\n" "ADD R2.w, -R0, c[5].x;\n" "MAD R3.xyz, R1, R2.w, R3;\n" - "MUL R0.xyz, R0, R1.w;\n" + "MUL R0.xyz, R1.w, R0;\n" "RCP R2.x, R2.x;\n" "RCP R2.y, R2.y;\n" "RCP R2.z, R2.z;\n" @@ -6770,25 +6623,26 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 9.9999997e-06 } };\n" + " { 1, 9.9999997e-006 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[1], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R2.xyz, R1.w, R0;\n" "MAD R3.xyz, R1, R0.w, R2;\n" "ADD R2.w, -R0, c[5].x;\n" "MAD R2.xyz, -R1.w, R0.w, R3;\n" @@ -6801,9 +6655,8 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "RCP R2.z, R2.z;\n" "MAD R2.xyz, R4, R2, R5;\n" "MUL R4.xyz, R0, R3.w;\n" - "MAD R1.xyz, R1, R2.w, R4;\n" - "ADD R3.w, -R1, c[5].x;\n" "MAD R0.xyz, R0, R3.w, R2;\n" + "MAD R1.xyz, R1, R2.w, R4;\n" "MUL R2.x, R1.w, R0.w;\n" "ADD R2.w, R1, R0;\n" "ADD R0.xyz, R0, -R1;\n" @@ -6822,12 +6675,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R1.x, R0, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" @@ -6858,57 +6711,55 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK = "!!ARBfp1.0\n" "PARAM c[7] = { program.local[0..4],\n" - " { 1, 9.9999997e-06, 2, 8 },\n" - " { 3 } };\n" + " { 1, 9.9999997e-006, 2, 3 },\n" + " { 8 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" "TEMP R4;\n" "TEMP R5;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R1.xyz, R0, c[2];\n" + "TEMP R6;\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" "RCP R0.z, R1.z;\n" "MUL R1.xy, R1, R0.z;\n" - "MUL R1.xy, R1, c[3];\n" + "MUL R1.xy, R1, c[0];\n" "MOV R1.y, -R1;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "MAX R1.z, R0.w, c[5].y;\n" "RCP R2.w, R1.z;\n" "MUL R2.xyz, R0, R2.w;\n" - "MUL R5.xyz, -R2, c[5].w;\n" - "MAD R4.xyz, -R0, R2.w, c[5].x;\n" + "MUL R6.xyz, -R2, c[6].x;\n" + "MAD R3.xyz, -R0, R2.w, c[5].x;\n" "TEX R1.x, R1, texture[1], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MAD R3.xyz, R1, c[5].z, -R1.w;\n" + "MAD R4.xyz, R1, c[5].z, -R1.w;\n" + "MUL R5.xyz, R3, R4;\n" + "MAD R3.xyz, -R3, R4, R1.w;\n" + "ADD R6.xyz, R6, c[5].w;\n" + "MAD R5.xyz, -R5, R6, R1.w;\n" "RSQ R2.x, R2.x;\n" "RSQ R2.z, R2.z;\n" "RSQ R2.y, R2.y;\n" - "MUL R4.xyz, R4, R3;\n" - "ADD R5.xyz, R5, c[6].x;\n" - "MUL R5.xyz, R4, R5;\n" - "ADD R4.xyz, R1.w, -R4;\n" + "MUL R5.xyz, R0, R5;\n" + "MUL R3.xyz, R0, R3;\n" "RCP R2.x, R2.x;\n" "RCP R2.z, R2.z;\n" "RCP R2.y, R2.y;\n" - "MAD R2.xyz, R2, R0.w, -R0;\n" - "MUL R3.xyz, R2, R3;\n" - "ADD R2.xyz, R1.w, -R5;\n" - "MAD R5.xyz, R0, R1.w, R3;\n" - "MUL R2.xyz, R0, R2;\n" - "MUL R3.xyz, R0, c[5].w;\n" - "ADD R5.xyz, R5, -R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R3.xyz, R3, R5;\n" - "ADD R2.xyz, R2, R3;\n" - "MUL R3.xyz, R0, R4;\n" + "MAD R2.xyz, R0.w, R2, -R0;\n" + "MUL R2.xyz, R2, R4;\n" + "MAD R2.xyz, R1.w, R0, R2;\n" + "ADD R6.xyz, R2, -R5;\n" "MUL R4.xyz, R1, c[5].z;\n" + "MUL R2.xyz, R0, c[6].x;\n" + "SGE R2.xyz, R2, R0.w;\n" + "MAD R2.xyz, R2, R6, R5;\n" "ADD R2.xyz, R2, -R3;\n" "SGE R4.xyz, R4, R1.w;\n" - "MUL R2.xyz, R4, R2;\n" - "ADD R2.xyz, R3, R2;\n" + "MAD R2.xyz, R4, R2, R3;\n" "ADD R2.w, -R0, c[5].x;\n" "MAD R1.xyz, R1, R2.w, R2;\n" "ADD R2.x, R1.w, R0.w;\n" @@ -6926,18 +6777,19 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[1], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[1], 2D;\n" "MUL R0.xy, fragment.position, c[4];\n" - "MUL R1, fragment.color.primary, R1.x;\n" "TEX R0, R0, texture[0], 2D;\n" - "MUL R3.xyz, R0, R1.w;\n" + "MUL R1, fragment.color.primary, R1.x;\n" + "MUL R3.xyz, R1.w, R0;\n" "MUL R2.xyz, R1, R0.w;\n" "ADD R0.xyz, R1, R0;\n" "MIN R2.xyz, R2, R3;\n" @@ -6950,30 +6802,31 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK = "!!ARBfp1.0\n" "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" + " { 2, 1 } };\n" "TEMP R0;\n" "TEMP R1;\n" "TEMP R2;\n" "TEMP R3;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" - "MOV R0.y, -R0;\n" - "TEX R1.x, R0, texture[1], 2D;\n" + "MUL R0.xy, R0, c[0];\n" + "MOV R0.w, -R0.y;\n" + "MOV R0.z, R0.x;\n" + "TEX R1.x, R0.zwzw, texture[1], 2D;\n" "MUL R0.xy, fragment.position, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R2.xyz, R0, R1.w;\n" + "MUL R2.xyz, R1.w, R0;\n" "MAD R3.xyz, R1, R0.w, R2;\n" "MUL R2.xyz, R1, R0;\n" - "MAD R2.xyz, -R2, c[5].y, R3;\n" - "ADD R2.w, -R0, c[5].x;\n" + "MAD R2.xyz, -R2, c[5].x, R3;\n" + "ADD R2.w, -R0, c[5].y;\n" "MAD R1.xyz, R1, R2.w, R2;\n" "ADD R2.x, R1.w, R0.w;\n" - "ADD R2.y, -R1.w, c[5].x;\n" + "ADD R2.y, -R1.w, c[5];\n" "MAD result.color.xyz, R0, R2.y, R1;\n" "MAD result.color.w, -R1, R0, R2.x;\n" "END\n" @@ -6984,15 +6837,15 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "PARAM c[7] = { program.local[0..6] };\n" "TEMP R0;\n" "TEMP R1;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R1.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R1.xyz, R0, c[3];\n" "RCP R0.z, R1.z;\n" "MUL R0.zw, R1.xyxy, R0.z;\n" - "MUL R1.xy, R0.zwzw, c[3];\n" + "MUL R1.xy, R0.zwzw, c[0];\n" "MOV R1.y, -R1;\n" - "ADD R0.xy, fragment.position, c[4];\n" - "MUL R0.xy, R0, c[5];\n" + "ADD R0.xy, fragment.position, c[5];\n" + "MUL R0.xy, R0, c[4];\n" "TEX R0, R0, texture[0], 2D;\n" "TEX R1.x, R1, texture[1], 2D;\n" "DP4 R0.x, R0, c[6];\n" @@ -7005,12 +6858,12 @@ static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MO "!!ARBfp1.0\n" "PARAM c[4] = { program.local[0..3] };\n" "TEMP R0;\n" - "MUL R0.xyz, fragment.position.y, c[1];\n" - "MAD R0.xyz, fragment.position.x, c[0], R0;\n" - "ADD R0.xyz, R0, c[2];\n" + "MUL R0.xyz, fragment.position.y, c[2];\n" + "MAD R0.xyz, fragment.position.x, c[1], R0;\n" + "ADD R0.xyz, R0, c[3];\n" "RCP R0.z, R0.z;\n" "MUL R0.xy, R0, R0.z;\n" - "MUL R0.xy, R0, c[3];\n" + "MUL R0.xy, R0, c[0];\n" "MOV R0.y, -R0;\n" "TEX R0.x, R0, texture[0], 2D;\n" "MUL result.color, fragment.color.primary, R0.x;\n" @@ -7195,19 +7048,19 @@ static const char *painter_fragment_program_sources[num_fragment_brushes][num_fr static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = { { - { -1, -1, -1, 1, -1, 6, 2, -1, 5, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, 3, 1, 0, -1, 0, -1, -1, -1, -1, -1, }, - { -1, -1, -1, -1, -1, 3, -1, -1, 2, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 2, -1, 0, 5, -1, 1, 3, 1, 0, -1, 4, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 3, -1, -1, 1, 1, 0, -1, 2, -1, -1, -1, -1, -1, }, + { -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, @@ -7219,154 +7072,154 @@ static int painter_variable_locations[num_fragment_brushes][num_fragment_composi { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, }, - { -1, -1, -1, 1, -1, -1, 2, -1, -1, -1, 0, -1, -1, 0, -1, -1, -1, -1, -1, }, + { -1, -1, -1, 0, -1, -1, 2, -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, -1, -1, }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, }, { - { -1, -1, 4, 1, 5, 11, 2, -1, 10, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 9, 1, 0, 2, 0, -1, 8, 6, 3, -1, }, - { -1, -1, 1, -1, 2, 8, -1, -1, 7, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 6, -1, 0, 1, -1, -1, 5, 3, 0, -1, }, - { -1, -1, 1, 7, 2, -1, 8, -1, -1, -1, 0, -1, 1, 6, -1, 5, 3, 0, -1, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 5, 3, 0, -1, }, + { -1, -1, 3, 7, 4, 5, 10, -1, 6, 8, 1, 0, 2, 9, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 8, -1, -1, 6, 1, 0, 2, 7, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, 5, -1, 0, 1, -1, -1, 1, 0, 2, -1, }, + { -1, -1, 3, 5, 4, -1, 7, -1, -1, -1, 0, -1, 1, 6, -1, 1, 0, 2, -1, }, + { -1, -1, 3, -1, 4, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, 0, 2, -1, }, }, { - { -1, -1, 4, 1, 5, 12, 2, -1, 11, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 4, 1, 5, -1, 2, -1, -1, 10, 1, 0, 2, 0, -1, -1, -1, 3, 8, }, - { -1, -1, 1, -1, 2, 9, -1, -1, 8, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, 7, -1, 0, 1, -1, -1, -1, -1, 0, 5, }, - { -1, -1, 1, 8, 2, -1, 9, -1, -1, -1, 0, -1, 1, 7, -1, -1, -1, 0, 5, }, - { -1, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, 5, }, + { -1, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, 0, }, + { -1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, 0, }, + { -1, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, 0, }, }, { - { -1, 6, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 6, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, 2, 0, -1, -1, -1, 3, -1, }, - { -1, 3, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 0, -1, }, - { -1, 3, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, 1, 4, -1, -1, -1, 0, -1, }, - { -1, 3, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, -1, }, + { -1, 0, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, 2, 8, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, 2, 6, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, 1, -1, -1, -1, -1, 1, -1, }, + { -1, 0, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, 1, 5, -1, -1, -1, 1, -1, }, + { -1, 0, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, -1, }, }, { - { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, }, - { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, }, + { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, }, + { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, }, }, { - { 2, -1, 4, 1, 5, 10, 2, -1, 9, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 2, -1, 4, 1, 5, -1, 2, -1, -1, 7, 1, 0, -1, 0, 6, -1, -1, 3, -1, }, - { 1, -1, 1, -1, 2, 7, -1, -1, 6, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, -1, 2, -1, -1, -1, -1, 4, -1, 0, -1, -1, 3, -1, -1, 0, -1, }, - { 1, -1, 1, 5, 2, -1, 6, -1, -1, -1, 0, -1, -1, 4, 3, -1, -1, 0, -1, }, - { 0, -1, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, }, + { 2, -1, 2, 6, 3, 4, 9, -1, 5, 7, 1, 0, -1, 8, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 2, -1, 2, 4, 3, -1, 7, -1, -1, 5, 1, 0, -1, 6, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, 4, -1, -1, 5, 6, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, -1, 3, -1, -1, -1, -1, 4, -1, 0, -1, -1, 0, -1, -1, 1, -1, }, + { 1, -1, 2, 4, 3, -1, 6, -1, -1, -1, 0, -1, -1, 5, 0, -1, -1, 1, -1, }, + { 0, -1, 2, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, }, }, }; static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = { { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - { -1, -1, 2, -1, 3, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, }, + { -1, -1, 1, -1, 2, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, }, }; #endif diff --git a/src/opengl/util/generator.pro b/src/opengl/util/generator.pro index 9425dbe..ac71934 100644 --- a/src/opengl/util/generator.pro +++ b/src/opengl/util/generator.pro @@ -9,3 +9,5 @@ INCLUDEPATH += . # Input SOURCES += generator.cpp + +CONFIG += console diff --git a/src/opengl/util/texture_brush.glsl b/src/opengl/util/texture_brush.glsl index 93865b8..9498255 100644 --- a/src/opengl/util/texture_brush.glsl +++ b/src/opengl/util/texture_brush.glsl @@ -17,7 +17,5 @@ vec4 brush() coords *= inv_brush_texture_size; - coords.y = -coords.y; - return texture2D(brush_texture, coords); } |