Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit dcae028

Browse files
committed
refine the logic on supportComputeBuffer check
1 parent 0146cca commit dcae028

File tree

4 files changed

+50
-54
lines changed

4 files changed

+50
-54
lines changed

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_computebuffer_utils.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,10 @@ struct uiVertex
2222

2323
static int _instanceNum;
2424

25-
public static bool enableComputeBuffer = true;
26-
2725
public const int COMPUTE_BUFFER_MAX_ITEM_NUM = 1024 * 1024; // maxsize = 1M vertex/index
2826

29-
public static bool supportComputeBuffer {
30-
get { return SystemInfo.supportsComputeShaders && CanvasShader.supportComputeBuffer && enableComputeBuffer; }
31-
}
32-
3327
static void tryReleaseComputeBuffer() {
34-
if (!supportComputeBuffer) {
28+
if (!CanvasShader.supportComputeBuffer) {
3529
return;
3630
}
3731

@@ -63,7 +57,7 @@ void initComputeBuffer() {
6357
}
6458

6559
void resetComputeBuffer() {
66-
if (!supportComputeBuffer) return;
60+
if (!CanvasShader.supportComputeBuffer) return;
6761

6862
if (_computeBuffer == null) {
6963
this.initComputeBuffer();
@@ -76,14 +70,14 @@ void resetComputeBuffer() {
7670
}
7771

7872
void bindComputeBuffer() {
79-
if (!supportComputeBuffer) return;
73+
if (!CanvasShader.supportComputeBuffer) return;
8074

8175
_computeBuffer.SetData(_vertices);
8276
_indexBuffer.SetData(_indices);
8377
}
8478

8579
void addMeshToComputeBuffer(List<Vector3> vertex, List<Vector2> uv, List<int> triangles) {
86-
if (!supportComputeBuffer) return;
80+
if (!CanvasShader.supportComputeBuffer) return;
8781

8882
_startVertex = _vertices.Count;
8983
_startIndex = _indices.Count;

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_impl.cs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ void _saveLayer(uiRect bounds, uiPaint paint) {
157157
this._saveLayer_Points[2],
158158
this._saveLayer_Points[3],
159159
bounds);
160-
var renderDraw = CanvasShader.texRT(layer, layer.layerPaint.Value, mesh, parentLayer, supportComputeBuffer);
160+
var renderDraw = CanvasShader.texRT(layer, layer.layerPaint.Value, mesh, parentLayer);
161161
layer.draws.Add(renderDraw);
162162

163163
var blurLayer = this._createBlurLayer(layer, filter.sigmaX, filter.sigmaY, layer);
164164
var blurMesh = ImageMeshGenerator.imageMesh(null, uiRectHelper.one, bounds);
165-
layer.draws.Add(CanvasShader.texRT(layer, paint, blurMesh, blurLayer, supportComputeBuffer));
165+
layer.draws.Add(CanvasShader.texRT(layer, paint, blurMesh, blurLayer));
166166
}
167167
}
168168
else if (paint.backdrop is _MatrixImageFilter) {
@@ -195,7 +195,7 @@ void _saveLayer(uiRect bounds, uiPaint paint) {
195195
this._saveLayer_Points[2],
196196
this._saveLayer_Points[3],
197197
bounds);
198-
var renderDraw = CanvasShader.texRT(layer, layer.layerPaint.Value, mesh, parentLayer, supportComputeBuffer);
198+
var renderDraw = CanvasShader.texRT(layer, layer.layerPaint.Value, mesh, parentLayer);
199199
layer.draws.Add(renderDraw);
200200
}
201201
}
@@ -224,7 +224,7 @@ void _restore() {
224224
return;
225225
}
226226

227-
var renderDraw = CanvasShader.texRT(currentLayer, layer.layerPaint.Value, mesh, layer, supportComputeBuffer);
227+
var renderDraw = CanvasShader.texRT(currentLayer, layer.layerPaint.Value, mesh, layer);
228228
currentLayer.draws.Add(renderDraw);
229229
}
230230

@@ -366,11 +366,11 @@ bool _applyClip(uiRect? queryBounds) {
366366
// need to inflate a bit to make sure all area is cleared.
367367
var inflatedScissor = uiRectHelper.inflate(reducedClip.scissor.Value, this._fringeWidth);
368368
var boundsMesh = uiMeshMesh.create(inflatedScissor);
369-
layer.draws.Add(CanvasShader.stencilClear(layer, boundsMesh, supportComputeBuffer));
369+
layer.draws.Add(CanvasShader.stencilClear(layer, boundsMesh));
370370

371371
foreach (var maskElement in reducedClip.maskElements) {
372-
layer.draws.Add(CanvasShader.stencil0(layer, maskElement.mesh.duplicate(), supportComputeBuffer));
373-
layer.draws.Add(CanvasShader.stencil1(layer, boundsMesh.duplicate(), supportComputeBuffer));
372+
layer.draws.Add(CanvasShader.stencil0(layer, maskElement.mesh.duplicate()));
373+
layer.draws.Add(CanvasShader.stencil1(layer, boundsMesh.duplicate()));
374374
}
375375
}
376376

@@ -478,11 +478,11 @@ RenderLayer _createBlurLayer(RenderLayer maskLayer, float sigmaX, float sigmaY,
478478

479479
blurXLayer.draws.Add(CanvasShader.maskFilter(
480480
blurXLayer, blurMesh, maskLayer,
481-
radiusX, new Vector2(1f / textureWidth, 0), kernelX, supportComputeBuffer));
481+
radiusX, new Vector2(1f / textureWidth, 0), kernelX));
482482

