commit cd5cf799ac42a05a4870a3739ac62cf35c2548b8
parent bf5e2959c72c0de93fd13ac144f45006cfed42ae
Author: Nicolas Silva <nical@fastmail.com>
Date: Tue, 9 Dec 2025 08:19:07 +0000
Bug 1998724 - Clean up vertex descriptors. r=gfx-reviewers,lsalzman
This was originally motivated by avoiding a mistake I made during the gpu cache -> gpu buffer conversion, but it also makes the descriptors a fair bit nicer to read and work with.
Differential Revision: https://phabricator.services.mozilla.com/D271673
Diffstat:
3 files changed, 204 insertions(+), 693 deletions(-)
diff --git a/gfx/wr/webrender/src/device/gl.rs b/gfx/wr/webrender/src/device/gl.rs
@@ -117,6 +117,96 @@ pub struct VertexAttribute {
pub kind: VertexAttributeKind,
}
+impl VertexAttribute {
+ pub const fn quad_instance_vertex() -> Self {
+ VertexAttribute {
+ name: "aPosition",
+ count: 2,
+ kind: VertexAttributeKind::U8Norm,
+ }
+ }
+
+ pub const fn gpu_buffer_address(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 1,
+ kind: VertexAttributeKind::I32,
+ }
+ }
+
+ pub const fn f32x4(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 4,
+ kind: VertexAttributeKind::F32,
+ }
+ }
+
+ pub const fn f32x3(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 3,
+ kind: VertexAttributeKind::F32,
+ }
+ }
+
+ pub const fn f32x2(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 2,
+ kind: VertexAttributeKind::F32,
+ }
+ }
+
+ pub const fn f32(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 1,
+ kind: VertexAttributeKind::F32,
+ }
+ }
+
+ pub const fn i32x4(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 4,
+ kind: VertexAttributeKind::I32,
+ }
+ }
+
+ pub const fn i32x2(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 2,
+ kind: VertexAttributeKind::I32,
+ }
+ }
+
+ pub const fn i32(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 1,
+ kind: VertexAttributeKind::I32,
+ }
+ }
+
+ pub const fn u16(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 1,
+ kind: VertexAttributeKind::U16,
+ }
+ }
+
+ pub const fn u16x2(name: &'static str) -> Self {
+ VertexAttribute {
+ name,
+ count: 2,
+ kind: VertexAttributeKind::U16,
+ }
+ }
+}
+
#[derive(Debug)]
pub struct VertexDescriptor {
pub vertex_attributes: &'static [VertexAttribute],
diff --git a/gfx/wr/webrender/src/renderer/shade.rs b/gfx/wr/webrender/src/renderer/shade.rs
@@ -77,12 +77,6 @@ pub(crate) enum ShaderKind {
ClipCache(VertexArrayKind),
Brush,
Text,
- #[allow(dead_code)]
- VectorStencil,
- #[allow(dead_code)]
- VectorCover,
- #[allow(dead_code)]
- Resolve,
Composite,
Clear,
Copy,
@@ -184,7 +178,7 @@ impl LazilyCompiledShader {
if self.program.is_none() {
let start_time = zeitstempel::now();
let program = match self.kind {
- ShaderKind::Primitive | ShaderKind::Brush | ShaderKind::Text | ShaderKind::Resolve | ShaderKind::Clear | ShaderKind::Copy => {
+ ShaderKind::Primitive | ShaderKind::Brush | ShaderKind::Text | ShaderKind::Clear | ShaderKind::Copy => {
create_prim_shader(
self.name,
device,
@@ -198,20 +192,6 @@ impl LazilyCompiledShader {
&self.features,
)
}
- ShaderKind::VectorStencil => {
- create_prim_shader(
- self.name,
- device,
- &self.features,
- )
- }
- ShaderKind::VectorCover => {
- create_prim_shader(
- self.name,
- device,
- &self.features,
- )
- }
ShaderKind::Composite => {
create_prim_shader(
self.name,
@@ -245,10 +225,7 @@ impl LazilyCompiledShader {
ShaderKind::Brush |
ShaderKind::Text => VertexArrayKind::Primitive,
ShaderKind::Cache(format) => format,
- ShaderKind::VectorStencil => VertexArrayKind::VectorStencil,
- ShaderKind::VectorCover => VertexArrayKind::VectorCover,
ShaderKind::ClipCache(format) => format,
- ShaderKind::Resolve => VertexArrayKind::Resolve,
ShaderKind::Composite => VertexArrayKind::Composite,
ShaderKind::Clear => VertexArrayKind::Clear,
ShaderKind::Copy => VertexArrayKind::Copy,
@@ -264,11 +241,8 @@ impl LazilyCompiledShader {
VertexArrayKind::Blur => &desc::BLUR,
VertexArrayKind::ClipRect => &desc::CLIP_RECT,
VertexArrayKind::ClipBoxShadow => &desc::CLIP_BOX_SHADOW,
- VertexArrayKind::VectorStencil => &desc::VECTOR_STENCIL,
- VertexArrayKind::VectorCover => &desc::VECTOR_COVER,
VertexArrayKind::Border => &desc::BORDER,
VertexArrayKind::Scale => &desc::SCALE,
- VertexArrayKind::Resolve => &desc::RESOLVE,
VertexArrayKind::SvgFilterNode => &desc::SVG_FILTER_NODE,
VertexArrayKind::Composite => &desc::COMPOSITE,
VertexArrayKind::Clear => &desc::CLEAR,
diff --git a/gfx/wr/webrender/src/renderer/vertex.rs b/gfx/wr/webrender/src/renderer/vertex.rs
@@ -29,11 +29,7 @@ pub mod desc {
use crate::device::{VertexAttribute, VertexAttributeKind, VertexDescriptor};
pub const PRIM_INSTANCES: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[VertexAttribute {
name: "aData",
count: 4,
@@ -42,734 +38,193 @@ pub mod desc {
};
pub const BLUR: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aBlurRenderTaskAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aBlurSourceTaskAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aBlurDirection",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aBlurEdgeMode",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aBlurParams",
- count: 3,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::gpu_buffer_address("aBlurRenderTaskAddress"),
+ VertexAttribute::gpu_buffer_address("aBlurSourceTaskAddress"),
+ VertexAttribute::i32("aBlurDirection"),
+ VertexAttribute::i32("aBlurEdgeMode"),
+ VertexAttribute::f32x3("aBlurParams"),
],
};
pub const LINE: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aLocalSize",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aWavyLineThickness",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aStyle",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aAxisSelect",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("aTaskRect"),
+ VertexAttribute::f32x2("aLocalSize"),
+ VertexAttribute::f32("aWavyLineThickness"),
+ VertexAttribute::i32("aStyle"),
+ VertexAttribute::f32("aAxisSelect"),
],
};
pub const FAST_LINEAR_GRADIENT: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor0",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor1",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aAxisSelect",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("aTaskRect"),
+ VertexAttribute::f32x4("aColor0"),
+ VertexAttribute::f32x4("aColor1"),
+ VertexAttribute::f32("aAxisSelect"),
],
};
pub const LINEAR_GRADIENT: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aStartPoint",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aEndPoint",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aScale",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aExtendMode",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aGradientStopsAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aTaskRect"),
+ VertexAttribute::f32x2("aStartPoint"),
+ VertexAttribute::f32x2("aEndPoint"),
+ VertexAttribute::f32x2("aScale"),
+ VertexAttribute::i32("aExtendMode"),
+ VertexAttribute::gpu_buffer_address("aGradientStopsAddress"),
],
};
pub const RADIAL_GRADIENT: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aCenter",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aScale",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aStartRadius",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aEndRadius",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aXYRatio",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aExtendMode",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aGradientStopsAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aTaskRect"),
+ VertexAttribute::f32x2("aCenter"),
+ VertexAttribute::f32x2("aScale"),
+ VertexAttribute::f32("aStartRadius"),
+ VertexAttribute::f32("aEndRadius"),
+ VertexAttribute::f32("aXYRatio"),
+ VertexAttribute::i32("aExtendMode"),
+ VertexAttribute::i32("aGradientStopsAddress"),
],
};
pub const CONIC_GRADIENT: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aCenter",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aScale",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aStartOffset",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aEndOffset",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aAngle",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aExtendMode",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aGradientStopsAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aTaskRect"),
+ VertexAttribute::f32x2("aCenter"),
+ VertexAttribute::f32x2("aScale"),
+ VertexAttribute::f32("aStartOffset"),
+ VertexAttribute::f32("aEndOffset"),
+ VertexAttribute::f32("aAngle"),
+ VertexAttribute::i32("aExtendMode"),
+ VertexAttribute::gpu_buffer_address("aGradientStopsAddress"),
],
};
pub const BORDER: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aTaskOrigin",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor0",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor1",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFlags",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aWidths",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aRadii",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipParams1",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipParams2",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x2("aTaskOrigin"),
+ VertexAttribute::f32x4("aRect"),
+ VertexAttribute::f32x4("aColor0"),
+ VertexAttribute::f32x4("aColor1"),
+ VertexAttribute::i32("aFlags"),
+ VertexAttribute::f32x2("aWidths"),
+ VertexAttribute::f32x2("aRadii"),
+ VertexAttribute::f32x4("aClipParams1"),
+ VertexAttribute::f32x4("aClipParams2"),
],
};
pub const SCALE: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aScaleTargetRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aScaleSourceRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aSourceRectType",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("aScaleTargetRect"),
+ VertexAttribute::f32x4("aScaleSourceRect"),
+ VertexAttribute::f32("aSourceRectType"),
],
};
pub const CLIP_RECT: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
// common clip attributes
- VertexAttribute {
- name: "aClipDeviceArea",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipOrigins",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aDevicePixelScale",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aTransformIds",
- count: 2,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aClipDeviceArea"),
+ VertexAttribute::f32x4("aClipOrigins"),
+ VertexAttribute::f32("aDevicePixelScale"),
+ VertexAttribute::i32x2("aTransformIds"),
// specific clip attributes
- VertexAttribute {
- name: "aClipLocalPos",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipLocalRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipMode",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRect_TL",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRadii_TL",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRect_TR",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRadii_TR",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRect_BL",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRadii_BL",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRect_BR",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipRadii_BR",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x2("aClipLocalPos"),
+ VertexAttribute::f32x4("aClipLocalRect"),
+ VertexAttribute::f32("aClipMode"),
+ VertexAttribute::f32x4("aClipRect_TL"),
+ VertexAttribute::f32x4("aClipRadii_TL"),
+ VertexAttribute::f32x4("aClipRect_TR"),
+ VertexAttribute::f32x4("aClipRadii_TR"),
+ VertexAttribute::f32x4("aClipRect_BL"),
+ VertexAttribute::f32x4("aClipRadii_BL"),
+ VertexAttribute::f32x4("aClipRect_BR"),
+ VertexAttribute::f32x4("aClipRadii_BR"),
],
};
pub const CLIP_BOX_SHADOW: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
// common clip attributes
- VertexAttribute {
- name: "aClipDeviceArea",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipOrigins",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aDevicePixelScale",
- count: 1,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aTransformIds",
- count: 2,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aClipDeviceArea"),
+ VertexAttribute::f32x4("aClipOrigins"),
+ VertexAttribute::f32("aDevicePixelScale"),
+ VertexAttribute::i32x2("aTransformIds"),
// specific clip attributes
- VertexAttribute {
- name: "aClipDataResourceAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aClipSrcRectSize",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aClipMode",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aStretchMode",
- count: 2,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aClipDestRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::gpu_buffer_address("aClipDataResourceAddress"),
+ VertexAttribute::f32x2("aClipSrcRectSize"),
+ VertexAttribute::i32("aClipMode"),
+ VertexAttribute::i32x2("aStretchMode"),
+ VertexAttribute::f32x4("aClipDestRect"),
],
};
- pub const RESOLVE: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
- instance_attributes: &[VertexAttribute {
- name: "aRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- }],
- };
-
pub const SVG_FILTER_NODE: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aFilterTargetRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFilterInput1ContentScaleAndOffset",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFilterInput2ContentScaleAndOffset",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFilterInput1TaskAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aFilterInput2TaskAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aFilterKind",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
- VertexAttribute {
- name: "aFilterInputCount",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
- VertexAttribute {
- name: "aFilterExtraDataAddress",
- count: 1,
- kind: VertexAttributeKind::I32,
- },
+ VertexAttribute::f32x4("aFilterTargetRect"),
+ VertexAttribute::f32x4("aFilterInput1ContentScaleAndOffset"),
+ VertexAttribute::f32x4("aFilterInput2ContentScaleAndOffset"),
+ VertexAttribute::gpu_buffer_address("aFilterInput1TaskAddress"),
+ VertexAttribute::gpu_buffer_address("aFilterInput2TaskAddress"),
+ VertexAttribute::u16("aFilterKind"),
+ VertexAttribute::u16("aFilterInputCount"),
+ VertexAttribute::gpu_buffer_address("aFilterExtraDataAddress"),
],
};
pub const MASK: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
- instance_attributes: &[
- VertexAttribute {
- name: "aData",
- count: 4,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aClipData",
- count: 4,
- kind: VertexAttributeKind::I32,
- },
- ],
- };
-
- pub const VECTOR_STENCIL: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aFromPosition",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aCtrlPosition",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aToPosition",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFromNormal",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aCtrlNormal",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aToNormal",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aPathID",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
- VertexAttribute {
- name: "aPad",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
- ],
- };
-
- pub const VECTOR_COVER: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
- instance_attributes: &[
- VertexAttribute {
- name: "aTargetRect",
- count: 4,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aStencilOrigin",
- count: 2,
- kind: VertexAttributeKind::I32,
- },
- VertexAttribute {
- name: "aSubpixel",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
- VertexAttribute {
- name: "aPad",
- count: 1,
- kind: VertexAttributeKind::U16,
- },
+ VertexAttribute::i32x4("aData"),
+ VertexAttribute::i32x4("aClipData"),
],
};
pub const COMPOSITE: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aDeviceRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aDeviceClipRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aParams",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aUvRect0",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aUvRect1",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aUvRect2",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aFlip",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aDeviceRoundedClipRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aDeviceRoundedClipRadii",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("aDeviceRect"),
+ VertexAttribute::f32x4("aDeviceClipRect"),
+ VertexAttribute::f32x4("aColor"),
+ VertexAttribute::f32x4("aParams"),
+ VertexAttribute::f32x4("aUvRect0"),
+ VertexAttribute::f32x4("aUvRect1"),
+ VertexAttribute::f32x4("aUvRect2"),
+ VertexAttribute::f32x2("aFlip"),
+ VertexAttribute::f32x4("aDeviceRoundedClipRect"),
+ VertexAttribute::f32x4("aDeviceRoundedClipRadii"),
],
};
pub const CLEAR: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "aRect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "aColor",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("aRect"),
+ VertexAttribute::f32x4("aColor"),
],
};
pub const COPY: VertexDescriptor = VertexDescriptor {
- vertex_attributes: &[VertexAttribute {
- name: "aPosition",
- count: 2,
- kind: VertexAttributeKind::U8Norm,
- }],
+ vertex_attributes: &[VertexAttribute::quad_instance_vertex()],
instance_attributes: &[
- VertexAttribute {
- name: "a_src_rect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "a_dst_rect",
- count: 4,
- kind: VertexAttributeKind::F32,
- },
- VertexAttribute {
- name: "a_dst_texture_size",
- count: 2,
- kind: VertexAttributeKind::F32,
- },
+ VertexAttribute::f32x4("a_src_rect"),
+ VertexAttribute::f32x4("a_dst_rect"),
+ VertexAttribute::f32x2("a_dst_texture_size"),
],
};
}
@@ -780,8 +235,6 @@ pub enum VertexArrayKind {
Blur,
ClipRect,
ClipBoxShadow,
- VectorStencil,
- VectorCover,
Border,
Scale,
LineDecoration,
@@ -789,7 +242,6 @@ pub enum VertexArrayKind {
LinearGradient,
RadialGradient,
ConicGradient,
- Resolve,
SvgFilterNode,
Composite,
Clear,
@@ -1013,7 +465,6 @@ pub struct RendererVAOs {
linear_gradient_vao: VAO,
radial_gradient_vao: VAO,
conic_gradient_vao: VAO,
- resolve_vao: VAO,
svg_filter_node_vao: VAO,
composite_vao: VAO,
clear_vao: VAO,
@@ -1060,7 +511,6 @@ impl RendererVAOs {
linear_gradient_vao: device.create_vao_with_new_instances(&desc::LINEAR_GRADIENT, &prim_vao),
radial_gradient_vao: device.create_vao_with_new_instances(&desc::RADIAL_GRADIENT, &prim_vao),
conic_gradient_vao: device.create_vao_with_new_instances(&desc::CONIC_GRADIENT, &prim_vao),
- resolve_vao: device.create_vao_with_new_instances(&desc::RESOLVE, &prim_vao),
svg_filter_node_vao: device.create_vao_with_new_instances(&desc::SVG_FILTER_NODE, &prim_vao),
composite_vao: device.create_vao_with_new_instances(&desc::COMPOSITE, &prim_vao),
clear_vao: device.create_vao_with_new_instances(&desc::CLEAR, &prim_vao),
@@ -1072,7 +522,6 @@ impl RendererVAOs {
pub fn deinit(self, device: &mut Device) {
device.delete_vao(self.prim_vao);
- device.delete_vao(self.resolve_vao);
device.delete_vao(self.clip_rect_vao);
device.delete_vao(self.clip_box_shadow_vao);
device.delete_vao(self.fast_linear_gradient_vao);
@@ -1099,7 +548,6 @@ impl ops::Index<VertexArrayKind> for RendererVAOs {
VertexArrayKind::ClipRect => &self.clip_rect_vao,
VertexArrayKind::ClipBoxShadow => &self.clip_box_shadow_vao,
VertexArrayKind::Blur => &self.blur_vao,
- VertexArrayKind::VectorStencil | VertexArrayKind::VectorCover => unreachable!(),
VertexArrayKind::Border => &self.border_vao,
VertexArrayKind::Scale => &self.scale_vao,
VertexArrayKind::LineDecoration => &self.line_vao,
@@ -1107,7 +555,6 @@ impl ops::Index<VertexArrayKind> for RendererVAOs {
VertexArrayKind::LinearGradient => &self.linear_gradient_vao,
VertexArrayKind::RadialGradient => &self.radial_gradient_vao,
VertexArrayKind::ConicGradient => &self.conic_gradient_vao,
- VertexArrayKind::Resolve => &self.resolve_vao,
VertexArrayKind::SvgFilterNode => &self.svg_filter_node_vao,
VertexArrayKind::Composite => &self.composite_vao,
VertexArrayKind::Clear => &self.clear_vao,