| /* |
| * Copyright 2026 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef skgpu_graphite_SparseStripConfig_DEFINED |
| #define skgpu_graphite_SparseStripConfig_DEFINED |
| |
| #include "include/core/SkColorType.h" |
| |
| #include <cstdint> |
| |
| namespace skgpu::graphite { |
| |
| // Tunable compile-time paramters that control various aspects of SparseStrips behavior |
| struct SparseStripConfig { |
| // These control the size, in pixels, of the tiles generated by polylines. |
| static constexpr uint16_t kTileWidth = 8; |
| static constexpr uint16_t kTileHeight = 8; |
| static_assert(kTileWidth == kTileHeight); |
| |
| // The tile dimensions MUST match the hard coded constant in the fragment shader. If that value |
| // changes, this must be updated. |
| static_assert(kTileWidth == 8); |
| |
| // These control the AlphaAtlasManager |
| static constexpr SkColorType kColorType = SkColorType::kRGBA_8888_SkColorType; |
| static constexpr int32_t kAtlasBytesPerTexel = 4; |
| static_assert(kColorType == SkColorType::kRGBA_8888_SkColorType); |
| |
| static constexpr int32_t kAtlasWidth = 8192; |
| static constexpr int32_t kAtlasWidthBytes = kAtlasWidth * kAtlasBytesPerTexel; |
| static constexpr int32_t kInitialAtlasRows = 1; |
| static constexpr int32_t kMaxAtlasRows = 8192; |
| static constexpr int32_t kMaxCapBytes = kAtlasWidth * kMaxAtlasRows * |
| kAtlasBytesPerTexel; |
| static constexpr int32_t kMaxTexturePages = 2; |
| |
| // The AlphaAtlasManager uses a flipflopping allocation system that will break if the page count |
| // is increased beyond 2. |
| static_assert(kMaxTexturePages == 2); |
| // To avoid uploading the texture width, and to avoid a costly divide and mod in the shader, we |
| // assume that the atlas width is always fixed. |
| static_assert(kAtlasWidth == 8192); |
| |
| // The number of MSAA SubSamples in SparseStrips rendering. We currently only support 8. |
| static constexpr int32_t kNumSubSamples = 8; |
| static_assert(!((kNumSubSamples & (kNumSubSamples - 1)))); |
| |
| static constexpr int32_t kLutMaskWidth = 64; |
| static constexpr int32_t kLutMaskHeight = 64; |
| static constexpr int32_t kLutMaskWidthExcl = kLutMaskWidth - 1; |
| static constexpr int32_t kLutMaskHeightExcl = kLutMaskHeight - 1; |
| static constexpr float kLutMaskWidthF = static_cast<float>(kLutMaskWidth); |
| static constexpr float kLutMaskHeightF = static_cast<float>(kLutMaskHeight); |
| |
| static constexpr float kStripEpsilon = 1e-5f; |
| }; |
| |
| } // namespace skgpu::graphite |
| |
| #endif // skgpu_graphite_SparseStripConfig_DEFINED |