483483
blurYLayer.draws.Add(CanvasShader.maskFilter(
484484
blurYLayer, blurMesh.duplicate(), blurXLayer,
485-
radiusY, new Vector2(0, -1f / textureHeight), kernelY, supportComputeBuffer));
485+
radiusY, new Vector2(0, -1f / textureHeight), kernelY));
486486

487487
return blurYLayer;
488488
}
@@ -534,7 +534,7 @@ void _drawWithMaskFilter(uiRect meshBounds, uiPaint paint, uiMaskFilter maskFilt
534534
return;
535535
}
536536

537-
layer.draws.Add(CanvasShader.texRT(layer, paint, blurMesh, blurLayer, supportComputeBuffer));
537+
layer.draws.Add(CanvasShader.texRT(layer, paint, blurMesh, blurLayer));
538538
}
539539

540540
delegate void _drawPathDrawMeshCallbackDelegate(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh,
@@ -552,16 +552,16 @@ void _drawPathDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh stroke
552552

553553
var layer = this._currentLayer;
554554
if (convex) {
555-
layer.draws.Add(CanvasShader.convexFill(layer, p, fillMesh, supportComputeBuffer));
555+
layer.draws.Add(CanvasShader.convexFill(layer, p, fillMesh));
556556
}
557557
else {
558-
layer.draws.Add(CanvasShader.fill0(layer, fillMesh, supportComputeBuffer));
559-
layer.draws.Add(CanvasShader.fill1(layer, p, fillMesh.boundsMesh, supportComputeBuffer));
558+
layer.draws.Add(CanvasShader.fill0(layer, fillMesh));
559+
layer.draws.Add(CanvasShader.fill1(layer, p, fillMesh.boundsMesh));
560560
}
561561

562562
if (strokeMesh != null) {
563-
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, alpha, strokeMult, strokeMesh, supportComputeBuffer));
564-
layer.draws.Add(CanvasShader.stroke1(layer, strokeMesh.duplicate(), supportComputeBuffer));
563+
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, alpha, strokeMult, strokeMesh));
564+
layer.draws.Add(CanvasShader.stroke1(layer, strokeMesh.duplicate()));
565565
}
566566
}
567567

