From 8ce238c85708a0d425f9056e1297176e6fda7a58 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Thu, 25 Jan 2024 10:58:23 -0800 Subject: [PATCH] Eliminate an extra vector allocation for many attributes (#2049) --- include/mbgl/gfx/vertex_attribute.hpp | 12 ++-- include/mbgl/shaders/mtl/shader_program.hpp | 3 +- src/mbgl/gfx/vertex_attribute.cpp | 15 +++-- src/mbgl/shaders/mtl/background.cpp | 2 +- src/mbgl/shaders/mtl/background_pattern.cpp | 2 +- src/mbgl/shaders/mtl/circle.cpp | 16 +++--- src/mbgl/shaders/mtl/clipping_mask.cpp | 2 +- src/mbgl/shaders/mtl/collision_box.cpp | 10 ++-- src/mbgl/shaders/mtl/collision_circle.cpp | 8 +-- src/mbgl/shaders/mtl/debug.cpp | 2 +- src/mbgl/shaders/mtl/fill.cpp | 28 +++++----- src/mbgl/shaders/mtl/fill_extrusion.cpp | 10 ++-- .../shaders/mtl/fill_extrusion_pattern.cpp | 12 ++-- src/mbgl/shaders/mtl/heatmap.cpp | 6 +- src/mbgl/shaders/mtl/heatmap_texture.cpp | 2 +- src/mbgl/shaders/mtl/hillshade.cpp | 4 +- src/mbgl/shaders/mtl/hillshade_prepare.cpp | 4 +- src/mbgl/shaders/mtl/line.cpp | 56 +++++++++---------- src/mbgl/shaders/mtl/line_gradient.cpp | 14 ++--- src/mbgl/shaders/mtl/raster.cpp | 4 +- src/mbgl/shaders/mtl/shader_program.cpp | 8 +-- src/mbgl/shaders/mtl/symbol_icon.cpp | 12 ++-- src/mbgl/shaders/mtl/symbol_sdf.cpp | 20 +++---- src/mbgl/shaders/mtl/symbol_text_and_icon.cpp | 18 +++--- 24 files changed, 135 insertions(+), 135 deletions(-) diff --git a/include/mbgl/gfx/vertex_attribute.hpp b/include/mbgl/gfx/vertex_attribute.hpp index 0ecec50cc..741e1ee48 100644 --- a/include/mbgl/gfx/vertex_attribute.hpp +++ b/include/mbgl/gfx/vertex_attribute.hpp @@ -33,7 +33,6 @@ class VertexAttributeArray; class VertexVectorBase; using UniqueVertexAttribute = std::unique_ptr; -using UniqueVertexAttributeArray = std::unique_ptr; class VertexAttribute { public: @@ -304,17 +303,18 @@ public: /// Add a new attribute element. /// Returns a pointer to the new element on success, or null if the attribute already exists. /// The result is valid only until the next non-const method call on this class. + /// @param count Number of items, zero for shared data const std::unique_ptr& add(const StringIdentity id, int index = -1, - AttributeDataType = AttributeDataType::Invalid, - std::size_t count = 1); + AttributeDataType type = AttributeDataType::Invalid, + std::size_t count = 0); /// Add a new attribute element if it doesn't already exist. /// Returns a pointer to the new element on success, or null if the type or count conflict with an existing entry. /// The result is valid only until the next non-const method call on this class. /// @param index index to match, or -1 for any /// @param type type to match, or `Invalid` for any - /// @param count type to match, or 0 for any + /// @param count Number of items, zero for shared data const std::unique_ptr& getOrAdd(const StringIdentity id, int index = -1, AttributeDataType type = AttributeDataType::Invalid, @@ -407,7 +407,9 @@ protected: // Apply the property, or add it to the uniforms collection if it's constant. if (!isConstant && binder->getVertexCount() > 0) { using Attribute = typename DataDrivenPaintProperty::Attribute; - applyPaintProperty(attrIndex, getOrAdd(*attributeNameID), binder); + const auto& attr = getOrAdd( + *attributeNameID, /*index=*/-1, /*type=*/gfx::AttributeDataType::Invalid, /*count=*/0); + applyPaintProperty(attrIndex, attr, binder); } else { propertiesAsUniforms.emplace(*attributeNameID); } diff --git a/include/mbgl/shaders/mtl/shader_program.hpp b/include/mbgl/shaders/mtl/shader_program.hpp index 357a32549..7a63be323 100644 --- a/include/mbgl/shaders/mtl/shader_program.hpp +++ b/include/mbgl/shaders/mtl/shader_program.hpp @@ -14,10 +14,9 @@ namespace mbgl { namespace shaders { struct AttributeInfo { - AttributeInfo(std::size_t index, gfx::AttributeDataType dataType, std::size_t count, std::string_view name); + AttributeInfo(std::size_t index, gfx::AttributeDataType dataType, std::string_view name); std::size_t index; gfx::AttributeDataType dataType; - std::size_t count; std::string_view name; StringIdentity nameID; }; diff --git a/src/mbgl/gfx/vertex_attribute.cpp b/src/mbgl/gfx/vertex_attribute.cpp index 7d3e4c4ac..111e3e0b4 100644 --- a/src/mbgl/gfx/vertex_attribute.cpp +++ b/src/mbgl/gfx/vertex_attribute.cpp @@ -116,13 +116,16 @@ const std::unique_ptr& VertexAttributeArray::getOrAdd(const Str AttributeDataType dataType, std::size_t count) { const auto result = attrs.insert(std::make_pair(id, std::unique_ptr())); - if (auto& attr = result.first->second; result.second) { - return attr = create(index, dataType, count); - } else if ((dataType == AttributeDataType::Invalid || attr->getDataType() == dataType) && - (index < 0 || attr->getIndex() == index) && (count == 0 || attr->getCount() == count)) { - return attr; + auto& attr = result.first->second; + if (result.second) { + // inserted + attr = create(index, dataType, count); + } else { + // already present + assert(dataType == AttributeDataType::Invalid || attr->getDataType() == dataType); + assert((index < 0 || attr->getIndex() == index) && (count == 0 || attr->getCount() == count)); } - return nullref; + return attr; } std::size_t VertexAttributeArray::getTotalSize() const { diff --git a/src/mbgl/shaders/mtl/background.cpp b/src/mbgl/shaders/mtl/background.cpp index 53f79a122..a542af6af 100644 --- a/src/mbgl/shaders/mtl/background.cpp +++ b/src/mbgl/shaders/mtl/background.cpp @@ -5,7 +5,7 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Float3, 1, "a_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Float3, "a_pos"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{1, true, false, sizeof(BackgroundDrawableUBO), "BackgroundDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/background_pattern.cpp b/src/mbgl/shaders/mtl/background_pattern.cpp index f7429e528..44ebf54b7 100644 --- a/src/mbgl/shaders/mtl/background_pattern.cpp +++ b/src/mbgl/shaders/mtl/background_pattern.cpp @@ -6,7 +6,7 @@ namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Float3, 1, "a_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Float3, "a_pos"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/circle.cpp b/src/mbgl/shaders/mtl/circle.cpp index 757f001b3..949a05c7b 100644 --- a/src/mbgl/shaders/mtl/circle.cpp +++ b/src/mbgl/shaders/mtl/circle.cpp @@ -4,14 +4,14 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Float4, 1, "a_color"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_radius"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_blur"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_opacity"}, - AttributeInfo{5, gfx::AttributeDataType::Float4, 1, "a_stroke_color"}, - AttributeInfo{6, gfx::AttributeDataType::Float2, 1, "a_stroke_width"}, - AttributeInfo{7, gfx::AttributeDataType::Float2, 1, "a_stroke_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Float4, "a_color"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_radius"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_blur"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_opacity"}, + AttributeInfo{5, gfx::AttributeDataType::Float4, "a_stroke_color"}, + AttributeInfo{6, gfx::AttributeDataType::Float2, "a_stroke_width"}, + AttributeInfo{7, gfx::AttributeDataType::Float2, "a_stroke_opacity"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{8, true, false, sizeof(CircleDrawableUBO), "CircleDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/clipping_mask.cpp b/src/mbgl/shaders/mtl/clipping_mask.cpp index 107537d95..28585accc 100644 --- a/src/mbgl/shaders/mtl/clipping_mask.cpp +++ b/src/mbgl/shaders/mtl/clipping_mask.cpp @@ -6,7 +6,7 @@ namespace shaders { using ShaderType = ShaderSource; const std::array ShaderType::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Float3, 1, "a_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Float3, "a_pos"}, }; const std::array ShaderType::uniforms = { UniformBlockInfo{1, true, false, sizeof(ClipUBO), "ClipUBO"}, diff --git a/src/mbgl/shaders/mtl/collision_box.cpp b/src/mbgl/shaders/mtl/collision_box.cpp index dfc1a0342..205f7fe6e 100644 --- a/src/mbgl/shaders/mtl/collision_box.cpp +++ b/src/mbgl/shaders/mtl/collision_box.cpp @@ -4,11 +4,11 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short2, 1, "a_anchor_pos"}, - AttributeInfo{2, gfx::AttributeDataType::Short2, 1, "a_extrude"}, - AttributeInfo{3, gfx::AttributeDataType::UShort2, 1, "a_placed"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_shift"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short2, "a_anchor_pos"}, + AttributeInfo{2, gfx::AttributeDataType::Short2, "a_extrude"}, + AttributeInfo{3, gfx::AttributeDataType::UShort2, "a_placed"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_shift"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{5, true, true, sizeof(CollisionUBO), "CollisionBoxUBO"}, diff --git a/src/mbgl/shaders/mtl/collision_circle.cpp b/src/mbgl/shaders/mtl/collision_circle.cpp index 5d43ffeb6..b0c36b075 100644 --- a/src/mbgl/shaders/mtl/collision_circle.cpp +++ b/src/mbgl/shaders/mtl/collision_circle.cpp @@ -5,10 +5,10 @@ namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short2, 1, "a_anchor_pos"}, - AttributeInfo{2, gfx::AttributeDataType::Short2, 1, "a_extrude"}, - AttributeInfo{3, gfx::AttributeDataType::UShort2, 1, "a_placed"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short2, "a_anchor_pos"}, + AttributeInfo{2, gfx::AttributeDataType::Short2, "a_extrude"}, + AttributeInfo{3, gfx::AttributeDataType::UShort2, "a_placed"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/debug.cpp b/src/mbgl/shaders/mtl/debug.cpp index 28d9737b8..f47f5ff1a 100644 --- a/src/mbgl/shaders/mtl/debug.cpp +++ b/src/mbgl/shaders/mtl/debug.cpp @@ -4,7 +4,7 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{1, true, true, sizeof(DebugUBO), "DebugUBO"}, diff --git a/src/mbgl/shaders/mtl/fill.cpp b/src/mbgl/shaders/mtl/fill.cpp index 2e656fb0c..5fcee8114 100644 --- a/src/mbgl/shaders/mtl/fill.cpp +++ b/src/mbgl/shaders/mtl/fill.cpp @@ -4,9 +4,9 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Float4, 1, "a_color"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Float4, "a_color"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_opacity"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{3, true, false, sizeof(FillDrawableUBO), "FillDrawableUBO"}, @@ -16,9 +16,9 @@ const std::array ShaderSource ShaderSource::textures = {}; const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Float4, 1, "a_outline_color"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Float4, "a_outline_color"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_opacity"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{3, true, false, sizeof(FillOutlineDrawableUBO), "FillOutlineDrawableUBO"}, @@ -28,10 +28,10 @@ const std::array ShaderSource ShaderSource::textures = {}; const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::UShort4, 1, "a_pattern_from"}, - AttributeInfo{2, gfx::AttributeDataType::UShort4, 1, "a_pattern_to"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::UShort4, "a_pattern_from"}, + AttributeInfo{2, gfx::AttributeDataType::UShort4, "a_pattern_to"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_opacity"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{4, true, true, sizeof(FillPatternDrawableUBO), "FillPatternDrawableUBO"}, @@ -45,10 +45,10 @@ const std::array ShaderSource ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::UShort4, 1, "a_pattern_from"}, - AttributeInfo{2, gfx::AttributeDataType::UShort4, 1, "a_pattern_to"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::UShort4, "a_pattern_from"}, + AttributeInfo{2, gfx::AttributeDataType::UShort4, "a_pattern_to"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_opacity"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/fill_extrusion.cpp b/src/mbgl/shaders/mtl/fill_extrusion.cpp index ba1c1671e..3b80c261a 100644 --- a/src/mbgl/shaders/mtl/fill_extrusion.cpp +++ b/src/mbgl/shaders/mtl/fill_extrusion.cpp @@ -4,11 +4,11 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short4, 1, "a_normal_ed"}, - AttributeInfo{2, gfx::AttributeDataType::Float4, 1, "a_color"}, - AttributeInfo{3, gfx::AttributeDataType::Float, 1, "a_base"}, - AttributeInfo{4, gfx::AttributeDataType::Float, 1, "a_height"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short4, "a_normal_ed"}, + AttributeInfo{2, gfx::AttributeDataType::Float4, "a_color"}, + AttributeInfo{3, gfx::AttributeDataType::Float, "a_base"}, + AttributeInfo{4, gfx::AttributeDataType::Float, "a_height"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp b/src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp index 6f235b608..6e5a78e28 100644 --- a/src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp +++ b/src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp @@ -6,12 +6,12 @@ namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short4, 1, "a_normal_ed"}, - AttributeInfo{2, gfx::AttributeDataType::Float, 1, "a_base"}, - AttributeInfo{3, gfx::AttributeDataType::Float, 1, "a_height"}, - AttributeInfo{4, gfx::AttributeDataType::UShort4, 1, "a_pattern_from"}, - AttributeInfo{5, gfx::AttributeDataType::UShort4, 1, "a_pattern_to"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short4, "a_normal_ed"}, + AttributeInfo{2, gfx::AttributeDataType::Float, "a_base"}, + AttributeInfo{3, gfx::AttributeDataType::Float, "a_height"}, + AttributeInfo{4, gfx::AttributeDataType::UShort4, "a_pattern_from"}, + AttributeInfo{5, gfx::AttributeDataType::UShort4, "a_pattern_to"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/heatmap.cpp b/src/mbgl/shaders/mtl/heatmap.cpp index a45900178..23f179b5c 100644 --- a/src/mbgl/shaders/mtl/heatmap.cpp +++ b/src/mbgl/shaders/mtl/heatmap.cpp @@ -4,9 +4,9 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Float2, 1, "a_weight"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_radius"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Float2, "a_weight"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_radius"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{3, true, false, sizeof(HeatmapDrawableUBO), "HeatmapDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/heatmap_texture.cpp b/src/mbgl/shaders/mtl/heatmap_texture.cpp index 6d9546363..689ba08fe 100644 --- a/src/mbgl/shaders/mtl/heatmap_texture.cpp +++ b/src/mbgl/shaders/mtl/heatmap_texture.cpp @@ -5,7 +5,7 @@ namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/hillshade.cpp b/src/mbgl/shaders/mtl/hillshade.cpp index a7b0f32a5..88713ea10 100644 --- a/src/mbgl/shaders/mtl/hillshade.cpp +++ b/src/mbgl/shaders/mtl/hillshade.cpp @@ -4,8 +4,8 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short2, 1, "a_texture_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short2, "a_texture_pos"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{2, true, true, sizeof(HillshadeDrawableUBO), "HillshadeDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/hillshade_prepare.cpp b/src/mbgl/shaders/mtl/hillshade_prepare.cpp index 6ae470498..d4b6cb301 100644 --- a/src/mbgl/shaders/mtl/hillshade_prepare.cpp +++ b/src/mbgl/shaders/mtl/hillshade_prepare.cpp @@ -5,8 +5,8 @@ namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short2, 1, "a_texture_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short2, "a_texture_pos"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/line.cpp b/src/mbgl/shaders/mtl/line.cpp index 5de634630..f99d466fc 100644 --- a/src/mbgl/shaders/mtl/line.cpp +++ b/src/mbgl/shaders/mtl/line.cpp @@ -4,14 +4,14 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos_normal"}, - AttributeInfo{1, gfx::AttributeDataType::UByte4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Float4, 1, "a_color"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_blur"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_opacity"}, - AttributeInfo{5, gfx::AttributeDataType::Float2, 1, "a_gapwidth"}, - AttributeInfo{6, gfx::AttributeDataType::Float2, 1, "a_offset"}, - AttributeInfo{7, gfx::AttributeDataType::Float2, 1, "a_width"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos_normal"}, + AttributeInfo{1, gfx::AttributeDataType::UByte4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Float4, "a_color"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_blur"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_opacity"}, + AttributeInfo{5, gfx::AttributeDataType::Float2, "a_gapwidth"}, + AttributeInfo{6, gfx::AttributeDataType::Float2, "a_offset"}, + AttributeInfo{7, gfx::AttributeDataType::Float2, "a_width"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{8, true, false, sizeof(LineDynamicUBO), "LineDynamicUBO"}, @@ -22,15 +22,15 @@ const std::array ShaderSource ShaderSource::textures = {}; const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos_normal"}, - AttributeInfo{1, gfx::AttributeDataType::UByte4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_blur"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_opacity"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_gapwidth"}, - AttributeInfo{5, gfx::AttributeDataType::Float2, 1, "a_offset"}, - AttributeInfo{6, gfx::AttributeDataType::Float2, 1, "a_width"}, - AttributeInfo{7, gfx::AttributeDataType::UShort4, 1, "a_pattern_from"}, - AttributeInfo{8, gfx::AttributeDataType::UShort4, 1, "a_pattern_to"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos_normal"}, + AttributeInfo{1, gfx::AttributeDataType::UByte4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_blur"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_opacity"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_gapwidth"}, + AttributeInfo{5, gfx::AttributeDataType::Float2, "a_offset"}, + AttributeInfo{6, gfx::AttributeDataType::Float2, "a_width"}, + AttributeInfo{7, gfx::AttributeDataType::UShort4, "a_pattern_from"}, + AttributeInfo{8, gfx::AttributeDataType::UShort4, "a_pattern_to"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{9, true, false, sizeof(LineDynamicUBO), "LineDynamicUBO"}, @@ -44,15 +44,15 @@ const std::array ShaderSource ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos_normal"}, - AttributeInfo{1, gfx::AttributeDataType::UByte4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Float4, 1, "a_color"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_blur"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_opacity"}, - AttributeInfo{5, gfx::AttributeDataType::Float2, 1, "a_gapwidth"}, - AttributeInfo{6, gfx::AttributeDataType::Float2, 1, "a_offset"}, - AttributeInfo{7, gfx::AttributeDataType::Float2, 1, "a_width"}, - AttributeInfo{8, gfx::AttributeDataType::Float2, 1, "a_floorwidth"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos_normal"}, + AttributeInfo{1, gfx::AttributeDataType::UByte4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Float4, "a_color"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_blur"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_opacity"}, + AttributeInfo{5, gfx::AttributeDataType::Float2, "a_gapwidth"}, + AttributeInfo{6, gfx::AttributeDataType::Float2, "a_offset"}, + AttributeInfo{7, gfx::AttributeDataType::Float2, "a_width"}, + AttributeInfo{8, gfx::AttributeDataType::Float2, "a_floorwidth"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{9, true, false, sizeof(LineDynamicUBO), "LineDynamicUBO"}, @@ -65,8 +65,8 @@ const std::array ShaderSource ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos_normal"}, - AttributeInfo{1, gfx::AttributeDataType::UByte4, 1, "a_data"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos_normal"}, + AttributeInfo{1, gfx::AttributeDataType::UByte4, "a_data"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{2, true, true, sizeof(LineBasicUBO), "LineBasicUBO"}, diff --git a/src/mbgl/shaders/mtl/line_gradient.cpp b/src/mbgl/shaders/mtl/line_gradient.cpp index f0c8d9eac..e981fe157 100644 --- a/src/mbgl/shaders/mtl/line_gradient.cpp +++ b/src/mbgl/shaders/mtl/line_gradient.cpp @@ -4,13 +4,13 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos_normal"}, - AttributeInfo{1, gfx::AttributeDataType::UByte4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_blur"}, - AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_opacity"}, - AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_gapwidth"}, - AttributeInfo{5, gfx::AttributeDataType::Float2, 1, "a_offset"}, - AttributeInfo{6, gfx::AttributeDataType::Float2, 1, "a_width"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos_normal"}, + AttributeInfo{1, gfx::AttributeDataType::UByte4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Float2, "a_blur"}, + AttributeInfo{3, gfx::AttributeDataType::Float2, "a_opacity"}, + AttributeInfo{4, gfx::AttributeDataType::Float2, "a_gapwidth"}, + AttributeInfo{5, gfx::AttributeDataType::Float2, "a_offset"}, + AttributeInfo{6, gfx::AttributeDataType::Float2, "a_width"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{7, true, false, sizeof(LineDynamicUBO), "LineDynamicUBO"}, diff --git a/src/mbgl/shaders/mtl/raster.cpp b/src/mbgl/shaders/mtl/raster.cpp index c0ba80422..0b74b2195 100644 --- a/src/mbgl/shaders/mtl/raster.cpp +++ b/src/mbgl/shaders/mtl/raster.cpp @@ -4,8 +4,8 @@ namespace mbgl { namespace shaders { const std::array ShaderSource::attributes = { - AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Short2, 1, "a_texture_pos"}, + AttributeInfo{0, gfx::AttributeDataType::Short2, "a_pos"}, + AttributeInfo{1, gfx::AttributeDataType::Short2, "a_texture_pos"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{2, true, true, sizeof(RasterDrawableUBO), "RasterDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/shader_program.cpp b/src/mbgl/shaders/mtl/shader_program.cpp index 01d90cfec..bcb7df204 100644 --- a/src/mbgl/shaders/mtl/shader_program.cpp +++ b/src/mbgl/shaders/mtl/shader_program.cpp @@ -24,13 +24,9 @@ using namespace std::string_literals; namespace mbgl { -shaders::AttributeInfo::AttributeInfo(std::size_t index_, - gfx::AttributeDataType dataType_, - std::size_t count_, - std::string_view name_) +shaders::AttributeInfo::AttributeInfo(std::size_t index_, gfx::AttributeDataType dataType_, std::string_view name_) : index(index_), dataType(dataType_), - count(count_), name(name_), nameID(stringIndexer().get(name_)) {} @@ -208,7 +204,7 @@ void ShaderProgram::initAttribute(const shaders::AttributeInfo& info) { [&](auto, const gfx::VertexAttribute& attrib) { assert(attrib.getIndex() != index); }); uniformBlocks.visit([&](auto, const gfx::UniformBlock& block) { assert(block.getIndex() != index); }); #endif - vertexAttributes.add(stringIndexer().get(info.name), index, info.dataType, info.count); + vertexAttributes.add(stringIndexer().get(info.name), index, info.dataType, 1); } void ShaderProgram::initUniformBlock(const shaders::UniformBlockInfo& info) { diff --git a/src/mbgl/shaders/mtl/symbol_icon.cpp b/src/mbgl/shaders/mtl/symbol_icon.cpp index a84c029f6..e1b776556 100644 --- a/src/mbgl/shaders/mtl/symbol_icon.cpp +++ b/src/mbgl/shaders/mtl/symbol_icon.cpp @@ -5,14 +5,14 @@ namespace shaders { const std::array ShaderSource::attributes = { // always attributes - AttributeInfo{0, gfx::AttributeDataType::Short4, 1, "a_pos_offset"}, - AttributeInfo{1, gfx::AttributeDataType::UShort4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Short4, 1, "a_pixeloffset"}, - AttributeInfo{3, gfx::AttributeDataType::Float3, 1, "a_projected_pos"}, - AttributeInfo{4, gfx::AttributeDataType::Float, 1, "a_fade_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short4, "a_pos_offset"}, + AttributeInfo{1, gfx::AttributeDataType::UShort4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Short4, "a_pixeloffset"}, + AttributeInfo{3, gfx::AttributeDataType::Float3, "a_projected_pos"}, + AttributeInfo{4, gfx::AttributeDataType::Float, "a_fade_opacity"}, // sometimes uniforms - AttributeInfo{5, gfx::AttributeDataType::Float, 1, "a_opacity"}, + AttributeInfo{5, gfx::AttributeDataType::Float, "a_opacity"}, }; const std::array ShaderSource::uniforms = { UniformBlockInfo{8, true, true, sizeof(SymbolDrawableUBO), "SymbolDrawableUBO"}, diff --git a/src/mbgl/shaders/mtl/symbol_sdf.cpp b/src/mbgl/shaders/mtl/symbol_sdf.cpp index cd4b8a6d4..74998b262 100644 --- a/src/mbgl/shaders/mtl/symbol_sdf.cpp +++ b/src/mbgl/shaders/mtl/symbol_sdf.cpp @@ -6,18 +6,18 @@ namespace shaders { const std::array ShaderSource::attributes = { // always attributes - AttributeInfo{0, gfx::AttributeDataType::Short4, 1, "a_pos_offset"}, - AttributeInfo{1, gfx::AttributeDataType::UShort4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Short4, 1, "a_pixeloffset"}, - AttributeInfo{3, gfx::AttributeDataType::Float3, 1, "a_projected_pos"}, - AttributeInfo{4, gfx::AttributeDataType::Float, 1, "a_fade_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short4, "a_pos_offset"}, + AttributeInfo{1, gfx::AttributeDataType::UShort4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Short4, "a_pixeloffset"}, + AttributeInfo{3, gfx::AttributeDataType::Float3, "a_projected_pos"}, + AttributeInfo{4, gfx::AttributeDataType::Float, "a_fade_opacity"}, // sometimes uniforms - AttributeInfo{5, gfx::AttributeDataType::Float4, 1, "a_fill_color"}, - AttributeInfo{6, gfx::AttributeDataType::Float4, 1, "a_halo_color"}, - AttributeInfo{7, gfx::AttributeDataType::Float, 1, "a_opacity"}, - AttributeInfo{8, gfx::AttributeDataType::Float, 1, "a_halo_width"}, - AttributeInfo{9, gfx::AttributeDataType::Float, 1, "a_halo_blur"}, + AttributeInfo{5, gfx::AttributeDataType::Float4, "a_fill_color"}, + AttributeInfo{6, gfx::AttributeDataType::Float4, "a_halo_color"}, + AttributeInfo{7, gfx::AttributeDataType::Float, "a_opacity"}, + AttributeInfo{8, gfx::AttributeDataType::Float, "a_halo_width"}, + AttributeInfo{9, gfx::AttributeDataType::Float, "a_halo_blur"}, }; const std::array ShaderSource::uniforms = { diff --git a/src/mbgl/shaders/mtl/symbol_text_and_icon.cpp b/src/mbgl/shaders/mtl/symbol_text_and_icon.cpp index 408a83033..9c6ebdeb2 100644 --- a/src/mbgl/shaders/mtl/symbol_text_and_icon.cpp +++ b/src/mbgl/shaders/mtl/symbol_text_and_icon.cpp @@ -6,17 +6,17 @@ namespace shaders { const std::array ShaderSource::attributes = { // always attributes - AttributeInfo{0, gfx::AttributeDataType::Short4, 1, "a_pos_offset"}, - AttributeInfo{1, gfx::AttributeDataType::UShort4, 1, "a_data"}, - AttributeInfo{2, gfx::AttributeDataType::Float3, 1, "a_projected_pos"}, - AttributeInfo{3, gfx::AttributeDataType::Float, 1, "a_fade_opacity"}, + AttributeInfo{0, gfx::AttributeDataType::Short4, "a_pos_offset"}, + AttributeInfo{1, gfx::AttributeDataType::UShort4, "a_data"}, + AttributeInfo{2, gfx::AttributeDataType::Float3, "a_projected_pos"}, + AttributeInfo{3, gfx::AttributeDataType::Float, "a_fade_opacity"}, // sometimes uniforms - AttributeInfo{4, gfx::AttributeDataType::Float4, 1, "a_fill_color"}, - AttributeInfo{5, gfx::AttributeDataType::Float4, 1, "a_halo_color"}, - AttributeInfo{6, gfx::AttributeDataType::Float, 1, "a_opacity"}, - AttributeInfo{7, gfx::AttributeDataType::Float, 1, "a_halo_width"}, - AttributeInfo{8, gfx::AttributeDataType::Float, 1, "a_halo_blur"}, + AttributeInfo{4, gfx::AttributeDataType::Float4, "a_fill_color"}, + AttributeInfo{5, gfx::AttributeDataType::Float4, "a_halo_color"}, + AttributeInfo{6, gfx::AttributeDataType::Float, "a_opacity"}, + AttributeInfo{7, gfx::AttributeDataType::Float, "a_halo_width"}, + AttributeInfo{8, gfx::AttributeDataType::Float, "a_halo_blur"}, }; const std::array ShaderSource::uniforms = {