Skip to content

Commit

Permalink
Wrap SkShader::program calls with #ifdef SK_ENABLE_SKVM.
Browse files Browse the repository at this point in the history
Change-Id: I3ad69746ecd66c60d2b77fc6e2314727ade227bc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/674656
Commit-Queue: Herb Derby <[email protected]>
Reviewed-by: Herb Derby <[email protected]>
Auto-Submit: John Stiles <[email protected]>
  • Loading branch information
johnstiles-google authored and SkCQ committed Apr 20, 2023
1 parent 024c075 commit 3acd1bf
Show file tree
Hide file tree
Showing 22 changed files with 80 additions and 18 deletions.
8 changes: 6 additions & 2 deletions src/core/SkDraw_atlas.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#include "src/core/SkRasterPipelineOpList.h"
#include "src/core/SkScan.h"
#include "src/core/SkSurfacePriv.h"
#include "src/core/SkVM.h"
#include "src/core/SkVMBlitter.h"
#include "src/shaders/SkShaderBase.h"
#include "src/shaders/SkTransformShader.h"
Expand All @@ -45,10 +44,13 @@
#include <utility>

class SkBlitter;
class SkColorInfo;
class SkColorSpace;
enum class SkBlendMode;

#if defined(SK_ENABLE_SKVM)
#include "src/core/SkVM.h"
class SkColorInfo;
#endif

