From aa9152abbca3a958a9379f4e5067a1c37486d677 Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Fri, 17 Jul 2009 21:24:56 +0000 Subject: [PATCH] add special proc for repeat 16->16 filter bitmap shader git-svn-id: http://skia.googlecode.com/svn/trunk@273 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/core/SkBitmapProcState.cpp | 23 +++++++++++++++++++++-- src/core/SkBitmapProcState_shaderproc.h | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp index dbdcc27..379a7b3 100644 --- a/src/core/SkBitmapProcState.cpp +++ b/src/core/SkBitmapProcState.cpp @@ -302,6 +302,20 @@ SkASSERT(state.fAlphaScale < 256) #define FILTER_TO_DST(c) SkCompact_rgb_16((c) >> 5) #include "SkBitmapProcState_shaderproc.h" + +#define TILEX_PROCF(fx, max) (((fx) & 0xFFFF) * ((max) + 1) >> 16) +#define TILEY_PROCF(fy, max) (((fy) & 0xFFFF) * ((max) + 1) >> 16) +#define TILEX_LOW_BITS(fx, max) ((((fx) & 0xFFFF) * ((max) + 1) >> 12) & 0xF) +#define TILEY_LOW_BITS(fy, max) ((((fy) & 0xFFFF) * ((max) + 1) >> 12) & 0xF) + +#define MAKENAME(suffix) Repeat_S16_D16 ## suffix +#define SRCTYPE uint16_t +#define DSTTYPE uint16_t +#define CHECKSTATE(state) SkASSERT(state.fBitmap->config() == SkBitmap::kRGB_565_Config) +#define SRC_TO_FILTER(src) src +#define FILTER_TO_DST(c) SkCompact_rgb_16((c) >> 5) +#include "SkBitmapProcState_shaderproc.h" + /////////////////////////////////////////////////////////////////////////////// static bool valid_for_filtering(unsigned dimension) { @@ -485,8 +499,13 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) { fSampleProc16 = gSample16[index]; // our special-case shaderprocs - if (clamp_clamp && (7 == index)) { - fShaderProc16 = Clamp_S16_D16_filter_DX_shaderproc; + if (S16_D16_filter_DX == fSampleProc16) { + if (clamp_clamp) { + fShaderProc16 = Clamp_S16_D16_filter_DX_shaderproc; + } else if (SkShader::kRepeat_TileMode == fTileModeX && + SkShader::kRepeat_TileMode == fTileModeY) { + fShaderProc16 = Repeat_S16_D16_filter_DX_shaderproc; + } } return true; } diff --git a/src/core/SkBitmapProcState_shaderproc.h b/src/core/SkBitmapProcState_shaderproc.h index b0384e7..ded06c6 100644 --- a/src/core/SkBitmapProcState_shaderproc.h +++ b/src/core/SkBitmapProcState_shaderproc.h @@ -70,6 +70,7 @@ static void SCALE_FILTER_NAME(const SkBitmapProcState& s, int x, int y, #undef TILEY_PROCF #undef TILEX_LOW_BITS #undef TILEY_LOW_BITS +#undef DSTTYPE #ifdef CHECK_FOR_DECAL #undef CHECK_FOR_DECAL #endif -- 2.7.4