@@ -575,8 +575,8 @@ void _drawPathDrawMeshCallback2(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strok
575575

576576
var layer = this._currentLayer;
577577

578-
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, alpha, strokeMult, strokeMesh, supportComputeBuffer));
579-
layer.draws.Add(CanvasShader.stroke1(layer, strokeMesh.duplicate(), supportComputeBuffer));
578+
layer.draws.Add(CanvasShader.strokeAlpha(layer, p, alpha, strokeMult, strokeMesh));
579+
layer.draws.Add(CanvasShader.stroke1(layer, strokeMesh.duplicate()));
580580
}
581581

582582
void _drawTextDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh strokeMesh, bool convex, float alpha,
@@ -589,7 +589,7 @@ void _drawTextDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh stroke
589589

590590
var layer = this._currentLayer;
591591
if (notEmoji) {
592-
layer.draws.Add(CanvasShader.texAlpha(layer, p, textMesh, tex, supportComputeBuffer));
592+
layer.draws.Add(CanvasShader.texAlpha(layer, p, textMesh, tex));
593593
}
594594
else {
595595
uiPaint paintWithWhite = new uiPaint(p);
@@ -602,7 +602,7 @@ void _drawTextDrawMeshCallback(uiPaint p, uiMeshMesh fillMesh, uiMeshMesh stroke
602602
var raw_mesh = textMesh.resolveMesh();
603603
var meshmesh = raw_mesh.duplicate();
604604
ObjectPool<TextBlobMesh>.release(textMesh);
605-
layer.draws.Add(CanvasShader.tex(layer, paintWithWhite, meshmesh, EmojiUtils.image, supportComputeBuffer));
605+
layer.draws.Add(CanvasShader.tex(layer, paintWithWhite, meshmesh, EmojiUtils.image));
606606
}
607607
}
608608

@@ -716,7 +716,7 @@ void _drawImageRect(Image image, uiRect? src, uiRect dst, uiPaint paint) {
716716
return;
717717
}
718718

719-
layer.draws.Add(CanvasShader.tex(layer, paint, mesh, image, supportComputeBuffer));
719+
layer.draws.Add(CanvasShader.tex(layer, paint, mesh, image));
720720
}
721721

722722
void _drawImageNine(Image image, uiRect? src, uiRect center, uiRect dst, uiPaint paint) {
@@ -743,7 +743,7 @@ void _drawImageNine(Image image, uiRect? src, uiRect center, uiRect dst, uiPaint
743743
return;
744744
}
745745

746-
layer.draws.Add(CanvasShader.tex(layer, paint, mesh, image, supportComputeBuffer));
746+
layer.draws.Add(CanvasShader.tex(layer, paint, mesh, image));
747747
}
748748

749749

@@ -1163,7 +1163,7 @@ void _drawLayer(RenderLayer layer, CommandBuffer cmdBuf) {
11631163
}
11641164