static void fill_rect(const SkMatrix& ctm, const SkRasterClip& rc,
const SkRect& r, SkBlitter* blitter, SkPath* scratchPath) {
Expand Down Expand Up @@ -81,6 +83,7 @@ class UpdatableColorShader : public SkShaderBase {
public:
explicit UpdatableColorShader(SkColorSpace* cs)
: fSteps{sk_srgb_singleton(), kUnpremul_SkAlphaType, cs, kUnpremul_SkAlphaType} {}
#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder* builder,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -97,6 +100,7 @@ class UpdatableColorShader : public SkShaderBase {

return {r, g, b, a};
}
#endif

void updateColor(SkColor c) const {
SkColor4f c4 = SkColor4f::FromColor(c);
Expand Down
11 changes: 10 additions & 1 deletion src/core/SkDraw_vertices.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
#include "src/core/SkRasterPipelineOpList.h"
#include "src/core/SkScan.h"
#include "src/core/SkSurfacePriv.h"
#include "src/core/SkVM.h"
#include "src/core/SkVMBlitter.h"
#include "src/core/SkVertState.h"
#include "src/core/SkVerticesPriv.h"
Expand All @@ -55,6 +54,10 @@

class SkBlitter;

#if defined(SK_ENABLE_SKVM)
#include "src/core/SkVM.h"
#endif

struct Matrix43 {
float fMat[12]; // column major

Expand Down Expand Up @@ -122,6 +125,7 @@ class SkTriColorShader : public SkShaderBase {
return true;
}

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord,
skvm::Coord,
Expand All @@ -130,6 +134,7 @@ class SkTriColorShader : public SkShaderBase {
const SkColorInfo&,
skvm::Uniforms*,
SkArenaAlloc*) const override;
#endif

private:
bool isOpaque() const override { return fIsOpaque; }
Expand All @@ -144,12 +149,15 @@ class SkTriColorShader : public SkShaderBase {
SkMatrix fM33;
const bool fIsOpaque;
const bool fUsePersp; // controls our stages, and what we do in update()
#if defined(SK_ENABLE_SKVM)
mutable skvm::Uniform fColorMatrix;
mutable skvm::Uniform fCoordMatrix;
#endif

using INHERITED = SkShaderBase;
};

#if defined(SK_ENABLE_SKVM)
skvm::Color SkTriColorShader::program(skvm::Builder* b,
skvm::Coord device,
skvm::Coord local,
Expand Down Expand Up @@ -190,6 +198,7 @@ skvm::Color SkTriColorShader::program(skvm::Builder* b,
color.a = colorDot(3);
return color;
}
#endif

bool SkTriColorShader::update(const SkMatrix& ctmInv, const SkPoint pts[],
const SkPMColor4f colors[], int index0, int index1, int index2) {
Expand Down
22 changes: 11 additions & 11 deletions src/core/SkRuntimeEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ static void write_child_effects(SkWriteBuffer& buffer,
}
}

#ifndef SK_ENABLE_SKSL_IN_RASTER_PIPELINE
#ifdef SK_ENABLE_SKVM
static std::vector<skvm::Val> make_skvm_uniforms(skvm::Builder* p,
skvm::Uniforms* uniforms,
size_t inputSize,
Expand Down Expand Up @@ -952,6 +952,7 @@ class RuntimeEffectVMCallbacks : public SkSL::SkVMCallbacks {
, fColorInfo(colorInfo) {}

skvm::Color sampleShader(int ix, skvm::Coord coord) override {
#if defined(SK_ENABLE_SKVM)
// We haven't tracked device coords and the runtime effect could have arbitrarily
// manipulated the passed coords. We should be in a state where any pending matrix was
// already applied before the runtime effect's code could have manipulated the coords
Expand All @@ -968,6 +969,7 @@ class RuntimeEffectVMCallbacks : public SkSL::SkVMCallbacks {
fUniforms,
fAlloc);
}
#endif
return fInColor;
}

Expand Down Expand Up @@ -1091,9 +1093,7 @@ class SkRuntimeColorFilter : public SkColorFilterBase {
skvm::Color onProgram(skvm::Builder* p, skvm::Color c,
const SkColorInfo& colorInfo,
skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override {
#ifdef SK_ENABLE_SKSL_IN_RASTER_PIPELINE
return {};
#else
#ifdef SK_ENABLE_SKVM
SkASSERT(SkRuntimeEffectPriv::CanDraw(SkCapabilities::RasterBackend().get(),
fEffect.get()));

Expand All @@ -1115,6 +1115,8 @@ class SkRuntimeColorFilter : public SkColorFilterBase {
return SkSL::ProgramToSkVM(*fEffect->fBaseProgram, fEffect->fMain, p,/*debugTrace=*/nullptr,
SkSpan(uniform), /*device=*/zeroCoord, /*local=*/zeroCoord,
c, c, &callbacks);
#else
return {};
#endif
}

Expand Down Expand Up @@ -1315,6 +1317,7 @@ class SkRTShader : public SkShaderBase {
return false;
}

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder* p,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -1323,9 +1326,6 @@ class SkRTShader : public SkShaderBase {
const SkColorInfo& colorInfo,
skvm::Uniforms* uniforms,
SkArenaAlloc* alloc) const override {
#ifdef SK_ENABLE_SKSL_IN_RASTER_PIPELINE
return {};
#else
if (!SkRuntimeEffectPriv::CanDraw(SkCapabilities::RasterBackend().get(), fEffect.get())) {
return {};
}
Expand Down Expand Up @@ -1357,8 +1357,8 @@ class SkRTShader : public SkShaderBase {

return SkSL::ProgramToSkVM(*fEffect->fBaseProgram, fEffect->fMain, p, fDebugTrace.get(),
SkSpan(uniform), device, local, paint, paint, &callbacks);
#endif
}
#endif

void flatten(SkWriteBuffer& buffer) const override {
buffer.writeString(fEffect->source().c_str());
Expand Down Expand Up @@ -1475,9 +1475,7 @@ class SkRuntimeBlender : public SkBlenderBase {
skvm::Color onProgram(skvm::Builder* p, skvm::Color src, skvm::Color dst,
const SkColorInfo& colorInfo, skvm::Uniforms* uniforms,
SkArenaAlloc* alloc) const override {
#ifdef SK_ENABLE_SKSL_IN_RASTER_PIPELINE
return {};
#else
#ifdef SK_ENABLE_SKVM
if (!SkRuntimeEffectPriv::CanDraw(SkCapabilities::RasterBackend().get(), fEffect.get())) {
return {};
}
Expand All @@ -1498,6 +1496,8 @@ class SkRuntimeBlender : public SkBlenderBase {
return SkSL::ProgramToSkVM(*fEffect->fBaseProgram, fEffect->fMain, p,/*debugTrace=*/nullptr,
SkSpan(uniform), /*device=*/zeroCoord, /*local=*/zeroCoord,
src, dst, &callbacks);
#else
return {};
#endif
}

Expand Down
3 changes: 2 additions & 1 deletion src/shaders/SkColorFilterShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ bool SkColorFilterShader::appendStages(const SkStageRec& rec, const MatrixRec& m
return true;
}

#if defined(SK_ENABLE_SKVM)
skvm::Color SkColorFilterShader::program(skvm::Builder* p,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -93,7 +94,7 @@ skvm::Color SkColorFilterShader::program(skvm::Builder* p,
// Finally run that through the color filter.
return fFilter->program(p,c, dst, uniforms,alloc);
}

#endif
#if defined(SK_GANESH)
/////////////////////////////////////////////////////////////////////

Expand Down
2 changes: 2 additions & 0 deletions src/shaders/SkColorFilterShader.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class SkColorFilterShader : public SkShaderBase {
void flatten(SkWriteBuffer&) const override;
bool appendStages(const SkStageRec&, const MatrixRec&) const override;

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -40,6 +41,7 @@ class SkColorFilterShader : public SkShaderBase {
const SkColorInfo& dst,
skvm::Uniforms* uniforms,
SkArenaAlloc*) const override;
#endif

SK_FLATTENABLE_HOOKS(SkColorFilterShader)

Expand Down
7 changes: 7 additions & 0 deletions src/shaders/SkColorShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class SkColorShader : public SkShaderBase {

bool appendStages(const SkStageRec&, const MatrixRec&) const override;

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -72,6 +73,7 @@ class SkColorShader : public SkShaderBase {
const SkColorInfo& dst,
skvm::Uniforms* uniforms,
SkArenaAlloc*) const override;
#endif

SkColor fColor;
};
Expand Down Expand Up @@ -100,6 +102,7 @@ class SkColor4Shader : public SkShaderBase {
void flatten(SkWriteBuffer&) const override;
bool appendStages(const SkStageRec&, const MatrixRec&) const override;

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -108,6 +111,7 @@ class SkColor4Shader : public SkShaderBase {
const SkColorInfo& dst,
skvm::Uniforms* uniforms,
SkArenaAlloc*) const override;
#endif

sk_sp<SkColorSpace> fColorSpace;
const SkColor4f fColor;
Expand Down Expand Up @@ -185,6 +189,7 @@ bool SkColor4Shader::appendStages(const SkStageRec& rec, const MatrixRec&) const
return true;
}

#if defined(SK_ENABLE_SKVM)
skvm::Color SkColorShader::program(skvm::Builder* p,
skvm::Coord /*device*/,
skvm::Coord /*local*/,
Expand All @@ -198,6 +203,7 @@ skvm::Color SkColorShader::program(skvm::Builder* p,
dst.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
return p->uniformColor(color, uniforms);
}

skvm::Color SkColor4Shader::program(skvm::Builder* p,
skvm::Coord /*device*/,
skvm::Coord /*local*/,
Expand All @@ -211,6 +217,7 @@ skvm::Color SkColor4Shader::program(skvm::Builder* p,
dst.colorSpace(), kPremul_SkAlphaType).apply(color.vec());
return p->uniformColor(color, uniforms);
}
#endif // defined(SK_ENABLE_SKVM)

#if defined(SK_GANESH)

Expand Down
5 changes: 5 additions & 0 deletions src/shaders/SkComposeShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ class SkShader_Blend final : public SkShaderBase {
SkShader_Blend(SkReadBuffer&);
void flatten(SkWriteBuffer&) const override;
bool appendStages(const SkStageRec&, const MatrixRec&) const override;

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -56,6 +58,7 @@ class SkShader_Blend final : public SkShaderBase {
const SkColorInfo& dst,
skvm::Uniforms*,
SkArenaAlloc*) const override;
#endif // defined(SK_ENABLE_SKVM)

private:
friend void ::SkRegisterComposeShaderFlattenable();
Expand Down Expand Up @@ -139,6 +142,7 @@ bool SkShader_Blend::appendStages(const SkStageRec& rec, const MatrixRec& mRec)
return true;
}

#if defined(SK_ENABLE_SKVM)
skvm::Color SkShader_Blend::program(skvm::Builder* p,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -154,6 +158,7 @@ skvm::Color SkShader_Blend::program(skvm::Builder* p,
}
return {};
}
#endif

#if defined(SK_GANESH)

Expand Down
4 changes: 4 additions & 0 deletions src/shaders/SkCoordClampShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class SkShader_CoordClamp final : public SkShaderBase {
SkShader_CoordClamp(SkReadBuffer&);
void flatten(SkWriteBuffer&) const override;
bool appendStages(const SkStageRec&, const MatrixRec&) const override;
#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -54,6 +55,7 @@ class SkShader_CoordClamp final : public SkShaderBase {
const SkColorInfo& dst,
skvm::Uniforms*,
SkArenaAlloc*) const override;
#endif

private:
friend void ::SkRegisterCoordClampShaderFlattenable();
Expand Down Expand Up @@ -91,6 +93,7 @@ bool SkShader_CoordClamp::appendStages(const SkStageRec& rec, const MatrixRec& m
return as_SB(fShader)->appendStages(rec, *childMRec);
}

#if defined(SK_ENABLE_SKVM)
skvm::Color SkShader_CoordClamp::program(skvm::Builder* p,
skvm::Coord device,
skvm::Coord local,
Expand All @@ -115,6 +118,7 @@ skvm::Color SkShader_CoordClamp::program(skvm::Builder* p,

return as_SB(fShader)->program(p, device, local, paint, *childMRec, cinfo, uniforms, alloc);
}
#endif

#if defined(SK_GANESH)
std::unique_ptr<GrFragmentProcessor> SkShader_CoordClamp::asFragmentProcessor(
Expand Down
4 changes: 4 additions & 0 deletions src/shaders/SkEmptyShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class SkEmptyShader : public SkShaderBase {

bool appendStages(const SkStageRec&, const MatrixRec&) const override { return false; }

#if defined(SK_ENABLE_SKVM)
skvm::Color program(skvm::Builder*,
skvm::Coord,
skvm::Coord,
Expand All @@ -35,6 +36,7 @@ class SkEmptyShader : public SkShaderBase {
const SkColorInfo&,
skvm::Uniforms*,
SkArenaAlloc*) const override;
#endif

private:
friend void ::SkRegisterEmptyShaderFlattenable();
Expand All @@ -43,6 +45,7 @@ class SkEmptyShader : public SkShaderBase {
using INHERITED = SkShaderBase;
};

#if defined(SK_ENABLE_SKVM)
skvm::Color SkEmptyShader::program(skvm::Builder*,
skvm::Coord,
skvm::Coord,
Expand All @@ -53,6 +56,7 @@ skvm::Color SkEmptyShader::program(skvm::Builder*,
SkArenaAlloc*) const {
return {}; // signal failure
}
#endif

sk_sp<SkFlattenable> SkEmptyShader::CreateProc(SkReadBuffer&) {
return SkShaders::Empty();
Expand Down
2 changes: 2 additions & 0 deletions src/shaders/SkImageShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -854,6 +854,7 @@ bool SkImageShader::appendStages(const SkStageRec& rec, const MatrixRec& mRec) c
return append_misc();
}

#if defined(SK_ENABLE_SKVM)
skvm::Color SkImageShader::program(skvm::Builder* p,
skvm::Coord device,
skvm::Coord origLocal,
Expand Down Expand Up @@ -1142,3 +1143,4 @@ skvm::Color SkImageShader::program(skvm::Builder* p,
: SkColorSpaceXformSteps{cs, at, dst.colorSpace(), dst.alphaType()}.program(
p, uniforms, c);
}
#endif
Loading

0 comments on commit 3acd1bf

Please sign in to comment.