Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit f1b2b42

Browse files
SergeyUlanovSkia Commit-Bot
authored andcommitted
Fix GrSmallPathRenderer to respect max texture size.
Previously GrSmallPathRenderer was always trying to create a 2048x2048 atlas texture, ignoring texture size limits of the target device. As result the allocation fails when max texture size is below 2048. Fixed GrSmallPathRenderer to use GrDrawOpAtlasConfig to calculate appropriate atlas texture dimensions. Bug: fuchsia:43693 Change-Id: Ieb5d32ab385dcd65a734c22fcb87cf50546109a9 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/266425 Auto-Submit: Sergey Ulanov <sergeyu@chromium.org> Commit-Queue: Jim Van Verth <jvanverth@google.com> Reviewed-by: Jim Van Verth <jvanverth@google.com>
1 parent 5237933 commit f1b2b42

File tree

1 file changed

+22
-25
lines changed

1 file changed

+22
-25
lines changed

src/gpu/ops/GrSmallPathRenderer.cpp

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,22 @@
2929
#include "src/gpu/ops/GrMeshDrawOp.h"
3030
#include "src/gpu/ops/GrSimpleMeshDrawOpHelper.h"
3131

32-
#define ATLAS_TEXTURE_WIDTH 2048
33-
#define ATLAS_TEXTURE_HEIGHT 2048
34-
#define PLOT_WIDTH 512
35-
#define PLOT_HEIGHT 256
36-
37-
#define NUM_PLOTS_X (ATLAS_TEXTURE_WIDTH / PLOT_WIDTH)
38-
#define NUM_PLOTS_Y (ATLAS_TEXTURE_HEIGHT / PLOT_HEIGHT)
32+
static constexpr size_t kMaxAtlasTextureBytes = 2048 * 2048;
33+
static constexpr size_t kPlotWidth = 512;
34+
static constexpr size_t kPlotHeight = 256;
3935

4036
#ifdef DF_PATH_TRACKING
4137
static int g_NumCachedShapes = 0;
4238
static int g_NumFreedShapes = 0;
4339
#endif
4440

4541
// mip levels
46-
static const SkScalar kIdealMinMIP = 12;
47-
static const SkScalar kMaxMIP = 162;
42+
static constexpr SkScalar kIdealMinMIP = 12;
43+
static constexpr SkScalar kMaxMIP = 162;
4844

49-
static const SkScalar kMaxDim = 73;
50-
static const SkScalar kMinSize = SK_ScalarHalf;
51-
static const SkScalar kMaxSize = 2*kMaxMIP;
45+
static constexpr SkScalar kMaxDim = 73;
46+
static constexpr SkScalar kMinSize = SK_ScalarHalf;
47+
static constexpr SkScalar kMaxSize = 2*kMaxMIP;
5248

5349
class ShapeDataKey {
5450
public:
@@ -893,13 +889,13 @@ bool GrSmallPathRenderer::onDrawPath(const DrawPathArgs& args) {
893889
if (!fAtlas) {
894890
const GrBackendFormat format = args.fContext->priv().caps()->getDefaultBackendFormat(
895891
GrColorType::kAlpha_8, GrRenderable::kNo);
896-
fAtlas = GrDrawOpAtlas::Make(args.fContext->priv().proxyProvider(),
897-
format,
898-
GrColorType::kAlpha_8,
899-
ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT,
900-
PLOT_WIDTH, PLOT_HEIGHT,
901-
GrDrawOpAtlas::AllowMultitexturing::kYes,
902-
this);
892+
893+
GrDrawOpAtlasConfig atlasConfig(args.fContext->priv().caps()->maxTextureSize(),
894+
kMaxAtlasTextureBytes);
895+
SkISize size = atlasConfig.atlasDimensions(kA8_GrMaskFormat);
896+
fAtlas = GrDrawOpAtlas::Make(args.fContext->priv().proxyProvider(), format,
897+
GrColorType::kAlpha_8, size.width(), size.height(), kPlotWidth,
898+
kPlotHeight, GrDrawOpAtlas::AllowMultitexturing::kYes, this);
903899
if (!fAtlas) {
904900
return false;
905901
}
@@ -981,12 +977,13 @@ GR_DRAW_OP_TEST_DEFINE(SmallPathOp) {
981977
gTestStruct.reset();
982978
const GrBackendFormat format = context->priv().caps()->getDefaultBackendFormat(
983979
GrColorType::kAlpha_8, GrRenderable::kNo);
984-
gTestStruct.fAtlas = GrDrawOpAtlas::Make(context->priv().proxyProvider(),
985-
format, GrColorType::kAlpha_8,
986-
ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT,
987-
PLOT_WIDTH, PLOT_HEIGHT,
988-
GrDrawOpAtlas::AllowMultitexturing::kYes,
989-
&gTestStruct);
980+
GrDrawOpAtlasConfig atlasConfig(context->priv().caps()->maxTextureSize(),
981+
kMaxAtlasTextureBytes);
982+
SkISize size = atlasConfig.atlasDimensions(kA8_GrMaskFormat);
983+
gTestStruct.fAtlas =
984+
GrDrawOpAtlas::Make(context->priv().proxyProvider(), format, GrColorType::kAlpha_8,
985+
size.width(), size.height(), kPlotWidth, kPlotHeight,
986+
GrDrawOpAtlas::AllowMultitexturing::kYes, &gTestStruct);
990987
}
991988

992989
SkMatrix viewMatrix = GrTest::TestMatrix(random);

0 commit comments

Comments
 (0)