11651165
D.assert(mesh.vertices.Count > 0);
1166-
if (supportComputeBuffer) {
1166+
if (CanvasShader.supportComputeBuffer) {
11671167
this.addMeshToComputeBuffer(mesh.vertices?.data, mesh.uv?.data, mesh.triangles?.data);
11681168
cmd.properties.SetBuffer(CmdDraw.vertexBufferId, _computeBuffer);
11691169
cmd.properties.SetBuffer(CmdDraw.indexBufferId, _indexBuffer);

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_shader.cs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,16 @@ static Shader GetShader(string shaderName) {
177177
return shader;
178178
}
179179

180+
public static bool enableComputeBuffer = true;
181+
180182
public static readonly bool supportComputeBuffer;
181183

182184
static CanvasShader() {
183185
var convexFillShaderCompute = GetShader("UIWidgets/canvas_convexFill_cb");
184-
supportComputeBuffer = convexFillShaderCompute.isSupported;
186+
supportComputeBuffer = enableComputeBuffer && SystemInfo.supportsComputeShaders && convexFillShaderCompute.isSupported;
185187

186-
//if compute buffer is not supported, load normal shaders
187-
if (!PictureFlusher.supportComputeBuffer) {
188+
//if compute buffer is not supported, load normal shader
189+
if (!supportComputeBuffer) {
188190
var convexFillShader = GetShader("UIWidgets/canvas_convexFill");
189191
var fill0Shader = GetShader("UIWidgets/canvas_fill0");
190192
var fill1Shader = GetShader("UIWidgets/canvas_fill1");
@@ -345,7 +347,7 @@ static void _getShaderPassAndProps(
345347
}
346348

347349
public static PictureFlusher.CmdDraw convexFill(PictureFlusher.RenderLayer layer, uiPaint paint,
348-
uiMeshMesh mesh, bool supportComputeBuffer) {
350+
uiMeshMesh mesh) {
349351
var mat = supportComputeBuffer ? _convexFillMat_cb.getMaterial(paint.blendMode, layer.ignoreClip) : _convexFillMat.getMaterial(paint.blendMode, layer.ignoreClip);
350352

351353
_getShaderPassAndProps(layer, paint, mesh.matrix, 1.0f, 0.0f, out var pass, out var props);
@@ -358,7 +360,7 @@ public static PictureFlusher.CmdDraw convexFill(PictureFlusher.RenderLayer layer
358360
);
359361
}
360362

361-
public static PictureFlusher.CmdDraw fill0(PictureFlusher.RenderLayer layer, uiMeshMesh mesh, bool supportComputeBuffer) {
363+
public static PictureFlusher.CmdDraw fill0(PictureFlusher.RenderLayer layer, uiMeshMesh mesh) {
362364
Vector4 viewport = layer.viewport;
363365
var mat = supportComputeBuffer ? _fill0Mat_cb.getMaterial(layer.ignoreClip) : _fill0Mat.getMaterial(layer.ignoreClip);
364366

@@ -375,7 +377,7 @@ public static PictureFlusher.CmdDraw fill0(PictureFlusher.RenderLayer layer, uiM
375377
}
376378

377379
public static PictureFlusher.CmdDraw fill1(PictureFlusher.RenderLayer layer, uiPaint paint,
378-
uiMeshMesh mesh, bool supportComputeBuffer) {
380+
uiMeshMesh mesh) {
379381
var mat = supportComputeBuffer
380382
? _fill1Mat_cb.getMaterial(paint.blendMode)
381383
: _fill1Mat.getMaterial(paint.blendMode);
@@ -393,7 +395,7 @@ public static PictureFlusher.CmdDraw fill1(PictureFlusher.RenderLayer layer, uiP
393395
}
394396

395397
public static PictureFlusher.CmdDraw stroke0(PictureFlusher.RenderLayer layer, uiPaint paint,
396-
float alpha, uiMeshMesh mesh, bool supportComputeBuffer) {
398+
float alpha, uiMeshMesh mesh) {
397399
var mat = supportComputeBuffer
398400
? _stroke0Mat_cb.getMaterial(paint.blendMode, layer.ignoreClip)
399401
: _stroke0Mat.getMaterial(paint.blendMode, layer.ignoreClip);
@@ -407,7 +409,7 @@ public static PictureFlusher.CmdDraw stroke0(PictureFlusher.RenderLayer layer, u
407409
);
408410
}
409411

410-
public static PictureFlusher.CmdDraw stroke1(PictureFlusher.RenderLayer layer, uiMeshMesh mesh, bool supportComputeBuffer) {
412+
public static PictureFlusher.CmdDraw stroke1(PictureFlusher.RenderLayer layer, uiMeshMesh mesh) {
411413
Vector4 viewport = layer.viewport;
412414
var mat = supportComputeBuffer ? _stroke1Mat_cb : _stroke1Mat;
413415

@@ -423,7 +425,7 @@ public static PictureFlusher.CmdDraw stroke1(PictureFlusher.RenderLayer layer, u
423425
);
424426
}
425427

426-
public static PictureFlusher.CmdDraw strokeAlpha(PictureFlusher.RenderLayer layer, uiPaint paint, float alpha, float strokeMult, uiMeshMesh mesh, bool supportComputeBuffer) {
428+
public static PictureFlusher.CmdDraw strokeAlpha(PictureFlusher.RenderLayer layer, uiPaint paint, float alpha, float strokeMult, uiMeshMesh mesh) {
427429
var mat = supportComputeBuffer
428430
? _strokeAlphaMat_cb.getMaterial(paint.blendMode, layer.ignoreClip)
429431
: _strokeAlphaMat.getMaterial(paint.blendMode, layer.ignoreClip);
@@ -438,7 +440,7 @@ public static PictureFlusher.CmdDraw strokeAlpha(PictureFlusher.RenderLayer laye
438440
}
439441

440442
public static PictureFlusher.CmdDraw stencilClear(
441-
PictureFlusher.RenderLayer layer, uiMeshMesh mesh, bool supportComputeBuffer) {
443+
PictureFlusher.RenderLayer layer, uiMeshMesh mesh) {
442444
Vector4 viewport = layer.viewport;
443445
var mat = supportComputeBuffer ? _stencilMat_cb : _stencilMat;
444446

@@ -454,7 +456,7 @@ public static PictureFlusher.CmdDraw stencilClear(
454456
);
455457
}
456458

457-
public static PictureFlusher.CmdDraw stencil0(PictureFlusher.RenderLayer layer, uiMeshMesh mesh, bool supportComputeBuffer) {
459+
public static PictureFlusher.CmdDraw stencil0(PictureFlusher.RenderLayer layer, uiMeshMesh mesh) {
458460
Vector4 viewport = layer.viewport;
459461
var mat = supportComputeBuffer ? _stencilMat_cb : _stencilMat;
460462

@@ -470,7 +472,7 @@ public static PictureFlusher.CmdDraw stencil0(PictureFlusher.RenderLayer layer,
470472
);
471473
}
472474

473-
public static PictureFlusher.CmdDraw stencil1(PictureFlusher.RenderLayer layer, uiMeshMesh mesh, bool supportComputeBuffer) {
475+
public static PictureFlusher.CmdDraw stencil1(PictureFlusher.RenderLayer layer, uiMeshMesh mesh) {
474476
Vector4 viewport = layer.viewport;
475477
var mat = supportComputeBuffer ? _stencilMat_cb : _stencilMat;
476478

@@ -487,7 +489,7 @@ public static PictureFlusher.CmdDraw stencil1(PictureFlusher.RenderLayer layer,
487489
}
488490

489491
public static PictureFlusher.CmdDraw tex(PictureFlusher.RenderLayer layer, uiPaint paint,
490-
uiMeshMesh mesh, Image image, bool supportComputeBuffer) {
492+
uiMeshMesh mesh, Image image) {
491493
var mat = supportComputeBuffer
492494
? _texMat_cb.getMaterial(paint.blendMode, layer.ignoreClip)
493495
: _texMat.getMaterial(paint.blendMode, layer.ignoreClip);
@@ -507,7 +509,7 @@ public static PictureFlusher.CmdDraw tex(PictureFlusher.RenderLayer layer, uiPai
507509
}
508510

509511
public static PictureFlusher.CmdDraw texRT(PictureFlusher.RenderLayer layer, uiPaint paint,
510-
uiMeshMesh mesh, PictureFlusher.RenderLayer renderLayer, bool supportComputeBuffer) {
512+
uiMeshMesh mesh, PictureFlusher.RenderLayer renderLayer) {
511513
var mat = supportComputeBuffer
512514
? _texMat_cb.getMaterial(paint.blendMode, layer.ignoreClip)
513515
: _texMat.getMaterial(paint.blendMode, layer.ignoreClip);
@@ -524,17 +526,17 @@ public static PictureFlusher.CmdDraw texRT(PictureFlusher.RenderLayer layer, uiP
524526
}
525527

526528
public static PictureFlusher.CmdDraw texAlpha(PictureFlusher.RenderLayer layer, uiPaint paint,
527-
uiMeshMesh mesh, Texture tex, bool supportComputeBuffer) {
528-
return texAlpha(layer, paint, mesh, null, tex, supportComputeBuffer);
529+
uiMeshMesh mesh, Texture tex) {
530+
return texAlpha(layer, paint, mesh, null, tex);
529531
}
530532

531533
public static PictureFlusher.CmdDraw texAlpha(PictureFlusher.RenderLayer layer, uiPaint paint,
532-
TextBlobMesh textMesh, Texture tex, bool supportComputeBuffer) {
533-
return texAlpha(layer, paint, null, textMesh, tex, supportComputeBuffer);
534+
TextBlobMesh textMesh, Texture tex) {
535+
return texAlpha(layer, paint, null, textMesh, tex);
534536
}
535537

536538
public static PictureFlusher.CmdDraw texAlpha(PictureFlusher.RenderLayer layer, uiPaint paint,
537-
uiMeshMesh mesh, TextBlobMesh textMesh, Texture tex, bool supportComputeBuffer) {
539+
uiMeshMesh mesh, TextBlobMesh textMesh, Texture tex) {
538540
var mat = supportComputeBuffer
539541
?_texMat_cb.getMaterial(paint.blendMode, layer.ignoreClip)
540542
:_texMat.getMaterial(paint.blendMode, layer.ignoreClip);
@@ -554,7 +556,7 @@ public static PictureFlusher.CmdDraw texAlpha(PictureFlusher.RenderLayer layer,
554556
}
555557

556558
public static PictureFlusher.CmdDraw maskFilter(PictureFlusher.RenderLayer layer, uiMeshMesh mesh,
557-
PictureFlusher.RenderLayer renderLayer, float radius, Vector2 imgInc, float[] kernel, bool supportComputeBuffer) {
559+
PictureFlusher.RenderLayer renderLayer, float radius, Vector2 imgInc, float[] kernel) {
558560
Vector4 viewport = layer.viewport;
559561
var mat = supportComputeBuffer ? _filterMat_cb : _filterMat;
560562

@@ -576,7 +578,7 @@ public static PictureFlusher.CmdDraw maskFilter(PictureFlusher.RenderLayer layer
576578
}
577579

578580
public static PictureFlusher.CmdDraw fastShadow(PictureFlusher.RenderLayer layer, uiMeshMesh mesh, float sigma,
579-
bool isRect, bool isCircle, float corner, Vector4 bound, uiColor color, bool supportComputeBuffer) {
581+
bool isRect, bool isCircle, float corner, Vector4 bound, uiColor color) {
580582
Vector4 viewport = layer.viewport;
581583
var mat = supportComputeBuffer ? _shadowBox_cb : _shadowBox;
582584
if (!isRect) {

Runtime/ui/renderer/cmdbufferCanvas/rendering/canvas_shadow_utils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void _drawRRectShadow(uiPath path, uiPaint paint) {
6767
ObjectPool<uiMeshMesh>.release(meshBounds);
6868
ObjectPool<uiMeshMesh>.release(blurMesh);
6969
var mesh = uiMeshMesh.create(state.matrix, vertices, _triangles);
70-
layer.draws.Add(CanvasShader.fastShadow(layer, mesh, sigma, path.isRect, path.isCircle, path.rRectCorner, new Vector4(bound.left, bound.top, bound.right, bound.bottom), paint.color, supportComputeBuffer));
70+
layer.draws.Add(CanvasShader.fastShadow(layer, mesh, sigma, path.isRect, path.isCircle, path.rRectCorner, new Vector4(bound.left, bound.top, bound.right, bound.bottom), paint.color));
7171
}
7272

7373
}

0 commit comments

Comments
 (0)