From 6e28e8441b698c3397c2c78125c877f2e9867cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 22 Aug 2011 10:49:28 +0200 Subject: Copy core GL functionality to QtGui with QGL -> QOpenGL naming. Change-Id: Ibc989afa4a30dd184d41d1a1cd89f97196e48855 Reviewed-on: http://codereview.qt.nokia.com/3710 Reviewed-by: Gunnar Sletta --- .../gl2paintengineex/qglengineshadermanager.cpp | 18 +- src/opengl/gl2paintengineex/qglgradientcache.cpp | 8 +- src/opengl/gl2paintengineex/qglgradientcache_p.h | 6 +- .../gl2paintengineex/qtextureglyphcache_gl.cpp | 2 +- .../gl2paintengineex/qtextureglyphcache_gl_p.h | 10 +- src/opengl/gl2paintengineex/qtriangulator_p.h | 10 +- src/opengl/qgl.cpp | 22 +- src/opengl/qgl.h | 6 +- src/opengl/qgl_p.h | 18 +- src/opengl/qgl_qpa.cpp | 20 +- src/opengl/qglbuffer.cpp | 4 +- src/opengl/qglextensions_p.h | 4 +- src/opengl/qglframebufferobject.cpp | 4 +- src/opengl/qglfunctions.cpp | 14 +- src/opengl/qglpixelbuffer.cpp | 4 +- src/opengl/qglshaderprogram.cpp | 7 +- src/opengl/util/README-GLSL | 18 - src/opengl/util/brush_painter.glsl | 7 - src/opengl/util/brushes.conf | 6 - src/opengl/util/composition_mode_colorburn.glsl | 13 - src/opengl/util/composition_mode_colordodge.glsl | 15 - src/opengl/util/composition_mode_darken.glsl | 9 - src/opengl/util/composition_mode_difference.glsl | 9 - src/opengl/util/composition_mode_exclusion.glsl | 9 - src/opengl/util/composition_mode_hardlight.glsl | 14 - src/opengl/util/composition_mode_lighten.glsl | 9 - src/opengl/util/composition_mode_multiply.glsl | 9 - src/opengl/util/composition_mode_overlay.glsl | 13 - src/opengl/util/composition_mode_screen.glsl | 6 - src/opengl/util/composition_mode_softlight.glsl | 22 - src/opengl/util/composition_modes.conf | 12 - src/opengl/util/conical_brush.glsl | 27 - src/opengl/util/ellipse_aa.glsl | 58 - src/opengl/util/fast_painter.glsl | 19 - src/opengl/util/fragmentprograms_p.h | 7287 -------------------- src/opengl/util/generator.cpp | 500 -- src/opengl/util/generator.pro | 13 - src/opengl/util/glsl_to_include.sh | 73 - src/opengl/util/linear_brush.glsl | 22 - src/opengl/util/masks.conf | 2 - src/opengl/util/meego/main.cpp | 89 - .../util/meego/shader-cache-introspector.pro | 7 - src/opengl/util/painter.glsl | 21 - src/opengl/util/painter_nomask.glsl | 9 - src/opengl/util/pattern_brush.glsl | 23 - src/opengl/util/radial_brush.glsl | 28 - src/opengl/util/simple_porter_duff.glsl | 16 - src/opengl/util/solid_brush.glsl | 4 - src/opengl/util/texture_brush.glsl | 21 - src/opengl/util/trap_exact_aa.glsl | 58 - 50 files changed, 79 insertions(+), 8526 deletions(-) delete mode 100644 src/opengl/util/README-GLSL delete mode 100644 src/opengl/util/brush_painter.glsl delete mode 100644 src/opengl/util/brushes.conf delete mode 100644 src/opengl/util/composition_mode_colorburn.glsl delete mode 100644 src/opengl/util/composition_mode_colordodge.glsl delete mode 100644 src/opengl/util/composition_mode_darken.glsl delete mode 100644 src/opengl/util/composition_mode_difference.glsl delete mode 100644 src/opengl/util/composition_mode_exclusion.glsl delete mode 100644 src/opengl/util/composition_mode_hardlight.glsl delete mode 100644 src/opengl/util/composition_mode_lighten.glsl delete mode 100644 src/opengl/util/composition_mode_multiply.glsl delete mode 100644 src/opengl/util/composition_mode_overlay.glsl delete mode 100644 src/opengl/util/composition_mode_screen.glsl delete mode 100644 src/opengl/util/composition_mode_softlight.glsl delete mode 100644 src/opengl/util/composition_modes.conf delete mode 100644 src/opengl/util/conical_brush.glsl delete mode 100644 src/opengl/util/ellipse_aa.glsl delete mode 100644 src/opengl/util/fast_painter.glsl delete mode 100644 src/opengl/util/fragmentprograms_p.h delete mode 100644 src/opengl/util/generator.cpp delete mode 100644 src/opengl/util/generator.pro delete mode 100755 src/opengl/util/glsl_to_include.sh delete mode 100644 src/opengl/util/linear_brush.glsl delete mode 100644 src/opengl/util/masks.conf delete mode 100644 src/opengl/util/meego/main.cpp delete mode 100644 src/opengl/util/meego/shader-cache-introspector.pro delete mode 100644 src/opengl/util/painter.glsl delete mode 100644 src/opengl/util/painter_nomask.glsl delete mode 100644 src/opengl/util/pattern_brush.glsl delete mode 100644 src/opengl/util/radial_brush.glsl delete mode 100644 src/opengl/util/simple_porter_duff.glsl delete mode 100644 src/opengl/util/solid_brush.glsl delete mode 100644 src/opengl/util/texture_brush.glsl delete mode 100644 src/opengl/util/trap_exact_aa.glsl (limited to 'src/opengl') diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp index 05a612c311..aebdce6e01 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp @@ -44,7 +44,7 @@ #include "qpaintengineex_opengl2_p.h" #include "qglshadercache_p.h" -#include +#include #if defined(QT_DEBUG) #include @@ -54,12 +54,12 @@ QT_BEGIN_NAMESPACE -class QGLEngineSharedShadersResource : public QGLSharedResource +class QGLEngineSharedShadersResource : public QOpenGLSharedResource { public: - QGLEngineSharedShadersResource(QGuiGLContext *ctx) - : QGLSharedResource(ctx->shareGroup()) - , m_shaders(new QGLEngineSharedShaders(QGLContext::fromGuiGLContext(ctx))) + QGLEngineSharedShadersResource(QOpenGLContext *ctx) + : QOpenGLSharedResource(ctx->shareGroup()) + , m_shaders(new QGLEngineSharedShaders(QGLContext::fromOpenGLContext(ctx))) { } @@ -74,7 +74,7 @@ public: m_shaders = 0; } - void freeResource(QGuiGLContext *) + void freeResource(QOpenGLContext *) { } @@ -88,16 +88,16 @@ class QGLShaderStorage { public: QGLEngineSharedShaders *shadersForThread(const QGLContext *context) { - QGLMultiGroupSharedResource *&shaders = m_storage.localData(); + QOpenGLMultiGroupSharedResource *&shaders = m_storage.localData(); if (!shaders) - shaders = new QGLMultiGroupSharedResource; + shaders = new QOpenGLMultiGroupSharedResource; QGLEngineSharedShadersResource *resource = shaders->value(context->contextHandle()); return resource ? resource->shaders() : 0; } private: - QThreadStorage m_storage; + QThreadStorage m_storage; }; Q_GLOBAL_STATIC(QGLShaderStorage, qt_shader_storage); diff --git a/src/opengl/gl2paintengineex/qglgradientcache.cpp b/src/opengl/gl2paintengineex/qglgradientcache.cpp index bd408ffdc4..6ca09ba140 100644 --- a/src/opengl/gl2paintengineex/qglgradientcache.cpp +++ b/src/opengl/gl2paintengineex/qglgradientcache.cpp @@ -55,14 +55,14 @@ public: } private: - QGLMultiGroupSharedResource m_resource; + QOpenGLMultiGroupSharedResource m_resource; QMutex m_mutex; }; Q_GLOBAL_STATIC(QGL2GradientCacheWrapper, qt_gradient_caches) -QGL2GradientCache::QGL2GradientCache(QGuiGLContext *ctx) - : QGLSharedResource(ctx->shareGroup()) +QGL2GradientCache::QGL2GradientCache(QOpenGLContext *ctx) + : QOpenGLSharedResource(ctx->shareGroup()) { } @@ -82,7 +82,7 @@ void QGL2GradientCache::invalidateResource() cache.clear(); } -void QGL2GradientCache::freeResource(QGuiGLContext *) +void QGL2GradientCache::freeResource(QOpenGLContext *) { cleanCache(); } diff --git a/src/opengl/gl2paintengineex/qglgradientcache_p.h b/src/opengl/gl2paintengineex/qglgradientcache_p.h index 1b001c3405..600085a75f 100644 --- a/src/opengl/gl2paintengineex/qglgradientcache_p.h +++ b/src/opengl/gl2paintengineex/qglgradientcache_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE -class QGL2GradientCache : public QGLSharedResource +class QGL2GradientCache : public QOpenGLSharedResource { struct CacheInfo { @@ -76,14 +76,14 @@ class QGL2GradientCache : public QGLSharedResource public: static QGL2GradientCache *cacheForContext(const QGLContext *context); - QGL2GradientCache(QGuiGLContext *); + QGL2GradientCache(QOpenGLContext *); ~QGL2GradientCache(); GLuint getBuffer(const QGradient &gradient, qreal opacity); inline int paletteSize() const { return 1024; } void invalidateResource(); - void freeResource(QGuiGLContext *ctx); + void freeResource(QOpenGLContext *ctx); private: inline int maxCacheSize() const { return 60; } diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 214bfa5b47..af6cb53a3a 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -59,7 +59,7 @@ QGLTextureGlyphCache::QGLTextureGlyphCache(QFontEngineGlyphCache::Type type, con , m_serialNumber(qgltextureglyphcache_serial_number.fetchAndAddRelaxed(1)) { #ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG - qDebug(" -> QGLTextureGlyphCache() %p for context %p.", this, QGuiGLContext::currentContext()); + qDebug(" -> QGLTextureGlyphCache() %p for context %p.", this, QOpenGLContext::currentContext()); #endif m_vertexCoordinateArray[0] = -1.0f; m_vertexCoordinateArray[1] = -1.0f; diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h index 2fcc551667..7b7da9d8e8 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h @@ -63,10 +63,10 @@ QT_BEGIN_NAMESPACE class QGL2PaintEngineExPrivate; -struct QGLGlyphTexture : public QGLSharedResource +struct QGLGlyphTexture : public QOpenGLSharedResource { QGLGlyphTexture(const QGLContext *ctx) - : QGLSharedResource(ctx->contextHandle()->shareGroup()) + : QOpenGLSharedResource(ctx->contextHandle()->shareGroup()) , m_width(0) , m_height(0) { @@ -78,9 +78,9 @@ struct QGLGlyphTexture : public QGLSharedResource #endif } - void freeResource(QGuiGLContext *context) + void freeResource(QOpenGLContext *context) { - const QGLContext *ctx = QGLContext::fromGuiGLContext(context); + const QGLContext *ctx = QGLContext::fromOpenGLContext(context); #ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG qDebug("~QGLGlyphTexture() %p for context %p.", this, ctx); #endif @@ -136,7 +136,7 @@ public: inline void setPaintEnginePrivate(QGL2PaintEngineExPrivate *p) { pex = p; } - inline const QGuiGLContextGroup *contextGroup() const { return m_textureResource ? m_textureResource->group() : 0; } + inline const QOpenGLContextGroup *contextGroup() const { return m_textureResource ? m_textureResource->group() : 0; } inline int serialNumber() const { return m_serialNumber; } diff --git a/src/opengl/gl2paintengineex/qtriangulator_p.h b/src/opengl/gl2paintengineex/qtriangulator_p.h index 04a219c255..a8e7553770 100644 --- a/src/opengl/gl2paintengineex/qtriangulator_p.h +++ b/src/opengl/gl2paintengineex/qtriangulator_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE -class Q_OPENGL_EXPORT QVertexIndexVector +class QVertexIndexVector { public: enum Type { @@ -111,7 +111,7 @@ private: QVector indices16; }; -struct Q_OPENGL_EXPORT QTriangleSet +struct QTriangleSet { inline QTriangleSet() { } inline QTriangleSet(const QTriangleSet &other) : vertices(other.vertices), indices(other.indices) { } @@ -122,7 +122,7 @@ struct Q_OPENGL_EXPORT QTriangleSet QVertexIndexVector indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...] }; -struct Q_OPENGL_EXPORT QPolylineSet +struct QPolylineSet { inline QPolylineSet() { } inline QPolylineSet(const QPolylineSet &other) : vertices(other.vertices), indices(other.indices) { } @@ -139,9 +139,9 @@ struct Q_OPENGL_EXPORT QPolylineSet // 'lod' is the level of detail. Default is 1. Curves are split into more lines when 'lod' is higher. QTriangleSet qTriangulate(const qreal *polygon, int count, uint hint = QVectorPath::PolygonHint | QVectorPath::OddEvenFill, const QTransform &matrix = QTransform()); QTriangleSet qTriangulate(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); -QTriangleSet Q_OPENGL_EXPORT qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); +QTriangleSet qTriangulate(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); QPolylineSet qPolyline(const QVectorPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); -QPolylineSet Q_OPENGL_EXPORT qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); +QPolylineSet qPolyline(const QPainterPath &path, const QTransform &matrix = QTransform(), qreal lod = 1); QT_END_NAMESPACE diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index f51882841b..a78c602701 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -55,7 +55,7 @@ #include "gl2paintengineex/qpaintengineex_opengl2_p.h" -#include +#include #include #include @@ -1501,11 +1501,15 @@ const QGLContext *qt_gl_transfer_context(const QGLContext *ctx) QGLContextPrivate::QGLContextPrivate(QGLContext *context) : internal_context(false) , q_ptr(context) + , texture_destroyer(0) , functions(0) { group = new QGLContextGroup(context); - texture_destroyer = new QGLTextureDestroyer; - texture_destroyer->moveToThread(qApp->thread()); + + if (qApp) { + texture_destroyer = new QGLTextureDestroyer; + texture_destroyer->moveToThread(qApp->thread()); + } } QGLContextPrivate::~QGLContextPrivate() @@ -1605,7 +1609,7 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo img = img.mirrored(); } -Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha) +QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha) { QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32); @@ -3076,8 +3080,8 @@ void QGLContext::setInitialized(bool on) const QGLContext* QGLContext::currentContext() { - if (const QGuiGLContext *threadContext = QGuiGLContext::currentContext()) { - return QGLContext::fromGuiGLContext(const_cast(threadContext)); + if (const QOpenGLContext *threadContext = QOpenGLContext::currentContext()) { + return QGLContext::fromOpenGLContext(const_cast(threadContext)); } return 0; } @@ -4664,7 +4668,7 @@ void QGLWidget::drawTexture(const QPointF &point, GLuint textureId, GLenum textu Q_GLOBAL_STATIC(QGLEngineThreadStorage, qt_gl_2_engine) -Q_OPENGL_EXPORT QPaintEngine* qt_qgl_paint_engine() +QPaintEngine* qt_qgl_paint_engine() { return qt_gl_2_engine()->engine(); } @@ -4934,12 +4938,12 @@ void QGLWidgetPrivate::initContext(QGLContext *context, const QGLWidget* shareWi Q_GLOBAL_STATIC(QString, qt_gl_lib_name) -Q_OPENGL_EXPORT void qt_set_gl_library_name(const QString& name) +void qt_set_gl_library_name(const QString& name) { qt_gl_lib_name()->operator=(name); } -Q_OPENGL_EXPORT const QString qt_gl_library_name() +const QString qt_gl_library_name() { if (qt_gl_lib_name()->isNull()) { # if defined(QT_OPENGL_ES_2) diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index a12cddcca4..665dcac412 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -338,8 +338,8 @@ public: static const QGLContext* currentContext(); - static QGLContext *fromGuiGLContext(QGuiGLContext *platformContext); - QGuiGLContext *contextHandle() const; + static QGLContext *fromOpenGLContext(QOpenGLContext *platformContext); + QOpenGLContext *contextHandle() const; protected: virtual bool chooseContext(const QGLContext* shareContext = 0); @@ -359,7 +359,7 @@ protected: static QGLContext* currentCtx; private: - QGLContext(QGuiGLContext *windowContext); + QGLContext(QOpenGLContext *windowContext); QScopedPointer d_ptr; diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 58efc7f7fd..6f418a9818 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -61,11 +61,11 @@ #include "QtCore/qhash.h" #include "QtCore/qatomic.h" #include "QtWidgets/private/qwidget_p.h" -#include "QtGui/private/qguiglcontext_qpa_p.h" +#include "QtGui/private/qopenglcontext_p.h" #include "qcache.h" #include "qglpaintdevice_p.h" -#include +#include QT_BEGIN_NAMESPACE @@ -209,7 +209,7 @@ private: // Get the context that resources for "ctx" will transfer to once // "ctx" is destroyed. Returns null if nothing is sharing with ctx. -Q_OPENGL_EXPORT const QGLContext *qt_gl_transfer_context(const QGLContext *); +const QGLContext *qt_gl_transfer_context(const QGLContext *); // GL extension definitions class QGLExtensions { @@ -298,7 +298,7 @@ public: void syncGlState(); // Makes sure the GL context's state is what we think it is void swapRegion(const QRegion ®ion); - QGuiGLContext *guiGlContext; + QOpenGLContext *guiGlContext; void setupSharing(); QGLFormat glFormat; @@ -528,18 +528,18 @@ QGLTexture* QGLTextureCache::getTexture(QGLContext *ctx, qint64 key) return m_cache.object(cacheKey); } -extern Q_OPENGL_EXPORT QPaintEngine* qt_qgl_paint_engine(); +extern QPaintEngine* qt_qgl_paint_engine(); // Put a guard around a GL object identifier and its context. // When the context goes away, a shared context will be used // in its place. If there are no more shared contexts, then // the identifier is returned as zero - it is assumed that the // context destruction cleaned up the identifier in this case. -class Q_OPENGL_EXPORT QGLSharedResourceGuardBase : public QGLSharedResource +class QGLSharedResourceGuardBase : public QOpenGLSharedResource { public: QGLSharedResourceGuardBase(QGLContext *context, GLuint id) - : QGLSharedResource(context->contextHandle()->shareGroup()) + : QOpenGLSharedResource(context->contextHandle()->shareGroup()) , m_id(id) { } @@ -555,10 +555,10 @@ protected: m_id = 0; } - void freeResource(QGuiGLContext *context) + void freeResource(QOpenGLContext *context) { if (m_id) { - freeResource(QGLContext::fromGuiGLContext(context), m_id); + freeResource(QGLContext::fromOpenGLContext(context), m_id); } } diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index e6c135bb7f..46dfd54adf 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include @@ -110,9 +110,9 @@ QSurfaceFormat QGLFormat::toSurfaceFormat(const QGLFormat &format) void QGLContextPrivate::setupSharing() { Q_Q(QGLContext); - QGuiGLContext *sharedContext = guiGlContext->shareContext(); + QOpenGLContext *sharedContext = guiGlContext->shareContext(); if (sharedContext) { - QGLContext *actualSharedContext = QGLContext::fromGuiGLContext(sharedContext); + QGLContext *actualSharedContext = QGLContext::fromOpenGLContext(sharedContext); sharing = true; QGLContextGroup::addShare(q, actualSharedContext); } @@ -149,8 +149,8 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } delete d->guiGlContext; - QGuiGLContext *shareGlContext = shareContext ? shareContext->d_func()->guiGlContext : 0; - d->guiGlContext = new QGuiGLContext; + QOpenGLContext *shareGlContext = shareContext ? shareContext->d_func()->guiGlContext : 0; + d->guiGlContext = new QOpenGLContext; d->guiGlContext->setFormat(winFormat); d->guiGlContext->setShareContext(shareGlContext); d->valid = d->guiGlContext->create(); @@ -286,7 +286,7 @@ class QGLTemporaryContextPrivate { public: QWindow *window; - QGuiGLContext *context; + QOpenGLContext *context; QGLContext *oldContext; }; @@ -301,7 +301,7 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) d->window->setGeometry(QRect(0, 0, 3, 3)); d->window->create(); - d->context = new QGuiGLContext; + d->context = new QOpenGLContext; d->context->create(); d->context->makeCurrent(d->window); } @@ -378,7 +378,7 @@ void QGLWidget::setColormap(const QGLColormap & c) Q_UNUSED(c); } -QGLContext::QGLContext(QGuiGLContext *context) +QGLContext::QGLContext(QOpenGLContext *context) : d_ptr(new QGLContextPrivate(this)) { Q_D(QGLContext); @@ -389,7 +389,7 @@ QGLContext::QGLContext(QGuiGLContext *context) d->setupSharing(); } -QGuiGLContext *QGLContext::contextHandle() const +QOpenGLContext *QGLContext::contextHandle() const { Q_D(const QGLContext); return d->guiGlContext; @@ -398,7 +398,7 @@ QGuiGLContext *QGLContext::contextHandle() const /*! Returns a OpenGL context for the window context specified by \a windowContext */ -QGLContext *QGLContext::fromGuiGLContext(QGuiGLContext *context) +QGLContext *QGLContext::fromOpenGLContext(QOpenGLContext *context) { if (!context) return 0; diff --git a/src/opengl/qglbuffer.cpp b/src/opengl/qglbuffer.cpp index 53f27392b0..c1128a0ebd 100644 --- a/src/opengl/qglbuffer.cpp +++ b/src/opengl/qglbuffer.cpp @@ -334,7 +334,7 @@ bool QGLBuffer::read(int offset, void *data, int count) { #if !defined(QT_OPENGL_ES) Q_D(QGLBuffer); - if (!glGetBufferSubData || !d->guard.id()) + if (!glGetBufferSubData || !d->guard->id()) return false; while (glGetError() != GL_NO_ERROR) ; // Clear error state. glGetBufferSubData(d->type, offset, count, data); @@ -421,7 +421,7 @@ bool QGLBuffer::bind() Q_D(const QGLBuffer); GLuint bufferId = d->guard ? d->guard->id() : 0; if (bufferId) { - if (d->guard->group() != QGuiGLContextGroup::currentContextGroup()) { + if (d->guard->group() != QOpenGLContextGroup::currentContextGroup()) { #ifndef QT_NO_DEBUG qWarning("QGLBuffer::bind: buffer is not valid in the current context"); #endif diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h index 2ef8a0169c..991fbba8c7 100644 --- a/src/opengl/qglextensions_p.h +++ b/src/opengl/qglextensions_p.h @@ -855,10 +855,10 @@ struct QGLExtensionFuncs #endif extern bool qt_resolve_framebufferobject_extensions(QGLContext *ctx); -bool Q_OPENGL_EXPORT qt_resolve_buffer_extensions(QGLContext *ctx); +bool qt_resolve_buffer_extensions(QGLContext *ctx); bool qt_resolve_version_1_3_functions(QGLContext *ctx); -bool Q_OPENGL_EXPORT qt_resolve_version_2_0_functions(QGLContext *ctx); +bool qt_resolve_version_2_0_functions(QGLContext *ctx); bool qt_resolve_stencil_face_extension(QGLContext *ctx); bool qt_resolve_frag_program_extensions(QGLContext *ctx); diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 29168441b3..e3f12e42c8 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE -extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool); +extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool); #define QGL_FUNC_CONTEXT const QGLContext *ctx = QGLContext::currentContext(); #define QGL_FUNCP_CONTEXT const QGLContext *ctx = QGLContext::currentContext(); diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp index 534c6c8bbf..227e6cc176 100644 --- a/src/opengl/qglfunctions.cpp +++ b/src/opengl/qglfunctions.cpp @@ -41,7 +41,7 @@ #include "qglfunctions.h" #include "qgl_p.h" -#include "QtGui/private/qguiglcontext_qpa_p.h" +#include "QtGui/private/qopenglcontext_p.h" QT_BEGIN_NAMESPACE @@ -140,11 +140,11 @@ QT_BEGIN_NAMESPACE */ // Hidden private fields for additional extension data. -struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QGLSharedResource +struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QOpenGLSharedResource { - QGLFunctionsPrivateEx(QGuiGLContext *context) - : QGLFunctionsPrivate(QGLContext::fromGuiGLContext(context)) - , QGLSharedResource(context->shareGroup()) + QGLFunctionsPrivateEx(QOpenGLContext *context) + : QGLFunctionsPrivate(QGLContext::fromOpenGLContext(context)) + , QOpenGLSharedResource(context->shareGroup()) , m_features(-1) {} void invalidateResource() @@ -152,7 +152,7 @@ struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QGLSharedResou m_features = -1; } - void freeResource(QGuiGLContext *) + void freeResource(QOpenGLContext *) { // no gl resources to free } @@ -160,7 +160,7 @@ struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QGLSharedResou int m_features; }; -Q_GLOBAL_STATIC(QGLMultiGroupSharedResource, qt_gl_functions_resource) +Q_GLOBAL_STATIC(QOpenGLMultiGroupSharedResource, qt_gl_functions_resource) static QGLFunctionsPrivateEx *qt_gl_functions(const QGLContext *context = 0) { diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp index 156c40f394..ee4e9547ca 100644 --- a/src/opengl/qglpixelbuffer.cpp +++ b/src/opengl/qglpixelbuffer.cpp @@ -91,7 +91,7 @@ #include -#include +#include #include #include @@ -100,7 +100,7 @@ QT_BEGIN_NAMESPACE -extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool); +extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool); QGLContext* QGLPBufferGLPaintDevice::context() const diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index 7b3f5d998d..0163d60f0c 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -958,7 +958,7 @@ bool QGLShaderProgram::bind() if (!d->linked && !link()) return false; #ifndef QT_NO_DEBUG - if (d->programGuard->group() != QGuiGLContextGroup::currentContextGroup()) { + if (d->programGuard->group() != QOpenGLContextGroup::currentContextGroup()) { qWarning("QGLShaderProgram::bind: program is not valid in the current context."); return false; } @@ -980,7 +980,7 @@ void QGLShaderProgram::release() { #ifndef QT_NO_DEBUG Q_D(QGLShaderProgram); - if (d->programGuard->group() != QGuiGLContextGroup::currentContextGroup()) + if (d->programGuard->group() != QOpenGLContextGroup::currentContextGroup()) qWarning("QGLShaderProgram::release: program is not valid in the current context."); #endif #if defined(QT_OPENGL_ES_2) @@ -991,9 +991,6 @@ void QGLShaderProgram::release() #endif } -#undef ctx -#define ctx d->programGuard.context() - /*! Returns the OpenGL identifier associated with this shader program. diff --git a/src/opengl/util/README-GLSL b/src/opengl/util/README-GLSL deleted file mode 100644 index ff20eb45b2..0000000000 --- a/src/opengl/util/README-GLSL +++ /dev/null @@ -1,18 +0,0 @@ -Use of GLSL for vertex and fragment programs in Qt ---------------------------------------------------- - -We don't compile the *.glsl files because we don't want the build process of -Qt to require cgc from nVidia to build the fragment programs. - -The script src/opengl/util/glsl_to_include.sh will compile a GLSL program to a file -that can be included in a C(++) program. The file is the output from cgc -quoted as a string. - -This can be done manually by: - -./glsl_to_include.sh radial.glsl -./glsl_to_include.sh conical.glsl - -This will produce the files radial.frag and radial.glsl_quoted. -(and also conical.frag and conical.glsl_quoted) -These files are included by qpaintengine_opengl.cpp diff --git a/src/opengl/util/brush_painter.glsl b/src/opengl/util/brush_painter.glsl deleted file mode 100644 index 6c4acdf924..0000000000 --- a/src/opengl/util/brush_painter.glsl +++ /dev/null @@ -1,7 +0,0 @@ -// fast brush painter for composition modes which can be implemented with blendfuncs -// no mask, used for fast filling of aliased primitives (or multisampled) - -void main() -{ - gl_FragColor = brush(); -} diff --git a/src/opengl/util/brushes.conf b/src/opengl/util/brushes.conf deleted file mode 100644 index 93e2b3b295..0000000000 --- a/src/opengl/util/brushes.conf +++ /dev/null @@ -1,6 +0,0 @@ -FRAGMENT_PROGRAM_BRUSH_SOLID solid_brush.glsl -FRAGMENT_PROGRAM_BRUSH_RADIAL radial_brush.glsl -FRAGMENT_PROGRAM_BRUSH_CONICAL conical_brush.glsl -FRAGMENT_PROGRAM_BRUSH_LINEAR linear_brush.glsl -FRAGMENT_PROGRAM_BRUSH_TEXTURE texture_brush.glsl -FRAGMENT_PROGRAM_BRUSH_PATTERN pattern_brush.glsl diff --git a/src/opengl/util/composition_mode_colorburn.glsl b/src/opengl/util/composition_mode_colorburn.glsl deleted file mode 100644 index c913b9737f..0000000000 --- a/src/opengl/util/composition_mode_colorburn.glsl +++ /dev/null @@ -1,13 +0,0 @@ -// Dca' = Sca.Da + Dca.Sa <= Sa.Da ? -// Sca.(1 - Da) + Dca.(1 - Sa) -// Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = mix(src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - src.a * (src.rgb * dst.a + dst.rgb * src.a - src.a * dst.a) / max(src.rgb, 0.00001) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - step(src.a * dst.a, src.rgb * dst.a + dst.rgb * src.a)); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_colordodge.glsl b/src/opengl/util/composition_mode_colordodge.glsl deleted file mode 100644 index b75e83cf4e..0000000000 --- a/src/opengl/util/composition_mode_colordodge.glsl +++ /dev/null @@ -1,15 +0,0 @@ -// Dca' = Sca.Da + Dca.Sa <= Sa.Da ? -// Dca.Sa/(1 - Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa) : -// Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - vec3 temp = src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.rgb = mix(dst.rgb * src.a / max(1.0 - src.rgb / max(src.a, 0.000001), 0.000001) + temp, - src.a * dst.a + temp, - step(src.a * dst.a, src.rgb * dst.a + dst.rgb * src.a)); - - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_darken.glsl b/src/opengl/util/composition_mode_darken.glsl deleted file mode 100644 index 8bbb82b3ce..0000000000 --- a/src/opengl/util/composition_mode_darken.glsl +++ /dev/null @@ -1,9 +0,0 @@ -// Dca' = min(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = min(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_difference.glsl b/src/opengl/util/composition_mode_difference.glsl deleted file mode 100644 index 3c46ec71f2..0000000000 --- a/src/opengl/util/composition_mode_difference.glsl +++ /dev/null @@ -1,9 +0,0 @@ -// Dca' = Sca + Dca - 2.min(Sca.Da, Dca.Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = src.rgb + dst.rgb - 2.0 * min(src.rgb * dst.a, dst.rgb * src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_exclusion.glsl b/src/opengl/util/composition_mode_exclusion.glsl deleted file mode 100644 index 59c2da99ea..0000000000 --- a/src/opengl/util/composition_mode_exclusion.glsl +++ /dev/null @@ -1,9 +0,0 @@ -// Dca' = (Sca.Da + Dca.Sa - 2.Sca.Dca) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = (src.rgb * dst.a + dst.rgb * src.a - 2.0 * src.rgb * dst.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_hardlight.glsl b/src/opengl/util/composition_mode_hardlight.glsl deleted file mode 100644 index 4ea355029d..0000000000 --- a/src/opengl/util/composition_mode_hardlight.glsl +++ /dev/null @@ -1,14 +0,0 @@ -// Dca' = 2.Sca < Sa ? -// 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) : -// Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = mix(2.0 * src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - src.a * dst.a - 2.0 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - step(src.a, 2.0 * src.rgb)); - result.a = src.a + dst.a - src.a * dst.a; - - return result; -} diff --git a/src/opengl/util/composition_mode_lighten.glsl b/src/opengl/util/composition_mode_lighten.glsl deleted file mode 100644 index 13ef507a4c..0000000000 --- a/src/opengl/util/composition_mode_lighten.glsl +++ /dev/null @@ -1,9 +0,0 @@ -// Dca' = max(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = max(src.rgb * dst.a, dst.rgb * src.a) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_multiply.glsl b/src/opengl/util/composition_mode_multiply.glsl deleted file mode 100644 index f90b7f00ad..0000000000 --- a/src/opengl/util/composition_mode_multiply.glsl +++ /dev/null @@ -1,9 +0,0 @@ -// Dca' = Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_overlay.glsl b/src/opengl/util/composition_mode_overlay.glsl deleted file mode 100644 index f621bdee96..0000000000 --- a/src/opengl/util/composition_mode_overlay.glsl +++ /dev/null @@ -1,13 +0,0 @@ -// Dca' = 2.Dca < Da ? -// 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) -// Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - result.rgb = mix(2.0 * src.rgb * dst.rgb + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - src.a * dst.a - 2.0 * (dst.a - dst.rgb) * (src.a - src.rgb) + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a), - step(dst.a, 2.0 * dst.rgb)); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_mode_screen.glsl b/src/opengl/util/composition_mode_screen.glsl deleted file mode 100644 index 8f4f010032..0000000000 --- a/src/opengl/util/composition_mode_screen.glsl +++ /dev/null @@ -1,6 +0,0 @@ -// Dca' = Sca + Dca - Sca.Dca -// Da' = Sa + Da - Sa.Da -vec4 composite(vec4 src, vec4 dst) -{ - return src + dst - src * dst; -} diff --git a/src/opengl/util/composition_mode_softlight.glsl b/src/opengl/util/composition_mode_softlight.glsl deleted file mode 100644 index e4c1f89156..0000000000 --- a/src/opengl/util/composition_mode_softlight.glsl +++ /dev/null @@ -1,22 +0,0 @@ -// if 2.Sca <= Sa -// Dca' = Dca.(Sa + (2.Sca - Sa).(1 - Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa) -// otherwise if 2.Sca > Sa and 4.Dca <= Da -// Dca' = Dca.Sa + Da.(2.Sca - Sa).(4.Dca/Da.(4.Dca/Da + 1).(Dca/Da - 1) + 7.Dca/Da) + Sca.(1 - Da) + Dca.(1 - Sa) -// otherwise if 2.Sca > Sa and 4.Dca > Da -// Dca' = Dca.Sa + Da.(2.Sca - Sa).((Dca/Da)^0.5 - Dca/Da) + Sca.(1 - Da) + Dca.(1 - Sa) -// Da' = Sa + Da - Sa.Da - -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - float da = max(dst.a, 0.00001); - vec3 dst_np = dst.rgb / da; - result.rgb = mix(dst.rgb * (src.a + (2.0 * src.rgb - src.a) * (1.0 - dst_np)), - mix(dst.rgb * src.a + dst.a * (2.0 * src.rgb - src.a) * ((16.0 * dst_np - 12.0) * dst_np + 3.0) * dst_np, - dst.rgb * src.a + dst.a * (2.0 * src.rgb - src.a) * (sqrt(dst_np) - dst_np), - step(dst.a, 4.0 * dst.rgb)), - step(src.a, 2.0 * src.rgb)) - + src.rgb * (1.0 - dst.a) + dst.rgb * (1.0 - src.a); - result.a = src.a + dst.a - src.a * dst.a; - return result; -} diff --git a/src/opengl/util/composition_modes.conf b/src/opengl/util/composition_modes.conf deleted file mode 100644 index df52830b99..0000000000 --- a/src/opengl/util/composition_modes.conf +++ /dev/null @@ -1,12 +0,0 @@ -COMPOSITION_MODES_SIMPLE_PORTER_DUFF simple_porter_duff.glsl -COMPOSITION_MODES_MULTIPLY composition_mode_multiply.glsl -COMPOSITION_MODES_SCREEN composition_mode_screen.glsl -COMPOSITION_MODES_OVERLAY composition_mode_overlay.glsl -COMPOSITION_MODES_DARKEN composition_mode_darken.glsl -COMPOSITION_MODES_LIGHTEN composition_mode_lighten.glsl -COMPOSITION_MODES_COLORDODGE composition_mode_colordodge.glsl -COMPOSITION_MODES_COLORBURN composition_mode_colorburn.glsl -COMPOSITION_MODES_HARDLIGHT composition_mode_hardlight.glsl -COMPOSITION_MODES_SOFTLIGHT composition_mode_softlight.glsl -COMPOSITION_MODES_DIFFERENCE composition_mode_difference.glsl -COMPOSITION_MODES_EXCLUSION composition_mode_exclusion.glsl diff --git a/src/opengl/util/conical_brush.glsl b/src/opengl/util/conical_brush.glsl deleted file mode 100644 index b3ec1d7efe..0000000000 --- a/src/opengl/util/conical_brush.glsl +++ /dev/null @@ -1,27 +0,0 @@ -// conical gradient shader -#define M_PI 3.14159265358979323846 -uniform sampler1D palette; -uniform float angle; -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -vec4 brush() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); - vec2 A = hcoords.xy / hcoords.z; - -/* float val = fmod((atan2(-A.y, A.x) + angle) / (2.0 * M_PI), 1); */ - if (abs(A.y) == abs(A.x)) - A.y += 0.002; - float t = (atan(-A.y, A.x) + angle) / (2.0 * M_PI); - float val = t - floor(t); - return texture1D(palette, val); -} - diff --git a/src/opengl/util/ellipse_aa.glsl b/src/opengl/util/ellipse_aa.glsl deleted file mode 100644 index 257e3bbd47..0000000000 --- a/src/opengl/util/ellipse_aa.glsl +++ /dev/null @@ -1,58 +0,0 @@ -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -uniform vec2 ellipse_offset; - -// ellipse equation - -// s^2/a^2 + t^2/b^2 = 1 -// -// implicit equation: -// g(s,t) = 1 - s^2/r_s^2 - t^2/r_t^2 - -// distance from ellipse: -// grad = [dg/dx dg/dy] -// d(s, t) ~= g(s, t) / |grad| - -// dg/dx = dg/ds * ds/dx + dg/dt * dt/dx -// dg/dy = dg/ds * ds/dy + dg/dt * dt/dy - -float ellipse_aa() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy + ellipse_offset, 1); - float inv_w = 1.0 / hcoords.z; - vec2 st = hcoords.xy * inv_w; - - vec4 xy = vec4(mat[0].xy, mat[1].xy); - vec2 h = vec2(mat[0].z, mat[1].z); - - vec4 dstdxy = (xy.xzyw - h.xyxy * st.xxyy) * inv_w; - - //dstdxy.x = (mat[0].x - mat[0].z * st.x) * inv_w; // ds/dx - //dstdxy.y = (mat[1].x - mat[1].z * st.x) * inv_w; // ds/dy - //dstdxy.z = (mat[0].y - mat[0].z * st.y) * inv_w; // dt/dx - //dstdxy.w = (mat[1].y - mat[1].z * st.y) * inv_w; // dt/dy - - vec2 inv_r = gl_TexCoord[0].xy; - vec2 n = st * inv_r; - float g = 1.0 - dot(n, n); - - vec2 dgdst = -2.0 * n * inv_r; - - vec2 grad = vec2(dot(dgdst, dstdxy.xz), - dot(dgdst, dstdxy.yw)); - - return smoothstep(-0.5, 0.5, g * inversesqrt(dot(grad, grad))); -} - -void main() -{ - gl_FragColor = ellipse_aa().xxxx; -} diff --git a/src/opengl/util/fast_painter.glsl b/src/opengl/util/fast_painter.glsl deleted file mode 100644 index 63f5e5f3be..0000000000 --- a/src/opengl/util/fast_painter.glsl +++ /dev/null @@ -1,19 +0,0 @@ -// fast painter for composition modes which can be implemented with blendfuncs - -uniform sampler2D mask_texture; -uniform vec2 inv_mask_size; -uniform vec2 mask_offset; -uniform vec4 mask_channel; - -float mask() -{ - return dot(mask_channel, texture2D(mask_texture, (gl_FragCoord.xy + mask_offset) * inv_mask_size)); -} - -void main() -{ - // combine clip and coverage channels - float mask_alpha = mask(); - - gl_FragColor = brush() * mask_alpha; -} diff --git a/src/opengl/util/fragmentprograms_p.h b/src/opengl/util/fragmentprograms_p.h deleted file mode 100644 index b1a47e3d5f..0000000000 --- a/src/opengl/util/fragmentprograms_p.h +++ /dev/null @@ -1,7287 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** 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.1, 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. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef FRAGMENTPROGRAMS_P_H -#define FRAGMENTPROGRAMS_P_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, - VAR_INV_MATRIX_M1, - VAR_INV_MASK_SIZE, - VAR_INV_MATRIX_M2, - VAR_PORTERDUFF_AB, - VAR_MASK_CHANNEL, - VAR_ELLIPSE_OFFSET, - VAR_PORTERDUFF_XYZ, - VAR_INV_DST_SIZE, - VAR_MASK_TEXTURE, - VAR_DST_TEXTURE, - VAR_PALETTE, - VAR_MASK_OFFSET, - VAR_INV_BRUSH_TEXTURE_SIZE, - VAR_FMP2_M_RADIUS2, - VAR_FMP, - VAR_INV_MATRIX_M0, - VAR_ANGLE -}; - -enum FragmentBrushType { - FRAGMENT_PROGRAM_BRUSH_SOLID, - FRAGMENT_PROGRAM_BRUSH_RADIAL, - FRAGMENT_PROGRAM_BRUSH_CONICAL, - FRAGMENT_PROGRAM_BRUSH_LINEAR, - FRAGMENT_PROGRAM_BRUSH_TEXTURE, - FRAGMENT_PROGRAM_BRUSH_PATTERN -}; - -enum FragmentCompositionModeType { - COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - COMPOSITION_MODES_MULTIPLY, - COMPOSITION_MODES_SCREEN, - COMPOSITION_MODES_OVERLAY, - COMPOSITION_MODES_DARKEN, - COMPOSITION_MODES_LIGHTEN, - COMPOSITION_MODES_COLORDODGE, - COMPOSITION_MODES_COLORBURN, - COMPOSITION_MODES_HARDLIGHT, - COMPOSITION_MODES_SOFTLIGHT, - COMPOSITION_MODES_DIFFERENCE, - COMPOSITION_MODES_EXCLUSION, - COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - COMPOSITION_MODES_MULTIPLY_NOMASK, - COMPOSITION_MODES_SCREEN_NOMASK, - COMPOSITION_MODES_OVERLAY_NOMASK, - COMPOSITION_MODES_DARKEN_NOMASK, - COMPOSITION_MODES_LIGHTEN_NOMASK, - COMPOSITION_MODES_COLORDODGE_NOMASK, - COMPOSITION_MODES_COLORBURN_NOMASK, - COMPOSITION_MODES_HARDLIGHT_NOMASK, - COMPOSITION_MODES_SOFTLIGHT_NOMASK, - COMPOSITION_MODES_DIFFERENCE_NOMASK, - COMPOSITION_MODES_EXCLUSION_NOMASK, - COMPOSITION_MODE_BLEND_MODE_MASK, - COMPOSITION_MODE_BLEND_MODE_NOMASK -}; - -enum FragmentMaskType { - FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA, - FRAGMENT_PROGRAM_MASK_ELLIPSE_AA -}; - -static const unsigned int num_fragment_variables = 19; - -static const unsigned int num_fragment_brushes = 6; -static const unsigned int num_fragment_composition_modes = 26; -static const unsigned int num_fragment_masks = 2; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA = - "!!ARBfp1.0\n" - "PARAM c[1] = { { 0.5, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "ADD R3.z, fragment.position.x, c[0].x;\n" - "ADD R0.y, fragment.position, -c[0].x;\n" - "MAX R4.x, fragment.texcoord[0].y, R0.y;\n" - "ADD R0.x, fragment.position.y, c[0];\n" - "MIN R3.w, R0.x, fragment.texcoord[0].x;\n" - "ADD R2.z, fragment.position.x, -c[0].x;\n" - "MOV R2.w, R3.z;\n" - "MOV R0.yw, R4.x;\n" - "MOV R0.xz, R3.w;\n" - "MAD R0, fragment.texcoord[1].xxzz, R0, fragment.texcoord[1].yyww;\n" - "MAD R0.zw, fragment.position.x, c[0].y, -R0;\n" - "MOV R2.x, R0;\n" - "MOV R2.y, R0.z;\n" - "MOV R1.w, R0;\n" - "MOV R1.z, R0.y;\n" - "MIN R1.xy, R2, R1.zwzw;\n" - "SGE R0.xy, R1.zwzw, R2;\n" - "ADD R0.zw, -fragment.texcoord[0], -fragment.texcoord[0];\n" - "MAD R3.xy, R0, R0.zwzw, fragment.texcoord[0].zwzw;\n" - "ADD R0, -R1.xxyy, R2.zwzw;\n" - "MAD R0, R0, R3.xxyy, R4.x;\n" - "ADD R3.xy, R0.ywzw, R0.xzzw;\n" - "ADD R4.zw, R3.w, -R0.xyxz;\n" - "ADD R0.zw, -R4.x, R0.xyyw;\n" - "ADD R0.xy, R3.z, -R1;\n" - "MAX R1.zw, R2.xyxy, R1;\n" - "MUL R0.xy, R0, R0.zwzw;\n" - "MAD R3.xy, -R3, c[0].x, R3.w;\n" - "ADD R2.w, R3.z, -R2.z;\n" - "MUL R2.xy, R3, R2.w;\n" - "ADD R2.w, R3, -R4.x;\n" - "ADD R3.xy, -R2.z, R1.zwzw;\n" - "MUL R3.xy, R4.zwzw, R3;\n" - "ADD R4.zw, R1.xyxy, R1;\n" - "MAD R0.zw, R4, c[0].x, -R2.z;\n" - "MAD R0.xy, -R0, c[0].x, R2.w;\n" - "MAD R4.zw, R0, R2.w, -R0.xyxy;\n" - "SGE R0.zw, R3.z, R1;\n" - "MAD R0.xy, R0.zwzw, R4.zwzw, R0;\n" - "MAD R3.xy, R3, c[0].x, -R2;\n" - "MAD R0.zw, R0, R3.xyxy, R2.xyxy;\n" - "ADD R2.xy, R0.zwzw, -R0;\n" - "SGE R0.zw, R2.z, R1.xyxy;\n" - "MAD R0.xy, R0.zwzw, R2, R0;\n" - "SGE R0.zw, R1, R2.z;\n" - "ADD R0.xy, R0, -R2.w;\n" - "SGE R1.xy, R3.z, R1;\n" - "MAD R0.xy, R1, R0, R2.w;\n" - "MAD R0.x, -R0, R0.z, R2.w;\n" - "SGE R0.z, R3.w, R4.x;\n" - "MAD R0.x, -R0.y, R0.w, R0;\n" - "MUL result.color, R0.x, R0.z;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..3],\n" - " { -2, 1, -0.5, 2 },\n" - " { 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[0];\n" - "MOV R1.zw, c[1].xyxy;\n" - "MOV R0.x, c[0].z;\n" - "MOV R0.y, c[1].z;\n" - "MAD R0, R0.zzww, -R0.xyxy, R1.xzyw;\n" - "MUL R1.xy, R2, fragment.texcoord[0];\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.zw, R1.xyxy, R0.xyyw;\n" - "ADD R0.y, R0.z, R0.w;\n" - "ADD R0.x, R1.z, R1.w;\n" - "MUL R0.xy, R0, R0;\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, R2.xyxy, R2.xyxy;\n" - "ADD R0.z, R0, R0.w;\n" - "ADD R0.y, -R0.z, c[4];\n" - "RSQ R0.x, R0.x;\n" - "MAD_SAT R0.x, R0, R0.y, -c[4].z;\n" - "MUL R0.y, -R0.x, c[4].w;\n" - "ADD R0.y, R0, c[5].x;\n" - "MUL R0.x, R0, R0;\n" - "MUL result.color, R0.x, R0.y;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = - "!!ARBfp1.0\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 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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN = - "!!ARBfp1.0\n" - "PARAM c[4] = { program.local[0..3] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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" - "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n" - "ADD R0.xyz, R1.w, -R1;\n" - "MUL R0.xyz, R0, R2;\n" - "MUL R0.xyz, R0, c[4].x;\n" - "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "MUL R2.xyz, fragment.color.primary, R1;\n" - "MAD R2.xyz, R2, c[4].x, R3;\n" - "ADD R0.w, -fragment.color.primary, c[4].y;\n" - "MAD R3.xyz, R1, R0.w, R0;\n" - "MAD R2.xyz, R1, R0.w, R2;\n" - "MUL R0.xyz, R1, c[4].x;\n" - "SGE R0.xyz, R0, R1.w;\n" - "ADD R3.xyz, R3, -R2;\n" - "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[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[3];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[1];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -fragment.color.primary.w, c[4];\n" - "MAX R1.y, fragment.color.primary.w, c[4];\n" - "MUL R2.xyz, R0, R1.x;\n" - "ADD R1.w, -R0, c[4].x;\n" - "MAD R3.xyz, fragment.color.primary, R1.w, R2;\n" - "RCP R1.y, R1.y;\n" - "MAD R1.xyz, -fragment.color.primary, R1.y, c[4].x;\n" - "MAX R1.xyz, R1, c[4].y;\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" - "RCP R1.z, R1.z;\n" - "MAD R1.xyz, R2, R1, R3;\n" - "MAD R3.xyz, fragment.color.primary.w, R0.w, R3;\n" - "MAD R2.xyz, fragment.color.primary, R0.w, R2;\n" - "ADD R3.xyz, R3, -R1;\n" - "SGE R2.xyz, R2, R1.w;\n" - "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[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_COLORBURN = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\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[1];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.w, -R0, c[4].x;\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" - "MUL R1.xyz, R0, R2.w;\n" - "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" - "MAD R3.xyz, R0, R2.w, R3;\n" - "MUL R1.w, fragment.color.primary, R0;\n" - "ADD R3.xyz, R3, -R1;\n" - "SGE R2.xyz, R2, R1.w;\n" - "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[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_HARDLIGHT = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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" - "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n" - "ADD R0.xyz, R1.w, -R1;\n" - "MUL R0.xyz, R0, R2;\n" - "MUL R0.xyz, R0, c[4].x;\n" - "MAD R0.xyz, fragment.color.primary.w, R1.w, -R0;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "MUL R2.xyz, fragment.color.primary, R1;\n" - "MAD R2.xyz, R2, c[4].x, R3;\n" - "ADD R0.w, -fragment.color.primary, c[4].y;\n" - "MAD R3.xyz, R1, R0.w, R0;\n" - "MAD R2.xyz, R1, R0.w, R2;\n" - "MUL R0.xyz, fragment.color.primary, c[4].x;\n" - "SGE R0.xyz, R0, fragment.color.primary.w;\n" - "ADD R3.xyz, R3, -R2;\n" - "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[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[3];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..3],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\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[1];\n" - "TEX R0, R0, texture[0], 2D;\n" - "MAX R1.x, R0.w, c[4].z;\n" - "RCP R1.x, R1.x;\n" - "MUL R2.xyz, R0, R1.x;\n" - "MAD R1.xyz, R2, c[5].x, -c[5].y;\n" - "MAD R3.xyz, R2, R1, c[5].z;\n" - "MAD R1.xyz, fragment.color.primary, c[4].y, -fragment.color.primary.w;\n" - "MUL R4.xyz, R0.w, R1;\n" - "MUL R5.xyz, R4, R3;\n" - "RSQ R1.w, R2.x;\n" - "RSQ R2.w, R2.z;\n" - "RCP R3.x, R1.w;\n" - "RSQ R1.w, R2.y;\n" - "MUL R5.xyz, R2, R5;\n" - "RCP R3.z, R2.w;\n" - "RCP R3.y, R1.w;\n" - "ADD R3.xyz, -R2, R3;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, -R2, c[4].x;\n" - "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n" - "MUL R2.xyz, fragment.color.primary, c[4].y;\n" - "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n" - "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n" - "ADD R5.xyz, R3, -R4;\n" - "MUL R3.xyz, R0, c[4].w;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R3.xyz, R3, R5, R4;\n" - "MAD R3.xyz, -R0, R1, R3;\n" - "MUL R1.xyz, R0, R1;\n" - "SGE R2.xyz, R2, fragment.color.primary.w;\n" - "MAD R2.xyz, R2, R3, R1;\n" - "ADD R1.x, -R0.w, c[4];\n" - "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n" - "ADD R1.x, -fragment.color.primary.w, c[4];\n" - "MAD R2.xyz, R0, R1.x, R2;\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_DIFFERENCE = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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..2],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "MUL R0.xy, fragment.position, c[2];\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" - "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, R2.x;\n" - "MUL R0.y, fragment.color.primary.w, R1.w;\n" - "DP3 result.color.w, R0, c[1];\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 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" - "ADD R1.x, -R0.w, c[1];\n" - "MUL R1.xyz, fragment.color.primary, R1.x;\n" - "ADD R1.w, fragment.color.primary, R0;\n" - "MAD R1.xyz, fragment.color.primary, R0, R1;\n" - "ADD R2.x, -fragment.color.primary.w, c[1];\n" - "MAD result.color.xyz, R0, R2.x, R1;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[1] = { program.local[0] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "MUL R0.xy, fragment.position, c[0];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1, fragment.color.primary, R0;\n" - "MAD result.color, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[0];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.w, -R0, c[1].y;\n" - "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n" - "ADD R1.xyz, R0.w, -R0;\n" - "MUL R1.xyz, R1, R2;\n" - "MUL R1.xyz, R1, c[1].x;\n" - "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n" - "MUL R3.xyz, fragment.color.primary, R1.w;\n" - "MUL R2.xyz, fragment.color.primary, R0;\n" - "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" - "ADD R1.w, -fragment.color.primary, c[1].y;\n" - "MAD R2.xyz, R2, c[1].x, R3;\n" - "MAD R2.xyz, R0, R1.w, R2;\n" - "MAD R1.xyz, R0, R1.w, R1;\n" - "MUL R0.xyz, R0, c[1].x;\n" - "ADD R1.w, fragment.color.primary, R0;\n" - "ADD R1.xyz, R1, -R2;\n" - "SGE R0.xyz, R0, R0.w;\n" - "MAD result.color.xyz, R0, R1, R2;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 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 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" - "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" - "MAD result.color.xyz, R0, R2.x, R1;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 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 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" - "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" - "MAD result.color.xyz, R0, R2.x, R1;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 1, 1e-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "MAX R1.y, fragment.color.primary.w, c[1];\n" - "RCP R2.x, R1.y;\n" - "MUL R0.xy, fragment.position, c[0];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -fragment.color.primary.w, c[1];\n" - "MUL R1.xyz, R0, R1.x;\n" - "ADD R1.w, -R0, c[1].x;\n" - "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, 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" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R0, R2, R1;\n" - "MAD R1.xyz, fragment.color.primary.w, R0.w, R1;\n" - "MAD R0.xyz, fragment.color.primary, R0.w, R0;\n" - "SGE R0.xyz, R0, R1.w;\n" - "ADD R1.xyz, R1, -R2;\n" - "ADD R1.w, fragment.color.primary, R0;\n" - "MAD result.color.xyz, R0, R1, R2;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "MUL R0.xy, fragment.position, c[0];\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" - "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[1].y;\n" - "ADD R1.w, -R0, c[1].x;\n" - "MUL R4.xyz, fragment.color.primary, R1.w;\n" - "ADD R2.w, -fragment.color.primary, c[1].x;\n" - "RCP R1.x, R1.x;\n" - "RCP R1.y, R1.y;\n" - "RCP R1.z, R1.z;\n" - "MAD R1.xyz, R3, R1, R4;\n" - "MUL R3.xyz, R0, R2.w;\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" - "SGE R2.xyz, R2, R1.w;\n" - "ADD R0.xyz, R0, -R1;\n" - "ADD R1.w, fragment.color.primary, R0;\n" - "MAD result.color.xyz, R2, R0, R1;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "MUL R0.xy, fragment.position, c[0];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.w, -R0, c[1].y;\n" - "ADD R2.xyz, fragment.color.primary.w, -fragment.color.primary;\n" - "ADD R1.xyz, R0.w, -R0;\n" - "MUL R1.xyz, R1, R2;\n" - "MUL R1.xyz, R1, c[1].x;\n" - "MAD R1.xyz, fragment.color.primary.w, R0.w, -R1;\n" - "MAD R1.xyz, fragment.color.primary, R1.w, R1;\n" - "MUL R3.xyz, fragment.color.primary, R1.w;\n" - "MUL R2.xyz, fragment.color.primary, R0;\n" - "ADD R1.w, -fragment.color.primary, c[1].y;\n" - "MAD R2.xyz, R2, c[1].x, R3;\n" - "MAD R2.xyz, R0, R1.w, R2;\n" - "MAD R0.xyz, R0, R1.w, R1;\n" - "ADD R1.xyz, R0, -R2;\n" - "MUL R0.xyz, fragment.color.primary, c[1].x;\n" - "ADD R1.w, fragment.color.primary, R0;\n" - "SGE R0.xyz, R0, fragment.color.primary.w;\n" - "MAD result.color.xyz, R0, R1, R2;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[3] = { program.local[0],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\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[0];\n" - "TEX R0, R0, texture[0], 2D;\n" - "MAX R1.x, R0.w, c[1].z;\n" - "RCP R1.x, R1.x;\n" - "MUL R2.xyz, R0, R1.x;\n" - "MAD R1.xyz, R2, c[2].x, -c[2].y;\n" - "MAD R3.xyz, R2, R1, c[2].z;\n" - "MAD R1.xyz, fragment.color.primary, c[1].y, -fragment.color.primary.w;\n" - "MUL R4.xyz, R0.w, R1;\n" - "MUL R5.xyz, R4, R3;\n" - "RSQ R1.w, R2.x;\n" - "RCP R3.x, R1.w;\n" - "RSQ R2.w, R2.z;\n" - "RSQ R1.w, R2.y;\n" - "MUL R5.xyz, R2, R5;\n" - "RCP R3.z, R2.w;\n" - "RCP R3.y, R1.w;\n" - "ADD R3.xyz, -R2, R3;\n" - "MUL R3.xyz, R4, R3;\n" - "ADD R2.xyz, -R2, c[1].x;\n" - "MAD R1.xyz, R1, R2, fragment.color.primary.w;\n" - "MUL R2.xyz, fragment.color.primary, c[1].y;\n" - "MAD R4.xyz, fragment.color.primary.w, R0, R5;\n" - "MAD R3.xyz, fragment.color.primary.w, R0, R3;\n" - "ADD R5.xyz, R3, -R4;\n" - "MUL R3.xyz, R0, c[1].w;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R3.xyz, R3, R5, R4;\n" - "MAD R3.xyz, -R0, R1, R3;\n" - "MUL R1.xyz, R0, R1;\n" - "SGE R2.xyz, R2, fragment.color.primary.w;\n" - "MAD R2.xyz, R2, R3, R1;\n" - "ADD R1.x, -R0.w, c[1];\n" - "MAD R2.xyz, fragment.color.primary, R1.x, R2;\n" - "ADD R1.x, fragment.color.primary.w, R0.w;\n" - "ADD R1.y, -fragment.color.primary.w, c[1].x;\n" - "MAD result.color.xyz, R0, R1.y, R2;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\n" - " { 2 } };\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 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" - "ADD R0.xyz, fragment.color.primary, R0;\n" - "MAD result.color.xyz, -R1, c[1].x, R0;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[2] = { program.local[0],\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, 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].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].y;\n" - "MAD result.color.xyz, R0, R2.x, R1;\n" - "MAD result.color.w, -fragment.color.primary, R0, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\n" - "PARAM c[3] = { program.local[0..2] };\n" - "TEMP R0;\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" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\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..8],\n" - " { 2, 4, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[0];\n" - "ADD R0.x, R0, R0.y;\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..8],\n" - " { 2, 4 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[9].x;\n" - "MOV R0.x, c[9];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[9].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "ADD R3.xy, fragment.position, c[7];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.z, R0.x, R0;\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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[9].x;\n" - "MOV R0.x, c[9];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[9].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "ADD R2.w, -R1, c[9].z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\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].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[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[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[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[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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\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, -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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\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, -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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[9].x;\n" - "MOV R0.x, c[9];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[9].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MAX R1.x, R0.w, c[9].w;\n" - "RCP R1.x, R1.x;\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[9].z;\n" - "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[9].z;\n" - "MAD R4.xyz, R0, R2.w, R3;\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" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R3, R2, R4;\n" - "MAD R4.xyz, R0.w, R1.w, R4;\n" - "ADD R4.xyz, R4, -R2;\n" - "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[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[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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\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.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[2], 1D;\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].w;\n" - "ADD R2.w, -R1, c[9].z;\n" - "MUL R5.xyz, R0, R2.w;\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" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R1, R3.w;\n" - "MAD R0.xyz, R0, R2.w, R4;\n" - "MUL R2.w, R0, R1;\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[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[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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[9].x;\n" - "MOV R0.x, c[9];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[9].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "ADD R2.w, -R1, c[9].z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[2], 1D;\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].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[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" - "ADD R2.xyz, R2, -R3;\n" - "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[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[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..8],\n" - " { 2, 4, 1, 9.9999997e-006 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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[0];\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" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "ADD R0.y, -R0.x, R0;\n" - "MOV R0.x, c[9];\n" - "MUL R0.x, R0, c[1];\n" - "MAX R0.z, R1.w, c[9].w;\n" - "RCP R0.z, R0.z;\n" - "MUL R3.xyz, R1, R0.z;\n" - "MAD R4.xyz, R3, c[10].x, -c[10].y;\n" - "RCP R0.x, R0.x;\n" - "MUL R0.x, R0.y, R0;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MAD R2.xyz, R0, c[9].x, -R0.w;\n" - "MAD R4.xyz, R3, R4, c[10].z;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[9].z;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[9].x;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[9].y;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R2.xyz, R1, R2;\n" - "ADD R2.w, -R1, c[9].z;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, -R0.w, c[9].z;\n" - "MAD R2.xyz, R1, R0.x, R2;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\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[8];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[8].x;\n" - "MUL R0.z, R0, c[8].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 R0.y, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[7].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R1, c[5].y;\n" - "MOV R0.x, c[8];\n" - "MUL R0.x, R0, c[1];\n" - "RCP R0.x, R0.x;\n" - "MUL R0.x, R0.y, R0;\n" - "TEX R0, R0, texture[1], 1D;\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[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..5],\n" - " { 2, 4, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].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 R0.y, -R0, R0.z;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MOV R0.x, c[6];\n" - "MUL R0.x, R0, c[1];\n" - "RCP R0.x, R0.x;\n" - "MUL R0.x, R0.y, R0;\n" - "TEX R0, R0, texture[1], 1D;\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[6].z;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MUL R0.x, R0, R0.y;\n" - "TEX R0, R0, texture[1], 1D;\n" - "ADD R2, R0, R1;\n" - "MAD result.color, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[5];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "ADD R2.w, -R1, c[6].z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\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" - "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[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[6].x;\n" - "ADD R2.w, R0, R1;\n" - "ADD R2.xyz, R2, -R0;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD result.color.xyz, R1, R2, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\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, R0.w, R1;\n" - "MIN R2.xyz, 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[6].z;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\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, R0.w, R1;\n" - "MAX R2.xyz, 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[6].z;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MAX R1.x, R0.w, c[6].w;\n" - "RCP R1.x, R1.x;\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[6].z;\n" - "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[6].z;\n" - "MAD R3.xyz, R0, R2.w, R3;\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" - "ADD R1.x, R0.w, R1.w;\n" - "ADD R3.xyz, R3, -R2;\n" - "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R3, R2;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\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.w, R1;\n" - "MAD R3.xyz, R0, R1.w, R2;\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[6].w;\n" - "MUL R5.xyz, R0, R2.w;\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" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R1, R3.w;\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" - "SGE R2.xyz, R3, R2.x;\n" - "MAD result.color.xyz, R2, R1, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.z, R0.y, R0.y, -R0;\n" - "MUL R1.xy, fragment.position, c[5];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RSQ R0.z, R0.z;\n" - "RCP R0.x, R0.z;\n" - "ADD R2.w, -R1, c[6].z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0.y, R0;\n" - "MUL R0.x, R0, R0.z;\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" - "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[6].z;\n" - "MUL R0.xyz, R0, c[6].x;\n" - "MAD R2.xyz, R1, R2.w, R2;\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" - "SGE R0.xyz, R0, R0.w;\n" - "MAD result.color.xyz, R0, R2, R1;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..5],\n" - " { 2, 4, 1, 9.9999997e-006 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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[0];\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" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "MAD R0.y, R0.x, R0.x, -R0;\n" - "RSQ R0.y, R0.y;\n" - "RCP R0.y, R0.y;\n" - "ADD R0.y, -R0.x, R0;\n" - "MOV R0.x, c[6];\n" - "MUL R0.x, R0, c[1];\n" - "MAX R0.z, R1.w, c[6].w;\n" - "RCP R0.z, R0.z;\n" - "MUL R3.xyz, R1, R0.z;\n" - "MAD R4.xyz, R3, c[7].x, -c[7].y;\n" - "RCP R0.x, R0.x;\n" - "MUL R0.x, R0.y, R0;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MAD R2.xyz, R0, c[6].x, -R0.w;\n" - "MAD R4.xyz, R3, R4, c[7].z;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[6].z;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[6].x;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[6].y;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "MUL R2.xyz, R1, R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "ADD R2.w, -R1, c[6].z;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, R0.w, R1.w;\n" - "ADD R0.y, -R0.w, c[6].z;\n" - "MAD result.color.xyz, R1, R0.y, R2;\n" - "MAD result.color.w, -R0, R1, R0.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\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, 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].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..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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.z, -R0, c[1].x;\n" - "MUL R0.y, R0.x, c[6].x;\n" - "MUL R0.z, R0, c[6].y;\n" - "MAD R0.x, R0.y, R0.y, -R0.z;\n" - "RSQ R0.z, R0.x;\n" - "MOV R0.x, c[6];\n" - "MUL R0.w, R0.x, c[1].x;\n" - "RCP R0.z, R0.z;\n" - "ADD R0.x, -R0.y, R0.z;\n" - "RCP R0.y, R0.w;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\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.w, R1;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\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[6].z;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\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[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[0];\n" - "ADD R0.x, R0, R0.y;\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.x, c[8];\n" - "MUL R0.x, R0, c[1];\n" - "RCP R1.y, R0.x;\n" - "ADD R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "MUL R0.zw, R0, c[5].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "MUL R1.x, R1, R1.y;\n" - "DP4 R1.y, R0, c[7];\n" - "TEX R0, R1, texture[1], 1D;\n" - "MUL result.color, R0, R1.y;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2, 4 } };\n" - "TEMP R0;\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" - "ADD R0.x, R0, 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.w, R0.y, c[1].x;\n" - "RCP R0.y, R0.z;\n" - "RCP R0.z, R0.w;\n" - "ADD R0.x, -R0, R0.y;\n" - "MUL R0.x, R0, R0.z;\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..9],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.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..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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.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..7],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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.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[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[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[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[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[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..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, -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..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, -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..7],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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.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[10].w;\n" - "RCP R1.x, R1.x;\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[10].z;\n" - "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[10].z;\n" - "MAD R4.xyz, R0, R2.w, R3;\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" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R3, R2, R4;\n" - "MAD R4.xyz, R0.w, R1.w, R4;\n" - "ADD R4.xyz, R4, -R2;\n" - "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[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[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..7],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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 R1.x, R0.y, c[8];\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R1.x;\n" - "ABS R0.z, -R0.y;\n" - "MAX R1.x, R0.w, R0.z;\n" - "RCP R1.y, R1.x;\n" - "MIN R1.x, R0.w, R0.z;\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.w, R0;\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, 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[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" - "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" - "MUL R2.w, R0, R1;\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[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[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..7],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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.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[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[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" - "ADD R2.xyz, R2, -R3;\n" - "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[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[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[13] = { program.local[0..7],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 0.15915494, 1, 2 },\n" - " { 9.9999997e-006, 4, 16, 12 },\n" - " { 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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 R1.x, R0.y, c[8];\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R1.x;\n" - "ABS R0.z, -R0.y;\n" - "MAX R1.x, R0.w, R0.z;\n" - "RCP R1.y, R1.x;\n" - "MIN R1.x, R0.w, R0.z;\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.w, R0;\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" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "CMP R0.x, -R0.y, -R0, R0;\n" - "MAX R0.z, R1.w, c[11].x;\n" - "RCP R2.x, R0.z;\n" - "MUL R3.xyz, R1, R2.x;\n" - "MAD R4.xyz, R3, c[11].z, -c[11].w;\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" - "MAD R2.xyz, R0, c[10].w, -R0.w;\n" - "MAD R4.xyz, R3, R4, c[12].x;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[10].z;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[10].w;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[11].y;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R2.xyz, R1, R2;\n" - "ADD R2.w, -R1, c[10].z;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, -R0.w, c[10].z;\n" - "MAD R2.xyz, R1, R0.x, R2;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE = - "!!ARBfp1.0\n" - "PARAM c[11] = { program.local[0..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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..7],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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..6],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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[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, 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[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..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.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[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[7].z;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.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" - "ADD R2, R0, R1;\n" - "MAD result.color, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 0.15915494, 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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" - "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[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[7].z;\n" - "ADD R2.w, R0, R1;\n" - "ADD R2.xyz, R2, -R0;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD result.color.xyz, R1, R2, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, R0.w, R1;\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, R1.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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, R0.w, R1;\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, R1.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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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.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[7].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[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R0, c[7].z;\n" - "MUL R3.xyz, R1, R2.w;\n" - "ADD R2.w, -R1, c[7].z;\n" - "MAD R3.xyz, R0, R2.w, R3;\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" - "ADD R1.x, R0.w, R1.w;\n" - "ADD R3.xyz, R3, -R2;\n" - "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R3, R2;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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 R1.x, R0.y, c[5];\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R1.x;\n" - "ABS R0.z, -R0.y;\n" - "MAX R1.x, R0.w, R0.z;\n" - "RCP R1.y, R1.x;\n" - "MIN R1.x, R0.w, R0.z;\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.w, R0;\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, 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[7].w;\n" - "MUL R5.xyz, R0, R2.w;\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" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R1, R3.w;\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" - "SGE R2.xyz, R3, R2.x;\n" - "MAD result.color.xyz, R2, R1, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 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[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.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[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[7];\n" - "MUL R0.xyz, R0, c[7].z;\n" - "MAD R2.xyz, R1, R2.w, R2;\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" - "SGE R0.xyz, R0, R0.w;\n" - "MAD result.color.xyz, R0, R2, R1;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..4],\n" - " { 0.0020000001, -0.01348047, 0.05747731, 0.1212391 },\n" - " { 0.1956359, 0.33299461, 0.99999559, 1.570796 },\n" - " { 3.141593, 0.15915494, 1, 2 },\n" - " { 9.9999997e-006, 4, 16, 12 },\n" - " { 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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 R1.x, R0.y, c[5];\n" - "ABS R0.z, R0;\n" - "CMP R0.y, -R0.z, R0, R1.x;\n" - "ABS R0.z, -R0.y;\n" - "MAX R1.x, R0.w, R0.z;\n" - "RCP R1.y, R1.x;\n" - "MIN R1.x, R0.w, R0.z;\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.w, R0;\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" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\n" - "CMP R0.x, -R0.y, -R0, R0;\n" - "MAX R0.z, R1.w, c[8].x;\n" - "RCP R2.x, R0.z;\n" - "MUL R3.xyz, R1, R2.x;\n" - "MAD R4.xyz, R3, c[8].z, -c[8].w;\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" - "MAD R2.xyz, R0, c[7].w, -R0.w;\n" - "MAD R4.xyz, R3, R4, c[9].x;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[7].z;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[7].w;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[8].y;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "MUL R2.xyz, R1, R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "ADD R2.w, -R1, c[7].z;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, R0.w, R1.w;\n" - "ADD R0.y, -R0.w, c[7].z;\n" - "MAD result.color.xyz, R1, R0.y, R2;\n" - "MAD result.color.w, -R0, R1, R0.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, 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[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..4],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559, 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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.w, R1;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\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[7].w;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..6],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559 } };\n" - "TEMP R0;\n" - "TEMP R1;\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.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.x, R0, c[0];\n" - "MUL R1.x, R0, c[7];\n" - "FLR R1.y, R1.x;\n" - "ADD R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "MUL R0.xy, R0.zwzw, c[4];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, R1, -R1.y;\n" - "DP4 R1.y, R0, c[6];\n" - "TEX R0, R1, texture[1], 1D;\n" - "MUL result.color, R0, R1.y;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..3],\n" - " { 0.15915494, 0.0020000001, 3.141593, 1.570796 },\n" - " { -0.01348047, 0.05747731, 0.1212391, 0.1956359 },\n" - " { 0.33299461, 0.99999559 } };\n" - "TEMP R0;\n" - "TEMP R1;\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.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" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF = - "!!ARBfp1.0\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[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.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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.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" - "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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..7] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "ADD R0.x, R0, R0.y;\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[0].z;\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[8].y;\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[8].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[8].y;\n" - "MAD R3.xyz, R3, c[8].x, R4;\n" - "MAD R3.xyz, R1, R2.x, R3;\n" - "MAD R0.xyz, R1, R2.x, R0;\n" - "MUL R2.xyz, R1, c[8].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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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, -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_LIGHTEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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, -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[0];\n" - "ADD R0.x, R0, R0.y;\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[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, 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" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R3, R2, R4;\n" - "MAD R4.xyz, R0.w, R1.w, R4;\n" - "ADD R4.xyz, R4, -R2;\n" - "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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -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-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[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[0];\n" - "ADD R0.x, R0, R0.y;\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 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[8].y;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[8].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "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" - "MUL R2.w, R0, R1;\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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 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[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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.x, R0, c[0].z;\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[8].y;\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[8].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[8].y;\n" - "MAD R3.xyz, R3, c[8].x, R4;\n" - "MUL R0.xyz, R0, c[8].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" - "ADD R2.xyz, R2, -R3;\n" - "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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT = - "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..7],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R1.xy, fragment.position, c[5];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MAX R0.z, R1.w, c[8];\n" - "RCP R0.z, R0.z;\n" - "MUL R3.xyz, R1, R0.z;\n" - "MAD R2.xyz, R3, c[9].x, -c[9].y;\n" - "MUL R0.x, R0, c[0].z;\n" - "TEX R0, R0, texture[2], 1D;\n" - "MAD R4.xyz, R3, R2, c[9].z;\n" - "MAD R2.xyz, R0, c[8].y, -R0.w;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[8].x;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[8].y;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[8].w;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R2.xyz, R1, R2;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R0.x, R2;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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..6],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "TEX R1, R0.zwzw, texture[0], 2D;\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, 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, R2.w;\n" - "DP3 result.color.w, R0, c[5];\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[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[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" - "MAD R0.xyz, R0, R1, R2;\n" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..4] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "ADD R2, R0, R1;\n" - "MAD result.color, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "ADD R0.x, R0, R0.y;\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" - "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[5].y;\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 R3.xyz, R0, R2.w;\n" - "MUL R0.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[5].y;\n" - "MAD R0.xyz, R0, c[5].x, R3;\n" - "MAD R0.xyz, R1, R2.w, R0;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R1.xyz, R1, c[5].x;\n" - "ADD R2.w, R0, R1;\n" - "ADD R2.xyz, R2, -R0;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD result.color.xyz, R1, R2, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R0, R1.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" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R0, R1.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" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "ADD R0.x, R0, R0.y;\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" - "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.x, -R0.w, c[5];\n" - "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, R0.w, R1;\n" - "MAD R0.xyz, R0, R1.w, R1;\n" - "MUL R2.w, R0, R1;\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 R2.xyz, R2, -R3;\n" - "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R2, R3;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -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-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[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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\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" - "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[5].y;\n" - "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[5].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R1, R3.w;\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" - "SGE R2.xyz, R3, R2.x;\n" - "MAD result.color.xyz, R2, R1, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 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[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[0];\n" - "ADD R0.x, R0, R0.y;\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" - "ADD R2.w, -R1, c[5].y;\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[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" - "MUL R0.xyz, R0, c[5].x;\n" - "ADD R2.w, -R0, c[5].y;\n" - "MAD R3.xyz, R3, c[5].x, R4;\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, R1, R3;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..4],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\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[0];\n" - "ADD R0.x, R0, R0.y;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "MAX R0.z, R1.w, c[5];\n" - "RCP R0.z, R0.z;\n" - "MUL R3.xyz, R1, R0.z;\n" - "MAD R2.xyz, R3, c[6].x, -c[6].y;\n" - "MUL R0.x, R0, c[0].z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MAD R4.xyz, R3, R2, c[6].z;\n" - "MAD R2.xyz, R0, c[5].y, -R0.w;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[5].x;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[5].y;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[5].w;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "MUL R2.xyz, R1, R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, R0.w, R1.w;\n" - "ADD R0.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R0.y, R2;\n" - "MAD result.color.w, -R0, R1, R0.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\n" - "MUL R2.xyz, R0, R1.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[5].x, R0;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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[0].z;\n" - "TEX R0, R0, texture[1], 1D;\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].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];\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..6] };\n" - "TEMP R0;\n" - "TEMP R1;\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[0].xyxy;\n" - "ADD R1.x, R0.z, R0.w;\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[0].z;\n" - "TEX R0, R1, texture[1], 1D;\n" - "MUL result.color, R0, R1.y;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[4] = { program.local[0..3] };\n" - "TEMP R0;\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[0];\n" - "ADD R0.x, R0, R0.y;\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..9],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP 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" - "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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..7] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 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[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[0];\n" - "TEX R0, R0, texture[2], 2D;\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" - "ADD R2.xyz, R1.w, -R1;\n" - "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[8].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[8].y;\n" - "MAD R3.xyz, R3, c[8].x, R4;\n" - "MAD R3.xyz, R1, R2.x, R3;\n" - "MAD R0.xyz, R1, R2.x, R0;\n" - "MUL R2.xyz, R1, c[8].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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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, -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_LIGHTEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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, -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[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 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, 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" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R3, R2, R4;\n" - "MAD R4.xyz, R0.w, R1.w, R4;\n" - "ADD R4.xyz, R4, -R2;\n" - "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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -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-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[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.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 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[8].y;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[8].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "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" - "MUL R2.w, R0, R1;\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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 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[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[0];\n" - "TEX R0, R0, texture[2], 2D;\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" - "ADD R2.xyz, R1.w, -R1;\n" - "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[8].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[8].y;\n" - "MAD R3.xyz, R3, c[8].x, R4;\n" - "MUL R0.xyz, R0, c[8].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" - "ADD R2.xyz, R2, -R3;\n" - "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[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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT = - "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..7],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[2];\n" - "MUL R1.xy, fragment.position, c[5];\n" - "TEX R1, R1, texture[0], 2D;\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" - "MAX R0.w, R1, c[8].z;\n" - "RCP R0.w, R0.w;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MAD R2.xyz, R3, c[9].x, -c[9].y;\n" - "MUL R0.xy, R0, c[0];\n" - "TEX R0, R0, texture[2], 2D;\n" - "MAD R4.xyz, R3, R2, c[9].z;\n" - "MAD R2.xyz, R0, c[8].y, -R0.w;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[8].x;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[8].y;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[8].w;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MUL R2.xyz, R1, R2;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, -R0.w, c[8];\n" - "MAD R2.xyz, R1, R0.x, R2;\n" - "ADD R0.z, R0.w, R1.w;\n" - "MAD R2.w, -R0, R1, R0.z;\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[7];\n" - "MAD result.color, R0.x, R2, R1;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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..6],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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 R1.xy, fragment.position, c[6];\n" - "TEX R1, R1, texture[0], 2D;\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, 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, R2.w;\n" - "DP3 result.color.w, R0, c[5];\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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 R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\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" - "MAD R0.xyz, R0, R1, R2;\n" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..4] };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.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" - "ADD R2, R0, R1;\n" - "MAD result.color, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0, R0, texture[1], 2D;\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" - "ADD R2.w, -R1, c[5].y;\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 R3.xyz, R0, R2.w;\n" - "MUL R0.xyz, R0, R1;\n" - "ADD R2.w, -R0, c[5].y;\n" - "MAD R0.xyz, R0, c[5].x, R3;\n" - "MAD R0.xyz, R1, R2.w, R0;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R1.xyz, R1, c[5].x;\n" - "ADD R2.w, R0, R1;\n" - "ADD R2.xyz, R2, -R0;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD result.color.xyz, R1, R2, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, 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" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, 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" - "ADD R2.x, R0.w, R1.w;\n" - "ADD R2.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[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 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.x, -R0.w, c[5];\n" - "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, R0.w, R1;\n" - "MAD R0.xyz, R0, R1.w, R1;\n" - "MUL R2.w, R0, R1;\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 R2.xyz, R2, -R3;\n" - "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R2, R3;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -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-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[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.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.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" - "MUL R4.xyz, R0.w, R2;\n" - "MAX R2.xyz, R0, c[5].y;\n" - "MUL R5.xyz, R0, R2.w;\n" - "ADD R3.w, -R0, c[5].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R1, R3.w;\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" - "SGE R2.xyz, R3, R2.x;\n" - "MAD result.color.xyz, R2, R1, R0;\n" - "MAD result.color.w, -R0, R1, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 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[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[0];\n" - "TEX R0, R0, texture[1], 2D;\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\n" - "ADD R2.w, -R1, c[5].y;\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[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" - "MUL R0.xyz, R0, c[5].x;\n" - "ADD R2.w, -R0, c[5].y;\n" - "MAD R3.xyz, R3, c[5].x, R4;\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, 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, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\n" - "TEMP R6;\n" - "MUL R0.xyz, fragment.position.y, c[2];\n" - "MUL R1.xy, fragment.position, c[4];\n" - "TEX R1, R1, texture[0], 2D;\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" - "MAX R0.w, R1, c[5].z;\n" - "RCP R0.w, R0.w;\n" - "MUL R3.xyz, R1, R0.w;\n" - "MAD R2.xyz, R3, c[6].x, -c[6].y;\n" - "MUL R0.xy, R0, c[0];\n" - "TEX R0, R0, texture[1], 2D;\n" - "MAD R4.xyz, R3, R2, c[6].z;\n" - "MAD R2.xyz, R0, c[5].y, -R0.w;\n" - "MUL R5.xyz, R1.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[5].x;\n" - "MAD R2.xyz, R2, R3, R0.w;\n" - "MUL R3.xyz, R0, c[5].y;\n" - "MAD R5.xyz, R0.w, R1, R6;\n" - "MAD R4.xyz, R0.w, R1, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R1, c[5].w;\n" - "SGE R4.xyz, R4, R1.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R1, R2, R4;\n" - "MUL R2.xyz, R1, R2;\n" - "SGE R3.xyz, R3, R0.w;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R0.x, R0.w, R1.w;\n" - "ADD R0.y, -R0.w, c[5].x;\n" - "MAD result.color.xyz, R1, R0.y, R2;\n" - "MAD result.color.w, -R0, R1, R0.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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, 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[5].x, R0;\n" - "MAD result.color.w, -R0, R1, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 2, 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.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.w, R1;\n" - "MAD R3.xyz, R0, R1.w, R2;\n" - "MUL R2.xyz, R0, R1;\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];\n" - "MAD result.color.xyz, R1, R2.y, R0;\n" - "MAD result.color.w, -R0, R1, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..6] };\n" - "TEMP R0;\n" - "TEMP 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" - "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[0];\n" - "TEX R0, R1, texture[1], 2D;\n" - "MUL result.color, R0, R1.z;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[4] = { program.local[0..3] };\n" - "TEMP R0;\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[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..9],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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.zw, R0.xyxy, c[0].xyxy;\n" - "TEX R1.x, R0.zwzw, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[7];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -R1, c[10];\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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.zw, R0.xyxy, c[0].xyxy;\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" - "ADD R1.x, -R1, c[8];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "ADD R2.x, -R0.w, c[8];\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" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "ADD R0.z, -R0.x, c[8].x;\n" - "ADD R3.xy, fragment.position, c[6];\n" - "MUL R1, fragment.color.primary, R0.z;\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_PATTERN_COMPOSITION_MODES_OVERLAY = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[0];\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "ADD R0.x, -R0, c[8];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "ADD R2.w, -R0, c[8].x;\n" - "ADD R3.xyz, R1.w, -R1;\n" - "ADD R2.xyz, R0.w, -R0;\n" - "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[8].y;\n" - "MAD R2.xyz, R1.w, R0.w, -R2;\n" - "MUL R4.xyz, R1, R2.w;\n" - "MUL R3.xyz, R1, R0;\n" - "MAD R1.xyz, R1, R2.w, R2;\n" - "ADD R2.x, -R1.w, c[8];\n" - "MAD R3.xyz, R3, c[8].y, R4;\n" - "MAD R3.xyz, R0, R2.x, R3;\n" - "MAD R1.xyz, R0, R2.x, R1;\n" - "MUL R2.xyz, R0, c[8].y;\n" - "ADD R1.xyz, R1, -R3;\n" - "SGE R2.xyz, R2, R0.w;\n" - "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[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_DARKEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R1.x, R0, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[5];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -R1, c[8];\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, -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_LIGHTEN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R1.x, R0, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[5];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -R1, c[8];\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, -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[0];\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "ADD R0.x, -R0, c[8];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MAX R0.x, R1.w, c[8].y;\n" - "RCP R0.x, R0.x;\n" - "MAD R2.xyz, -R1, R0.x, c[8].x;\n" - "MAX R2.xyz, R2, c[8].y;\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, 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" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R3, R2, R4;\n" - "MAD R4.xyz, R1.w, R0.w, R4;\n" - "ADD R4.xyz, R4, -R2;\n" - "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[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_COLORBURN = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\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[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[0];\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "ADD R1.x, -R0, c[8];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\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" - "MAX R2.xyz, R1, c[8].y;\n" - "ADD R2.w, -R0, c[8].x;\n" - "MUL R5.xyz, R1, R2.w;\n" - "ADD R3.w, -R1, c[8].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "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" - "MUL R2.w, R1, R0;\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[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_HARDLIGHT = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[0];\n" - "TEX R0.x, R0, texture[2], 2D;\n" - "ADD R0.x, -R0, c[8];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[5].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "ADD R2.w, -R0, c[8].x;\n" - "ADD R3.xyz, R1.w, -R1;\n" - "ADD R2.xyz, R0.w, -R0;\n" - "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[8].y;\n" - "MAD R2.xyz, R1.w, R0.w, -R2;\n" - "MUL R4.xyz, R1, R2.w;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R3.xyz, R1, R0;\n" - "ADD R2.w, -R1, c[8].x;\n" - "MAD R3.xyz, R3, c[8].y, R4;\n" - "MUL R1.xyz, R1, c[8].y;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD R3.xyz, R0, R2.w, R3;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "ADD R2.xyz, R2, -R3;\n" - "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[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_SOFTLIGHT = - "!!ARBfp1.0\n" - "PARAM c[10] = { program.local[0..7],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\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 R1.z, R1.z;\n" - "MUL R1.xy, R1, R1.z;\n" - "MUL R1.xy, R1, c[0];\n" - "TEX R1.x, R1, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[5];\n" - "TEX R0, R0, texture[0], 2D;\n" - "MAX R1.z, R0.w, c[8];\n" - "RCP R1.z, R1.z;\n" - "MUL R3.xyz, R0, R1.z;\n" - "MAD R2.xyz, R3, c[9].x, -c[9].y;\n" - "ADD R1.x, -R1, c[8];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MAD R4.xyz, R3, R2, c[9].z;\n" - "MAD R2.xyz, R1, c[8].y, -R1.w;\n" - "MUL R5.xyz, R0.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[8].x;\n" - "MAD R2.xyz, R2, R3, R1.w;\n" - "MUL R3.xyz, R1, c[8].y;\n" - "MAD R5.xyz, R1.w, R0, R6;\n" - "MAD R4.xyz, R1.w, R0, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R0, c[8].w;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R0, R2, R4;\n" - "SGE R3.xyz, R3, R1.w;\n" - "MUL R2.xyz, R0, R2;\n" - "ADD R2.w, -R0, c[8].x;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "ADD R1.x, -R1.w, c[8];\n" - "MAD R2.xyz, R0, R1.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_DIFFERENCE = - "!!ARBfp1.0\n" - "PARAM c[9] = { program.local[0..7],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R1.x, R0, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[5];\n" - "ADD R1.x, -R1, c[8];\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].y, 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" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R1.x, R0, texture[2], 2D;\n" - "MUL R0.xy, fragment.position, c[5];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R1.x, -R1, c[8];\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].y, R3;\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_SIMPLE_PORTER_DUFF_NOMASK = - "!!ARBfp1.0\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[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[0];\n" - "TEX R1.x, R0, texture[1], 2D;\n" - "MUL R0.zw, fragment.position.xyxy, c[6].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "MUL R2.xyz, R0, c[4].y;\n" - "ADD R1.x, -R1, c[7];\n" - "MUL R1, fragment.color.primary, R1.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, R2.w;\n" - "DP3 result.color.w, R0, c[5];\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[0];\n" - "TEX R1.x, R0, texture[1], 2D;\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "ADD R1.x, -R1, c[5];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "ADD R2.x, -R0.w, c[5];\n" - "MUL R2.xyz, R1, R2.x;\n" - "MAD R1.xyz, R1, R0, R2;\n" - "ADD R2.x, R1.w, R0.w;\n" - "ADD R2.y, -R1.w, c[5].x;\n" - "MAD result.color.xyz, R0, R2.y, R1;\n" - "MAD result.color.w, -R1, R0, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "ADD R2, R1, R0;\n" - "MAD result.color, -R1, R0, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R0.x, -R0, c[5];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "ADD R3.xyz, R1.w, -R1;\n" - "ADD R2.xyz, R0.w, -R0;\n" - "MUL R2.xyz, R2, R3;\n" - "ADD R2.w, -R0, c[5].x;\n" - "MUL R2.xyz, R2, c[5].y;\n" - "MAD R2.xyz, R1.w, R0.w, -R2;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R3.xyz, R1, R2.w;\n" - "MUL R1.xyz, R1, R0;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R1.xyz, R1, c[5].y, R3;\n" - "MAD R1.xyz, R0, R2.w, R1;\n" - "MAD R2.xyz, R0, R2.w, R2;\n" - "MUL R0.xyz, R0, c[5].y;\n" - "ADD R2.w, R1, R0;\n" - "ADD R2.xyz, R2, -R1;\n" - "SGE R0.xyz, R0, R0.w;\n" - "MAD result.color.xyz, R0, R2, R1;\n" - "MAD result.color.w, -R1, R0, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R2.xyz, R1, R0.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" - "ADD R2.x, R1.w, R0.w;\n" - "ADD R2.y, -R1.w, c[5].x;\n" - "MAD result.color.xyz, R0, R2.y, R1;\n" - "MAD result.color.w, -R1, R0, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R2.xyz, R1, R0.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" - "ADD R2.x, R1.w, R0.w;\n" - "ADD R2.y, -R1.w, c[5].x;\n" - "MAD result.color.xyz, R0, R2.y, R1;\n" - "MAD result.color.w, -R1, R0, R2.x;\n" - "END\n" - ; - -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-006 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R0.x, -R0, c[5];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MAX R0.x, R1.w, c[5].y;\n" - "RCP R0.x, R0.x;\n" - "MAD R3.xyz, -R1, R0.x, c[5].x;\n" - "MAX R3.xyz, R3, c[5].y;\n" - "MUL R0.xy, fragment.position, c[4];\n" - "TEX R0, R0, texture[0], 2D;\n" - "ADD R2.x, -R1.w, c[5];\n" - "MUL R2.xyz, R0, R2.x;\n" - "ADD R2.w, -R0, c[5].x;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R0.xyz, R1.w, R0;\n" - "RCP R3.x, R3.x;\n" - "RCP R3.y, R3.y;\n" - "RCP R3.z, R3.z;\n" - "MAD R3.xyz, R0, R3, R2;\n" - "MAD R0.xyz, R1, R0.w, R0;\n" - "MAD R2.xyz, R1.w, R0.w, R2;\n" - "MUL R2.w, R1, R0;\n" - "ADD R1.x, R1.w, R0.w;\n" - "ADD R2.xyz, R2, -R3;\n" - "SGE R0.xyz, R0, R2.w;\n" - "MAD result.color.xyz, R0, R2, R3;\n" - "MAD result.color.w, -R1, R0, R1.x;\n" - "END\n" - ; - -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-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[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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\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" - "MUL R4.xyz, R1.w, R2;\n" - "MAX R2.xyz, R1, c[5].y;\n" - "MUL R5.xyz, R1, R2.w;\n" - "ADD R3.w, -R1, c[5].x;\n" - "RCP R2.x, R2.x;\n" - "RCP R2.y, R2.y;\n" - "RCP R2.z, R2.z;\n" - "MAD R2.xyz, R4, R2, R5;\n" - "MUL R4.xyz, R0, R3.w;\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" - "SGE R2.xyz, R3, R2.x;\n" - "MAD result.color.xyz, R2, R0, R1;\n" - "MAD result.color.w, -R1, R0, R2;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R0.x, -R0, c[5];\n" - "MUL R1, fragment.color.primary, R0.x;\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, texture[0], 2D;\n" - "ADD R2.w, -R0, c[5].x;\n" - "ADD R3.xyz, R1.w, -R1;\n" - "ADD R2.xyz, R0.w, -R0;\n" - "MUL R2.xyz, R2, R3;\n" - "MUL R2.xyz, R2, c[5].y;\n" - "MAD R2.xyz, R1.w, R0.w, -R2;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "MUL R4.xyz, R1, R2.w;\n" - "MUL R3.xyz, R1, R0;\n" - "MUL R1.xyz, R1, c[5].y;\n" - "ADD R2.w, -R1, c[5].x;\n" - "MAD R3.xyz, R3, c[5].y, R4;\n" - "MAD R3.xyz, R0, R2.w, R3;\n" - "MAD R0.xyz, R0, R2.w, R2;\n" - "ADD R2.x, R1.w, R0.w;\n" - "ADD R0.xyz, R0, -R3;\n" - "SGE R1.xyz, R1, R1.w;\n" - "MAD result.color.xyz, R1, R0, R3;\n" - "MAD result.color.w, -R1, R0, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[7] = { program.local[0..4],\n" - " { 1, 2, 9.9999997e-006, 4 },\n" - " { 16, 12, 3 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\n" - "TEMP R4;\n" - "TEMP R5;\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 R1.z, R1.z;\n" - "MUL R1.xy, R1, R1.z;\n" - "MUL R1.xy, R1, c[0];\n" - "TEX R1.x, R1, texture[1], 2D;\n" - "MUL R0.xy, fragment.position, c[4];\n" - "TEX R0, R0, texture[0], 2D;\n" - "MAX R1.z, R0.w, c[5];\n" - "RCP R1.z, R1.z;\n" - "MUL R3.xyz, R0, R1.z;\n" - "MAD R2.xyz, R3, c[6].x, -c[6].y;\n" - "ADD R1.x, -R1, c[5];\n" - "MUL R1, fragment.color.primary, R1.x;\n" - "MAD R4.xyz, R3, R2, c[6].z;\n" - "MAD R2.xyz, R1, c[5].y, -R1.w;\n" - "MUL R5.xyz, R0.w, R2;\n" - "MUL R6.xyz, R5, R4;\n" - "RSQ R2.w, R3.x;\n" - "RCP R4.x, R2.w;\n" - "RSQ R2.w, R3.y;\n" - "RSQ R3.w, R3.z;\n" - "RCP R4.y, R2.w;\n" - "RCP R4.z, R3.w;\n" - "ADD R4.xyz, -R3, R4;\n" - "MUL R6.xyz, R3, R6;\n" - "MUL R4.xyz, R5, R4;\n" - "ADD R3.xyz, -R3, c[5].x;\n" - "MAD R2.xyz, R2, R3, R1.w;\n" - "MUL R3.xyz, R1, c[5].y;\n" - "MAD R5.xyz, R1.w, R0, R6;\n" - "MAD R4.xyz, R1.w, R0, R4;\n" - "ADD R6.xyz, R4, -R5;\n" - "MUL R4.xyz, R0, c[5].w;\n" - "SGE R4.xyz, R4, R0.w;\n" - "MAD R4.xyz, R4, R6, R5;\n" - "MAD R4.xyz, -R0, R2, R4;\n" - "MUL R2.xyz, R0, R2;\n" - "SGE R3.xyz, R3, R1.w;\n" - "MAD R2.xyz, R3, R4, R2;\n" - "ADD R2.w, -R0, c[5].x;\n" - "MAD R2.xyz, R1, R2.w, R2;\n" - "ADD R1.x, R1.w, R0.w;\n" - "ADD R1.y, -R1.w, c[5].x;\n" - "MAD result.color.xyz, R0, R1.y, R2;\n" - "MAD result.color.w, -R1, R0, R1.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[6] = { program.local[0..4],\n" - " { 1, 2 } };\n" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, 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" - "ADD R0.xyz, R1, R0;\n" - "MIN R2.xyz, R2, R3;\n" - "ADD R1.x, R1.w, R0.w;\n" - "MAD result.color.xyz, -R2, c[5].y, R0;\n" - "MAD result.color.w, -R1, R0, R1.x;\n" - "END\n" - ; - -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" - "TEMP R0;\n" - "TEMP R1;\n" - "TEMP R2;\n" - "TEMP R3;\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[0];\n" - "TEX R0.x, R0, texture[1], 2D;\n" - "ADD R1.x, -R0, c[5];\n" - "MUL R0.zw, fragment.position.xyxy, c[4].xyxy;\n" - "TEX R0, R0.zwzw, 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[5].y, 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" - "ADD R2.y, -R1.w, c[5].x;\n" - "MAD result.color.xyz, R0, R2.y, R1;\n" - "MAD result.color.w, -R1, R0, R2.x;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK = - "!!ARBfp1.0\n" - "PARAM c[8] = { program.local[0..6],\n" - " { 1 } };\n" - "TEMP R0;\n" - "TEMP R1;\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[0].xyxy;\n" - "TEX R1.x, R0.zwzw, texture[1], 2D;\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" - "ADD R1.x, -R1, c[7];\n" - "MUL R0, fragment.color.primary, R1.x;\n" - "MUL result.color, R0, R1.y;\n" - "END\n" - ; - -static const char *FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK = - "!!ARBfp1.0\n" - "PARAM c[5] = { program.local[0..3],\n" - " { 1 } };\n" - "TEMP R0;\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[0];\n" - "TEX R0.x, R0, texture[0], 2D;\n" - "ADD R0.x, -R0, c[4];\n" - "MUL result.color, fragment.color.primary, R0.x;\n" - "END\n" - ; - -static const char *mask_fragment_program_sources[num_fragment_masks] = { - FragmentProgram_FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA, - FragmentProgram_FRAGMENT_PROGRAM_MASK_ELLIPSE_AA, -}; - -static const char *painter_fragment_program_sources[num_fragment_brushes][num_fragment_composition_modes] = { - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_SOLID_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_RADIAL_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_CONICAL_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_LINEAR_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_TEXTURE_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, - { - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SIMPLE_PORTER_DUFF_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_MULTIPLY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SCREEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_OVERLAY_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DARKEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_LIGHTEN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORDODGE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_COLORBURN_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_HARDLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_SOFTLIGHT_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_DIFFERENCE_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODES_EXCLUSION_NOMASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_MASK, - FragmentProgram_FRAGMENT_PROGRAM_BRUSH_PATTERN_COMPOSITION_MODE_BLEND_MODE_NOMASK, - }, -}; - -static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = { - { - { -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, }, - { -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, -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, -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, 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, 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, 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, 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, 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, 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, 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.cpp b/src/opengl/util/generator.cpp deleted file mode 100644 index 3d12446842..0000000000 --- a/src/opengl/util/generator.cpp +++ /dev/null @@ -1,500 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** 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.1, 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. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -QT_BEGIN_NAMESPACE - -QT_USE_NAMESPACE - -#define TAB " " - -typedef QPair QStringPair; - -QString readSourceFile(const QString &sourceFile, bool fragmentProgram = false) -{ - QFile file(sourceFile); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Missing source file" << sourceFile; - exit(0); - } - - QString source; - - QTextStream in(&file); - while (!in.atEnd()) { - QString line = in.readLine(); - - if (fragmentProgram && line[0] == '#' && !line.startsWith("#var")) - continue; - - if (fragmentProgram) - source.append(" \""); - - source.append(line); - - if (fragmentProgram) - source.append("\\n\""); - - source.append('\n'); - } - - if (fragmentProgram) - source.append(" ;\n"); - - return source; -} - -QList readConf(const QString &confFile) -{ - QFile file(confFile); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Missing file" << confFile; - exit(0); - } - - QList result; - - QTextStream in(&file); - while (!in.atEnd()) { - QString line = in.readLine(); - - if (line.startsWith('#')) - continue; - - QTextStream lineStream(&line); - - QString enumerator; - QString sourceFile; - - lineStream >> enumerator; - - if (lineStream.atEnd()) { - qDebug() << "Error in file" << confFile << '(' << enumerator << ')'; - exit(0); - } - - lineStream >> sourceFile; - - result << QStringPair(enumerator, readSourceFile(sourceFile)); - } - - return result; -} - -QString compileSource(const QString &source) -{ - { - QFile tempSourceFile("__tmp__.glsl"); - if (!tempSourceFile.open(QIODevice::WriteOnly | QIODevice::Text)) { - qDebug() << "Failed opening __tmp__.glsl"; - exit(0); - } - - QTextStream out(&tempSourceFile); - out << source; - } - - if (std::system("cgc -quiet -oglsl -profile arbfp1 __tmp__.glsl >__tmp__.frag") == -1) { - qDebug() << "Failed running cgc"; - exit(0); - } - - return readSourceFile("__tmp__.frag", true); -} - -QString getWord(QString line, int word) -{ - QTextStream in(&line); - - QString result; - - for (int i = 0; i < word; ++i) - in >> result; - - return result; -} - -static int toInt(const QByteArray &str) -{ - int value = 0; - - for (int i = 0; i < str.size(); ++i) { - if (str[i] < '0' || str[i] > '9') - break; - - value *= 10; - value += (str[i] - '0'); - } - - return value; -} -QList getLocations(const QSet &variables, QString source) -{ - QTextStream in(&source); - - QMap locations; - - foreach (QString variable, variables) - locations[variable] = -1; - - while (!in.atEnd()) { - QString line = in.readLine().trimmed(); - - line = line.right(line.size() - 1); - - if (line.startsWith("#var")) { - QByteArray temp; - QByteArray name; - - QTextStream lineStream(&line); - - lineStream >> temp >> temp >> name; - - int location = -1; - - while (!lineStream.atEnd()) { - lineStream >> temp; - - if (temp.startsWith("c[")) { - location = toInt(temp.right(temp.size() - 2)); - break; - } - - if (temp == "texunit") { - lineStream >> temp; - location = toInt(temp); - break; - } - } - - locations[name] = location; - } - } - - QList result; - - foreach (QString variable, variables) - result << locations[variable]; - - return result; -} - -// remove #var statements -QString trimmed(QString source) -{ - QTextStream in(&source); - - QString result; - - while (!in.atEnd()) { - QString line = in.readLine(); - if (!line.trimmed().startsWith("\"#")) - result += line + '\n'; - } - - return result; -} - -void writeVariablesEnum(QTextStream &out, const char *name, const QSet &s) -{ - out << "enum " << name << " {"; - QSet::const_iterator it = s.begin(); - if (it != s.end()) { - out << "\n" TAB "VAR_" << it->toUpper(); - for (++it; it != s.end(); ++it) - out << ",\n" TAB "VAR_" << it->toUpper(); - } - out << "\n};\n\n"; -} - -void writeTypesEnum(QTextStream &out, const char *name, const QList &s) -{ - out << "enum " << name << " {"; - QList::const_iterator it = s.begin(); - if (it != s.end()) { - out << "\n" TAB << it->first; - for (++it; it != s.end(); ++it) - out << ",\n" TAB << it->first; - } - out << "\n};\n\n"; -} - -void writeIncludeFile(const QSet &variables, - const QList &brushes, - const QList &compositionModes, - const QList &masks, - const QMap > &compiled) -{ - QFile includeFile("fragmentprograms_p.h"); - if (!includeFile.open(QIODevice::WriteOnly | QIODevice::Text)) { - qDebug() << "Failed opening fragmentprograms_p.h"; - exit(0); - } - - QTextStream out(&includeFile); - - QLatin1String tab(TAB); - - out << "/****************************************************************************\n" - "**\n" - "** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).\n" - "** All rights reserved.\n" - "** Contact: Nokia Corporation (qt-info@nokia.com)\n" - "**\n" - "** This file is part of the QtOpenGL module of the Qt Toolkit.\n" - "**\n" - "** $QT_BEGIN_LICENSE:LGPL$\n" - "** GNU Lesser General Public License Usage\n" - "** This file may be used under the terms of the GNU Lesser General Public\n" - "** License version 2.1 as published by the Free Software Foundation and\n" - "** appearing in the file LICENSE.LGPL included in the packaging of this\n" - "** file. Please review the following information to ensure the GNU Lesser\n" - "** General Public License version 2.1 requirements will be met:\n" - "** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.\n" - "**\n" - "** In addition, as a special exception, Nokia gives you certain additional\n" - "** rights. These rights are described in the Nokia Qt LGPL Exception\n" - "** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.\n" - "**\n" - "** GNU General Public License Usage\n" - "** Alternatively, this file may be used under the terms of the GNU General\n" - "** Public License version 3.0 as published by the Free Software Foundation\n" - "** and appearing in the file LICENSE.GPL included in the packaging of this\n" - "** file. Please review the following information to ensure the GNU General\n" - "** Public License version 3.0 requirements will be met:\n" - "** http://www.gnu.org/copyleft/gpl.html.\n" - "**\n" - "** Other Usage\n" - "** Alternatively, this file may be used in accordance with the terms and\n" - "** conditions contained in a signed written agreement between you and Nokia.\n" - "**\n" - "**\n" - "**\n" - "**\n" - "**\n" - "** $QT_END_LICENSE$\n" - "**\n" - "****************************************************************************/\n" - "\n" - "#ifndef FRAGMENTPROGRAMS_P_H\n" - "#define FRAGMENTPROGRAMS_P_H\n" - "\n" - "//\n" - "// W A R N I N G\n" - "// -------------\n" - "//\n" - "// This file is not part of the Qt API. It exists purely as an\n" - "// implementation detail. This header file may change from version to\n" - "// version without notice, or even be removed.\n" - "//\n" - "// We mean it.\n" - "//\n" - "\n"; - - writeVariablesEnum(out, "FragmentVariable", variables); - writeTypesEnum(out, "FragmentBrushType", brushes); - writeTypesEnum(out, "FragmentCompositionModeType", compositionModes); - writeTypesEnum(out, "FragmentMaskType", masks); - - out << "static const unsigned int num_fragment_variables = " << variables.size() << ";\n\n"; - out << "static const unsigned int num_fragment_brushes = " << brushes.size() << ";\n"; - out << "static const unsigned int num_fragment_composition_modes = " << compositionModes.size() << ";\n"; - out << "static const unsigned int num_fragment_masks = " << masks.size() << ";\n\n"; - - foreach (QStringPair mask, masks) { - const QString compiledSource = compiled[mask.first]["MASK__"]; - - out << "static const char *FragmentProgram_" << mask.first << " =\n" - << trimmed(compiledSource) - << '\n'; - } - - foreach (QStringPair brush, brushes) { - foreach (QStringPair mode, compositionModes) { - const QString compiledSource = compiled[brush.first][mode.first]; - - out << "static const char *FragmentProgram_" << brush.first << '_' << mode.first << " =\n" - << trimmed(compiledSource) - << '\n'; - } - } - - out << "static const char *mask_fragment_program_sources[num_fragment_masks] = {\n"; - foreach (QStringPair mask, masks) - out << tab << "FragmentProgram_" << mask.first << ",\n"; - out << "};\n\n"; - - out << "static const char *painter_fragment_program_sources[num_fragment_brushes][num_fragment_composition_modes] = {\n"; - foreach (QStringPair brush, brushes) { - out << tab << "{\n"; - - foreach (QStringPair mode, compositionModes) - out << tab << tab << "FragmentProgram_" << brush.first << '_' << mode.first << ",\n"; - - out << tab << "},\n"; - } - out << "};\n\n"; - - out << "static int painter_variable_locations[num_fragment_brushes][num_fragment_composition_modes][num_fragment_variables] = {\n"; - foreach (QStringPair brush, brushes) { - out << tab << "{\n"; - - foreach (QStringPair mode, compositionModes) { - out << tab << tab << "{ "; - - QList locations = getLocations(variables, compiled[brush.first][mode.first]); - - foreach (int location, locations) - out << location << ", "; - - out << "},\n"; - } - - out << tab << "},\n"; - } - out << "};\n\n"; - - out << "static int mask_variable_locations[num_fragment_masks][num_fragment_variables] = {\n"; - foreach (QStringPair mask, masks) { - out << tab << "{ "; - - QList locations = getLocations(variables, compiled[mask.first]["MASK__"]); - - foreach (int location, locations) - out << location << ", "; - - out << "},\n"; - } - out << "};\n\n"; - out << "#endif\n"; -} - -QList getVariables(QString program) -{ - QList result; - - QTextStream in(&program); - while (!in.atEnd()) { - QString line = in.readLine(); - - if (line.startsWith("uniform")) { - QString word = getWord(line, 3); - result << word.left(word.size() - 1); - } else if (line.startsWith("#include")) { - QString file = getWord(line, 2); - result << getVariables(readSourceFile(file.mid(1, file.size() - 2))); - } - } - - return result; -} - -int main() -{ - QList brushes = readConf(QLatin1String("brushes.conf")); - QList compositionModes = readConf(QLatin1String("composition_modes.conf")); - QList masks = readConf(QLatin1String("masks.conf")); - - QString painterSource = readSourceFile("painter.glsl"); - QString painterNoMaskSource = readSourceFile("painter_nomask.glsl"); - QString fastPainterSource = readSourceFile("fast_painter.glsl"); - QString brushPainterSource = readSourceFile("brush_painter.glsl"); - - QSet variables; - - QList programs[3] = { brushes, compositionModes, masks }; - - for (int i = 0; i < 3; ++i) - foreach (QStringPair value, programs[i]) - variables += QSet::fromList(getVariables(value.second)); - - variables += QSet::fromList(getVariables(painterSource)); - variables += QSet::fromList(getVariables(fastPainterSource)); - - QMap > compiled; - - foreach (QStringPair brush, brushes) { - foreach (QStringPair mode, compositionModes) { - QString combinedSource = brush.second + mode.second + painterSource; - compiled[brush.first][mode.first] = compileSource(combinedSource); - - combinedSource = brush.second + mode.second + painterNoMaskSource; - compiled[brush.first][mode.first + "_NOMASK"] = compileSource(combinedSource); - } - - QString fastSource = brush.second + fastPainterSource; - QString brushSource = brush.second + brushPainterSource; - - compiled[brush.first]["COMPOSITION_MODE_BLEND_MODE_MASK"] = compileSource(fastSource); - compiled[brush.first]["COMPOSITION_MODE_BLEND_MODE_NOMASK"] = compileSource(brushSource); - } - - QList temp; - - foreach (QStringPair mode, compositionModes) - temp << QStringPair(mode.first + "_NOMASK", mode.second); - - compositionModes += temp; - - compositionModes << QStringPair("COMPOSITION_MODE_BLEND_MODE_MASK", "") - << QStringPair("COMPOSITION_MODE_BLEND_MODE_NOMASK", ""); - - foreach (QStringPair mask, masks) - compiled[mask.first]["MASK__"] = compileSource(mask.second); - - writeIncludeFile(variables, brushes, compositionModes, masks, compiled); - - return 0; -} - -QT_END_NAMESPACE diff --git a/src/opengl/util/generator.pro b/src/opengl/util/generator.pro deleted file mode 100644 index ac71934ecf..0000000000 --- a/src/opengl/util/generator.pro +++ /dev/null @@ -1,13 +0,0 @@ -###################################################################### -# Automatically generated by qmake (2.01a) Thu Oct 19 11:03:24 2006 -###################################################################### - -TEMPLATE = app -TARGET = generator -DEPENDPATH += . -INCLUDEPATH += . - -# Input -SOURCES += generator.cpp - -CONFIG += console diff --git a/src/opengl/util/glsl_to_include.sh b/src/opengl/util/glsl_to_include.sh deleted file mode 100755 index c97239bfdd..0000000000 --- a/src/opengl/util/glsl_to_include.sh +++ /dev/null @@ -1,73 +0,0 @@ -#! /bin/sh -############################################################################# -## -## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -## All rights reserved. -## Contact: Nokia Corporation (qt-info@nokia.com) -## -## This file is the build configuration utility of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:LGPL$ -## GNU Lesser General Public License Usage -## 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.1, 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. -## -## Other Usage -## Alternatively, this file may be used in accordance with the terms and -## conditions contained in a signed written agreement between you and Nokia. -## -## -## -## -## -## $QT_END_LICENSE$ -## -############################################################################# - -# Compile a .glsl file to a file that can be included in a C++ program -USAGE="Usage: $0 " -CGC=cgc -CGC_PROFILE=arbfp1 - -if test $# -ne 1 -then - echo $USAGE - exit 1 -fi - -GLSL_FILE=$1 -FRAG_FILE=`basename $1 .glsl`.frag -#GLSL_INC_FILE=`basename $1 .glsl`.glsl_quoted - -echo "// Generated by src/opengl/util/$0 from $1" > $FRAG_FILE -$CGC -quiet -oglsl -profile $CGC_PROFILE $GLSL_FILE | while read line -do - if test `echo $line | cut -c1` != "#" - then - echo -e \"$line\" >> $FRAG_FILE - fi -done -echo "; // Generated by src/opengl/util/$0 from $1" >> $FRAG_FILE - -#echo "// Generated by src/opengl/util/$0 from $1" > $GLSL_INC_FILE -#cat $GLSL_FILE | while read line -#do -# printf \"%s\\\\n\"\\n "$line" >> $GLSL_INC_FILE -#done -#echo "; // Generated by src/opengl/util/$0 from $1" >> $GLSL_INC_FILE diff --git a/src/opengl/util/linear_brush.glsl b/src/opengl/util/linear_brush.glsl deleted file mode 100644 index 90a4440a99..0000000000 --- a/src/opengl/util/linear_brush.glsl +++ /dev/null @@ -1,22 +0,0 @@ -uniform sampler1D palette; -uniform vec3 linear; -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -vec4 brush() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); - vec2 A = hcoords.xy / hcoords.z; - - float val = dot(linear.xy, A) * linear.z; - - return texture1D(palette, val); -} - diff --git a/src/opengl/util/masks.conf b/src/opengl/util/masks.conf deleted file mode 100644 index d853d0b6e9..0000000000 --- a/src/opengl/util/masks.conf +++ /dev/null @@ -1,2 +0,0 @@ -FRAGMENT_PROGRAM_MASK_TRAPEZOID_AA trap_exact_aa.glsl -FRAGMENT_PROGRAM_MASK_ELLIPSE_AA ellipse_aa.glsl diff --git a/src/opengl/util/meego/main.cpp b/src/opengl/util/meego/main.cpp deleted file mode 100644 index 21ac5fd629..0000000000 --- a/src/opengl/util/meego/main.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** 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.1, 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. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#define QT_DEBUG_SHADER_CACHE -#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE -#define QT_OPENGL_ES_2 -#define QT_BOOTSTRAPPED - -typedef int GLsizei; -typedef unsigned int GLenum; - -#include "../../gl2paintengineex/qglshadercache_meego_p.h" - -#include -#include - -int main() -{ - ShaderCacheSharedMemory shm; - - if (!shm.isAttached()) { - fprintf(stderr, "Unable to attach to shared memory\n"); - return EXIT_FAILURE; - } - - ShaderCacheLocker locker(&shm); - if (!locker.isLocked()) { - fprintf(stderr, "Unable to lock shared memory\n"); - return EXIT_FAILURE; - } - - void *data = shm.data(); - Q_ASSERT(data); - - CachedShaders *cache = reinterpret_cast(data); - - for (int i = 0; i < cache->shaderCount; ++i) { - printf("Shader %d: %d bytes\n", i, cache->headers[i].size); - } - - printf("\nSummary:\n\n" - " Amount of cached shaders: %d\n" - " Bytes used: %d\n" - " Bytes available: %d\n", - cache->shaderCount, cache->dataSize, cache->availableSize()); - - return EXIT_SUCCESS; -} - diff --git a/src/opengl/util/meego/shader-cache-introspector.pro b/src/opengl/util/meego/shader-cache-introspector.pro deleted file mode 100644 index 520e9a5108..0000000000 --- a/src/opengl/util/meego/shader-cache-introspector.pro +++ /dev/null @@ -1,7 +0,0 @@ -TEMPLATE = app - -SOURCES += main.cpp - -TARGET = shader-cache-introspector - -QT = core diff --git a/src/opengl/util/painter.glsl b/src/opengl/util/painter.glsl deleted file mode 100644 index b990234778..0000000000 --- a/src/opengl/util/painter.glsl +++ /dev/null @@ -1,21 +0,0 @@ -uniform sampler2D dst_texture; -uniform sampler2D mask_texture; -uniform vec2 inv_mask_size; -uniform vec2 inv_dst_size; -uniform vec2 mask_offset; -uniform vec4 mask_channel; - -float mask() -{ - return dot(mask_channel, texture2D(mask_texture, (gl_FragCoord.xy + mask_offset) * inv_mask_size)); -} - -void main() -{ - vec4 dst = texture2D(dst_texture, gl_FragCoord.xy * inv_dst_size); - - // combine clip and coverage channels - float mask_alpha = mask(); - - gl_FragColor = mix(dst, composite(brush(), dst), mask_alpha); -} diff --git a/src/opengl/util/painter_nomask.glsl b/src/opengl/util/painter_nomask.glsl deleted file mode 100644 index af5ad6505f..0000000000 --- a/src/opengl/util/painter_nomask.glsl +++ /dev/null @@ -1,9 +0,0 @@ -uniform sampler2D dst_texture; -uniform vec2 inv_dst_size; - -void main() -{ - vec4 dst = texture2D(dst_texture, gl_FragCoord.xy * inv_dst_size); - - gl_FragColor = composite(brush(), dst); -} diff --git a/src/opengl/util/pattern_brush.glsl b/src/opengl/util/pattern_brush.glsl deleted file mode 100644 index 31702b887c..0000000000 --- a/src/opengl/util/pattern_brush.glsl +++ /dev/null @@ -1,23 +0,0 @@ -uniform sampler2D brush_texture; -uniform vec2 inv_brush_texture_size; -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -vec4 brush() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); - vec2 coords = hcoords.xy / hcoords.z; - - coords *= inv_brush_texture_size; - - float alpha = 1.0 - texture2D(brush_texture, coords).r; - - return gl_Color * alpha; -} diff --git a/src/opengl/util/radial_brush.glsl b/src/opengl/util/radial_brush.glsl deleted file mode 100644 index 84bec62e65..0000000000 --- a/src/opengl/util/radial_brush.glsl +++ /dev/null @@ -1,28 +0,0 @@ -uniform sampler1D palette; -uniform vec2 fmp; -uniform float fmp2_m_radius2; -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -vec4 brush() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); - vec2 A = hcoords.xy / hcoords.z; - vec2 B = fmp; - - float a = fmp2_m_radius2; - float b = 2.0*dot(A, B); - float c = -dot(A, A); - - float val = (-b + sqrt(b*b - 4.0*a*c)) / (2.0*a); - - return texture1D(palette, val); -} - diff --git a/src/opengl/util/simple_porter_duff.glsl b/src/opengl/util/simple_porter_duff.glsl deleted file mode 100644 index 4cb0599ac5..0000000000 --- a/src/opengl/util/simple_porter_duff.glsl +++ /dev/null @@ -1,16 +0,0 @@ -uniform vec2 porterduff_ab; -uniform vec3 porterduff_xyz; - -vec4 composite(vec4 src, vec4 dst) -{ - vec4 result; - - result.xyz = porterduff_ab.x * src.xyz * dst.a - + porterduff_ab.y * dst.xyz * src.a - + porterduff_xyz.y * src.xyz * (1.0 - dst.a) - + porterduff_xyz.z * dst.xyz * (1.0 - src.a); - - result.a = dot(porterduff_xyz, vec3(src.a * dst.a, src.a * (1.0 - dst.a), dst.a * (1.0 - src.a))); - - return result; -} diff --git a/src/opengl/util/solid_brush.glsl b/src/opengl/util/solid_brush.glsl deleted file mode 100644 index 760afd1a72..0000000000 --- a/src/opengl/util/solid_brush.glsl +++ /dev/null @@ -1,4 +0,0 @@ -vec4 brush() -{ - return gl_Color; -} diff --git a/src/opengl/util/texture_brush.glsl b/src/opengl/util/texture_brush.glsl deleted file mode 100644 index 949825583f..0000000000 --- a/src/opengl/util/texture_brush.glsl +++ /dev/null @@ -1,21 +0,0 @@ -uniform sampler2D brush_texture; -uniform vec2 inv_brush_texture_size; -uniform vec3 inv_matrix_m0; -uniform vec3 inv_matrix_m1; -uniform vec3 inv_matrix_m2; - -vec4 brush() -{ - mat3 mat; - - mat[0] = inv_matrix_m0; - mat[1] = inv_matrix_m1; - mat[2] = inv_matrix_m2; - - vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); - vec2 coords = hcoords.xy / hcoords.z; - - coords *= inv_brush_texture_size; - - return texture2D(brush_texture, coords); -} diff --git a/src/opengl/util/trap_exact_aa.glsl b/src/opengl/util/trap_exact_aa.glsl deleted file mode 100644 index 1637f430b5..0000000000 --- a/src/opengl/util/trap_exact_aa.glsl +++ /dev/null @@ -1,58 +0,0 @@ -float quad_aa() -{ - float top = min(gl_FragCoord.y + 0.5, gl_TexCoord[0].x); - float bottom = max(gl_FragCoord.y - 0.5, gl_TexCoord[0].y); - - float area = top - bottom; - - float left = gl_FragCoord.x - 0.5; - float right = gl_FragCoord.x + 0.5; - - // use line equations to compute intersections of left/right edges with top/bottom of truncated pixel - vec4 vecX = gl_TexCoord[1].xxzz * vec2(top, bottom).xyxy + gl_TexCoord[1].yyww; - - vec2 invA = gl_TexCoord[0].zw; - - // transform right line to left to be able to use same calculations for both - vecX.zw = 2.0 * gl_FragCoord.x - vecX.zw; - - vec2 topX = vec2(vecX.x, vecX.z); - vec2 bottomX = vec2(vecX.y, vecX.w); - - // transform lines such that top intersection is to the right of bottom intersection - vec2 topXTemp = max(topX, bottomX); - vec2 bottomXTemp = min(topX, bottomX); - - // make sure line slope reflects mirrored lines - invA = mix(invA, -invA, step(topX, bottomX)); - - vec2 vecLeftRight = vec2(left, right); - - // compute the intersections of the lines with the left and right edges of the pixel - vec4 intersectY = bottom + (vecLeftRight.xyxy - bottomXTemp.xxyy) * invA.xxyy; - - vec2 temp = mix(area - 0.5 * (right - bottomXTemp) * (intersectY.yw - bottom), // left < bottom < right < top - (0.5 * (topXTemp + bottomXTemp) - left) * area, // left < bottom < top < right - step(topXTemp, right.xx)); - - vec2 excluded = 0.5 * (top - intersectY.xz) * (topXTemp - left); // bottom < left < top < right - - excluded = mix((top - 0.5 * (intersectY.yw + intersectY.xz)) * (right - left), // bottom < left < right < top - excluded, step(topXTemp, right.xx)); - - excluded = mix(temp, // left < bottom < right (see calculation of temp) - excluded, step(bottomXTemp, left.xx)); - - excluded = mix(vec2(area, area), // right < bottom < top - excluded, step(bottomXTemp, right.xx)); - - excluded *= step(left, topXTemp); - - return (area - excluded.x - excluded.y) * step(bottom, top); -} - -void main() -{ - gl_FragColor = quad_aa().xxxx; -} - -- cgit v1.2.3