This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 7 files changed +41
-1
lines changed Expand file tree Collapse file tree 7 files changed +41
-1
lines changed Original file line number Diff line number Diff line change @@ -107,6 +107,15 @@ constexpr MTLPrimitiveType ToMTLPrimitiveType(PrimitiveType type) {
107107 return MTLPrimitiveTypePoint;
108108}
109109
110+ constexpr MTLIndexType ToMTLIndexType (IndexType type) {
111+ switch (type) {
112+ case IndexType::k16bit:
113+ return MTLIndexTypeUInt16;
114+ default :
115+ return MTLIndexTypeUInt32;
116+ }
117+ }
118+
110119constexpr MTLBlendOperation ToMTLBlendOperation (BlendOperation type) {
111120 switch (type) {
112121 case BlendOperation::kAdd :
Original file line number Diff line number Diff line change 1313#include " impeller/renderer/backend/metal/pipeline_mtl.h"
1414#include " impeller/renderer/backend/metal/sampler_mtl.h"
1515#include " impeller/renderer/backend/metal/texture_mtl.h"
16+ #include " impeller/renderer/formats.h"
1617#include " impeller/renderer/host_buffer.h"
1718#include " impeller/renderer/shader_types.h"
1819
@@ -434,6 +435,9 @@ static bool Bind(PassBindingsCache& pass,
434435 ShaderStage::kFragment )) {
435436 return false ;
436437 }
438+ if (command.index_type == IndexType::kUnknown ) {
439+ return false ;
440+ }
437441 auto index_buffer = command.index_buffer .buffer ;
438442 if (!index_buffer) {
439443 return false ;
@@ -452,7 +456,7 @@ static bool Bind(PassBindingsCache& pass,
452456 // Returns void. All error checking must be done by this point.
453457 [encoder drawIndexedPrimitives: ToMTLPrimitiveType (command.primitive_type)
454458 indexCount: command.index_count
455- indexType: MTLIndexTypeUInt32
459+ indexType: ToMTLIndexType (command.index_type)
456460 indexBuffer: mtl_index_buffer
457461 indexBufferOffset: command.index_buffer.range.offset
458462 instanceCount: 1u
Original file line number Diff line number Diff line change 44
55#include " impeller/renderer/command.h"
66
7+ #include " impeller/renderer/formats.h"
78#include " impeller/renderer/vertex_descriptor.h"
89
910namespace impeller {
1011
1112bool Command::BindVertices (const VertexBuffer& buffer) {
13+ if (index_type == IndexType::kUnknown ) {
14+ return false ;
15+ }
16+
1217 vertex_bindings.buffers [VertexDescriptor::kReservedVertexBufferIndex ] =
1318 buffer.vertex_buffer ;
1419 index_buffer = buffer.index_buffer ;
1520 index_count = buffer.index_count ;
21+ index_type = buffer.index_type ;
1622 return true ;
1723}
1824
Original file line number Diff line number Diff line change @@ -64,6 +64,7 @@ struct Command {
6464 // /
6565 BufferView index_buffer;
6666 size_t index_count = 0u ;
67+ IndexType index_type = IndexType::kUnknown ;
6768 std::string label;
6869 PrimitiveType primitive_type = PrimitiveType::kTriangle ;
6970 WindingOrder winding = WindingOrder::kClockwise ;
Original file line number Diff line number Diff line change @@ -133,6 +133,12 @@ enum class WindingOrder {
133133 kCounterClockwise ,
134134};
135135
136+ enum class IndexType {
137+ kUnknown ,
138+ k16bit,
139+ k32bit,
140+ };
141+
136142enum class PrimitiveType {
137143 kTriangle ,
138144 kTriangleStrip ,
Original file line number Diff line number Diff line change 55#pragma once
66
77#include " impeller/renderer/buffer_view.h"
8+ #include " impeller/renderer/formats.h"
89
910namespace impeller {
1011
1112struct VertexBuffer {
1213 BufferView vertex_buffer;
1314 BufferView index_buffer;
1415 size_t index_count = 0u ;
16+ IndexType index_type = IndexType::kUnknown ;
1517
1618 constexpr operator bool () const {
1719 return static_cast <bool >(vertex_buffer) && static_cast <bool >(index_buffer);
Original file line number Diff line number Diff line change @@ -29,6 +29,16 @@ class VertexBufferBuilder {
2929
3030 ~VertexBufferBuilder () = default ;
3131
32+ constexpr impeller::IndexType GetIndexType () const {
33+ if constexpr (sizeof (IndexType) == 2 ) {
34+ return impeller::IndexType::k16bit;
35+ } else if (sizeof (IndexType) == 4 ) {
36+ return impeller::IndexType::k32bit;
37+ } else {
38+ return impeller::IndexType::kUnknown ;
39+ }
40+ }
41+
3242 void SetLabel (std::string label) { label_ = std::move (label); }
3343
3444 void Reserve (size_t count) { return vertices_.reserve (count); }
@@ -56,6 +66,7 @@ class VertexBufferBuilder {
5666 buffer.vertex_buffer = CreateVertexBufferView (host_buffer);
5767 buffer.index_buffer = CreateIndexBufferView (host_buffer);
5868 buffer.index_count = GetIndexCount ();
69+ buffer.index_type = GetIndexType ();
5970 return buffer;
6071 };
6172
@@ -65,6 +76,7 @@ class VertexBufferBuilder {
6576 buffer.vertex_buffer = CreateVertexBufferView (device_allocator);
6677 buffer.index_buffer = CreateIndexBufferView (device_allocator);
6778 buffer.index_count = GetIndexCount ();
79+ buffer.index_type = GetIndexType ();
6880 return buffer;
6981 };
7082
You can’t perform that action at this time.
0 commit comments