110 const auto& maskToDevice =
params.transform().matrix();
122 drawBounds =
params.clip().drawBounds().makeOffset(-deviceOrigin).ltrb();
126 SkASSERT(!
params.clip().transformedShapeBounds().isEmptyNegativeOrNaN() ^
127 all(maskBounds == 0.f));
129 if (
params.clip().transformedShapeBounds().isEmptyNegativeOrNaN()) {
141 maskBounds = skvx::shuffle<2,3,0,1>(maskBounds);
146 SkASSERT(all(maskBounds.xy() < maskBounds.zw()));
154 drawBounds = maskBounds;
161 maskBounds += textureOrigin.xyxy();
162 drawBounds += textureOrigin.xyxy();
163 deviceOrigin -= textureOrigin;
169 drawBounds *= atlasSizeInv.xyxy();
170 maskBounds *= atlasSizeInv.xyxy();
171 deviceOrigin *= atlasSizeInv;
175 SkASSERT(all((maskBounds >= 0.f) & (maskBounds <= 1.f)));
176 maskBounds = 65535.f * maskBounds + 0.5f;
179 instances.append(1) << drawBounds << skvx::cast<uint16_t>(maskBounds) << deviceOrigin
180 <<
params.order().depthAsFloat() << ssboIndices
181 << m.rc(0,0) << m.rc(1,0) << m.rc(3,0)
182 << m.rc(0,1) << m.rc(1,1) << m.rc(3,1)
183 << m.rc(0,3) << m.rc(1,3) << m.rc(3,3);
SkISize dimensions() const