@@ -110,30 +110,38 @@ namespace {
110110
111111 static void release_program_cache () { }
112112
113+ static skvm::Coord device_coord (skvm::Builder* p, skvm::Uniforms* uniforms) {
114+ skvm::I32 dx = p->uniform32 (uniforms->base , offsetof (BlitterUniforms, right))
115+ - p->index (),
116+ dy = p->uniform32 (uniforms->base , offsetof (BlitterUniforms, y));
117+ return {
118+ to_F32 (dx) + 0 .5f ,
119+ to_F32 (dy) + 0 .5f ,
120+ };
121+ }
122+
123+ static skvm::Color paint_color (skvm::Builder* p, skvm::Uniforms* uniforms) {
124+ return {
125+ p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fR )),
126+ p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fG )),
127+ p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fB )),
128+ p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fA )),
129+ };
130+ }
131+
113132 // If build_program() can't build this program, cache_key() sets *ok to false.
114133 static Key cache_key (const Params& params,
115134 skvm::Uniforms* uniforms, SkArenaAlloc* alloc, bool * ok) {
116135 auto hash_shader = [&](const sk_sp<SkShader>& shader) {
117136 const SkShaderBase* sb = as_SB (shader);
118137 skvm::Builder p;
119138
120- skvm::I32 dx = p.uniform32 (uniforms->base , offsetof (BlitterUniforms, right))
121- - p.index (),
122- dy = p.uniform32 (uniforms->base , offsetof (BlitterUniforms, y));
123- skvm::Coord device = {to_F32 (dx) + 0 .5f ,
124- to_F32 (dy) + 0 .5f },
125- local = device;
126-
127- skvm::Color paint = {
128- p.uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fR )),
129- p.uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fG )),
130- p.uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fB )),
131- p.uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fA )),
132- };
139+ skvm::Coord device = device_coord (&p, uniforms);
140+ skvm::Color paint = paint_color (&p, uniforms);
133141
134142 uint64_t hash = 0 ;
135143 if (auto c = sb->program (&p,
136- device,local, paint,
144+ device,/* local= */ device , paint,
137145 params.matrices , /* localM=*/ nullptr ,
138146 params.quality , params.dst ,
139147 uniforms,alloc)) {
@@ -191,22 +199,11 @@ namespace {
191199 // - MaskLCD16: 565 coverage varying
192200 // - UniformA8: 8-bit coverage uniform
193201
194- skvm::I32 dx = p->uniform32 (uniforms->base , offsetof (BlitterUniforms, right))
195- - p->index (),
196- dy = p->uniform32 (uniforms->base , offsetof (BlitterUniforms, y));
197- skvm::Coord device = {to_F32 (dx) + 0 .5f ,
198- to_F32 (dy) + 0 .5f },
199- local = device;
200-
201- skvm::Color paint = {
202- p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fR )),
203- p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fG )),
204- p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fB )),
205- p->uniformF (uniforms->base , offsetof (BlitterUniforms, paint.fA )),
206- };
202+ skvm::Coord device = device_coord (p, uniforms);
203+ skvm::Color paint = paint_color (p, uniforms);
207204
208205 // See note about arguments above... a SpriteShader will call p->arg() once here.
209- skvm::Color src = as_SB (params.shader )->program (p, device,local, paint,
206+ skvm::Color src = as_SB (params.shader )->program (p, device,/* local= */ device , paint,
210207 params.matrices , /* localM=*/ nullptr ,
211208 params.quality , params.dst ,
212209 uniforms, alloc);
@@ -279,7 +276,7 @@ namespace {
279276 } break ;
280277 }
281278 if (params.clip ) {
282- skvm::Color clip = as_SB (params.clip )->program (p, device,local, paint,
279+ skvm::Color clip = as_SB (params.clip )->program (p, device,/* local= */ device , paint,
283280 params.matrices , /* localM=*/ nullptr ,
284281 params.quality , params.dst ,
285282 uniforms, alloc);
0 commit comments