Line data Source code
1 : /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 : *
3 : * This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef mozilla_gfx_layers_mlgpu_RenderPassMLGPU_inl_h
8 : #define mozilla_gfx_layers_mlgpu_RenderPassMLGPU_inl_h
9 :
10 : namespace mozilla {
11 : namespace layers {
12 :
13 : template <typename Traits>
14 : static inline bool
15 0 : AddShaderTriangles(VertexStagingBuffer* aBuffer,
16 : const Traits& aTraits,
17 : const gfx::Polygon* aGeometry = nullptr)
18 : {
19 : typedef typename Traits::TriangleVertices TriangleVertices;
20 : typedef typename Traits::FirstTriangle FirstTriangle;
21 : typedef typename Traits::SecondTriangle SecondTriangle;
22 :
23 0 : if (!aGeometry) {
24 0 : TriangleVertices base1 = aTraits.MakeVertex(FirstTriangle());
25 0 : TriangleVertices base2 = aTraits.MakeVertex(SecondTriangle());
26 0 : auto data1 = aTraits.MakeVertexData(FirstTriangle());
27 0 : auto data2 = aTraits.MakeVertexData(SecondTriangle());
28 0 : return aBuffer->PrependItem(base1, data1) && aBuffer->PrependItem(base2, data2);
29 : }
30 :
31 0 : auto triangles = aTraits.GenerateTriangles(*aGeometry);
32 0 : for (const auto& triangle : triangles) {
33 0 : TriangleVertices base = aTraits.MakeVertex(triangle);
34 0 : auto data = aTraits.MakeVertexData(triangle);
35 0 : if (!aBuffer->PrependItem(base, data)) {
36 0 : return false;
37 : }
38 : }
39 0 : return true;
40 : }
41 :
42 : template <typename Traits>
43 : inline bool
44 0 : BatchRenderPass<Traits>::Txn::AddImpl(const Traits& aTraits)
45 : {
46 0 : VertexStagingBuffer* instances = mPass->GetInstances();
47 :
48 0 : if (mPass->mGeometry == GeometryMode::Polygon) {
49 0 : if (const Maybe<gfx::Polygon>& geometry = aTraits.geometry()) {
50 0 : gfx::Polygon polygon = geometry->ClipPolygon(aTraits.rect());
51 0 : if (polygon.IsEmpty()) {
52 0 : return true;
53 : }
54 0 : return AddShaderTriangles(instances, aTraits, &polygon);
55 : }
56 0 : return AddShaderTriangles(instances, aTraits);
57 : }
58 :
59 : typedef typename Traits::UnitQuadVertex UnitQuadVertex;
60 : typedef typename Traits::UnitQuad UnitQuad;
61 :
62 0 : UnitQuadVertex base = aTraits.MakeUnitQuadVertex();
63 0 : auto data = aTraits.MakeVertexData(UnitQuad());
64 0 : return instances->AddItem(base, data);
65 : }
66 :
67 : } // namespace layers
68 : } // namespace mozilla
69 :
70 : #endif // mozilla_gfx_layers_mlgpu_RenderPassMLGPU_inl_h
|