A constructor like `float2(one, two)` is not a compile-time constant, so
we miss optimization opportunities like folding. Constant variables
inside compound constructors are now replaced when optimization is on,
so this would optimize down to `float2(1.0, 2.0)` and be eligible for
folding.
Change-Id: I80dd421f61d4eed21278805e2dc26d198a678e52
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404657
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This handles the case where a filter effect input is StrokePaint or
FillPaint, but the referencing element has a 'none' paint specified
(explicitly or via parsing error, as in the original bug report).
Bug: skia:11213
Change-Id: Ie710a9fc5ccb3c24014735e01c70a0ba42c7a99d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404696
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Tyler Denniston <tdenniston@google.com>
This reverts commit a2335098a6.
Reason for revert: it was not breaking chrome roll
Original change's description:
> Revert "Do reordering & memory budgeting after onFlushCB"
>
> This reverts commit 566cf465fc.
>
> Reason for revert: I think this one is the cause
>
> Original change's description:
> > Do reordering & memory budgeting after onFlushCB
> >
> > This allows the CCPR atlas manager to setup its atlas before
> > we do any memory budgeting. That way the atlas size is known.
> >
> > Bug: skia:10877
> > Change-Id: I9d73df29d1e8412b714b00dbf2ebff47025d3e3e
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403857
> > Commit-Queue: Robert Phillips <robertphillips@google.com>
> > Auto-Submit: Adlai Holler <adlai@google.com>
> > Reviewed-by: Robert Phillips <robertphillips@google.com>
>
> TBR=robertphillips@google.com,adlai@google.com
>
> Change-Id: Iaf13f8abb060c52df4a6a10ba45896a0a26bc662
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:10877
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404476
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
# Not skipping CQ checks because this is a reland.
Bug: skia:10877
Change-Id: Iec2956bfcd828ad2e329f6d5c6a0732e55341919
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404777
Reviewed-by: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Adlai Holler <adlai@google.com>
The modifier pool is in the Context now and doesn't need to be passed
separately.
Change-Id: I92388ebfd4dfd69360455efa1b1e2558c512a950
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404341
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This reverts commit 048b5a2967.
Reason for revert: Okay feeling confident this guess is right about who is breaking chrome roll.
Original change's description:
> Transform verts using nonsquare matrices when available.
>
> We were previously doing a square-matrix multiply then discarding one
> third of the result; now, when available, we just get the result we need
> via a non-square multiply.
>
> Change-Id: Ie13ae6f2c7f23e3a4c1f2c4eeb6361a97cdccf67
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403079
> Auto-Submit: John Stiles <johnstiles@google.com>
> Commit-Queue: John Stiles <johnstiles@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
TBR=bsalomon@google.com,brianosman@google.com,johnstiles@google.com
Change-Id: I5e1026def7e7ade019c2543b6f30387bec1bc004
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404596
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
This reverts commit 566cf465fc.
Reason for revert: I think this one is the cause
Original change's description:
> Do reordering & memory budgeting after onFlushCB
>
> This allows the CCPR atlas manager to setup its atlas before
> we do any memory budgeting. That way the atlas size is known.
>
> Bug: skia:10877
> Change-Id: I9d73df29d1e8412b714b00dbf2ebff47025d3e3e
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403857
> Commit-Queue: Robert Phillips <robertphillips@google.com>
> Auto-Submit: Adlai Holler <adlai@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=robertphillips@google.com,adlai@google.com
Change-Id: Iaf13f8abb060c52df4a6a10ba45896a0a26bc662
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:10877
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404476
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
libjpeg-turbo recently released 2.1, and Chromium is now using that
version. Update tests to use the same to verify everything works as
expected.
Update BUILD.gn
Change-Id: I751fb376b4a532d740122f8a4acd0100c42f984e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/402276
Commit-Queue: Leon Scroggins <scroggo@google.com>
Auto-Submit: Leon Scroggins <scroggo@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
There's no benefit to isolating each module's modifier pool from each
other. It's simpler and more efficient to lump all the modules'
modifiers into one shared pool which (like the modules themselves)
exists as long as the Compiler does.
Change-Id: I8335a410e788d2c5142b820407beddf5c2663eef
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404336
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
The IRGenerator no longer owns the pool of modifiers; they are now
available to any function that has a Context.
Change-Id: I4f2f37ae5e06966bed00107b0483b42b07a454d8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404237
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
The Serialization_Typeface and FontMgr_AliasNames tests sometimes fail
on macOS 10.13 and 10.15.7 bots. This is likely fixed on macOS 11,
however in the interest of investigation there should be some attempt at
discovering if the retrieved fonts are actually different and which ones
were retrieved. Improve the reports with additional information about
the typefaces in question.
Change-Id: I0e4354eacf91be1ae98838569e4da9f964dc2ac8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404338
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This removes the templated versions of these operators. This should help
the case where clients would get compiler errors in their code with
errors claiming failed matches to these ganesh operators. The errors were
correct, but would be confusing for clients to see. Now with this change
the various operators are defined for specific types so a client shouldn't
get errors for their own enums anymore.
Bug: chromium:1204688
Change-Id: Ie3450834da7734a161af303ca6c8f458dd173513
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403596
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This is in preparation for reusing the image loading + aspect ratio
mapping for <feImage>.
Change-Id: I53dcf904476aae386f672488379201524855a703
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404217
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Tyler Denniston <tdenniston@google.com>
Somewhat subtle, but we were improperly handling the override of the
default subregion via the 'width' and 'height' <fe*> attributes.
Simple example: when specifying 'x' but not 'width', previously we
would use the overridden x (subregion.fLeft = boundaries.fLeft;), but
were not updating subregion.fRight based on the new fLeft value.
Bug: skia:10841
Change-Id: I309de4f0cf50a413ea6a0e7605926a3eb6cd94e2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404205
Commit-Queue: Tyler Denniston <tdenniston@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
This breaks up the giant IRGenerator::convertFunction method into more-
manageable chunks, moves the functionality into FunctionDeclaration,
and funnels the DSL through it so it receives the same error checking.
Change-Id: Icf2ac650ab3d5276d8c0134062a4e7e220f9bf32
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/402778
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
SkGpuDevice still needs to separately ref the context as
GrSurfaceContext has a bare GrRecordingContext pointer. However, it
doesn't need to be separately specified.
Also rm unused SkSpecialSurface_Gpu() width/height params.
Change-Id: Ia24bbce2a85e21277aff2c1c9e1fd37a29246a6e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404236
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This will be used by the upcoming DSLParser, which needs to be able to
put DSLExpression and DSLVar into containers such as std::vector and
std::optional.
Change-Id: I8d367cfd0b3a852a368c69a5b3be6c0eaa41d74a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404156
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
A followup CL also applies this to Pixel5.
Bug: skia:10877
Change-Id: I2344bb1be75c94ed6960f4b13206c8b517f98613
Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_API30,Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android,Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan,Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan,Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android,Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403636
Commit-Queue: Robert Phillips <robertphillips@google.com>
Auto-Submit: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
These types had no tests, have never been used, and GLSL doesn't support
byte types.
Change-Id: Id423e3e4790be7f443acc88bce5497470c7d3fd4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404219
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
CCPR atlasing now handles merged tasks correctly so they can work
together happily again.
Bug: skia:10877, skia:11731
Change-Id: Id15c8fc3ed0560150f5c373651f5c583239f3e09
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404136
Commit-Queue: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Adds aliasing barriers, a texture copy convenience routine, and
subresource support in texture resource state transitions. Also
some minor formatting cleanup.
Change-Id: Ic8ba504350a3f954a21d24a214d9cceb3f5fc44d
Bug: skia:10446
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403600
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This is a first step towards moving the ModifiersPool out of the
IRGenerator and into the Context.
Change-Id: I8000923f32a9e3cc1878a09464680884b950e513
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404216
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This allows the CCPR atlas manager to setup its atlas before
we do any memory budgeting. That way the atlas size is known.
Bug: skia:10877
Change-Id: I9d73df29d1e8412b714b00dbf2ebff47025d3e3e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403857
Commit-Queue: Robert Phillips <robertphillips@google.com>
Auto-Submit: Adlai Holler <adlai@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
If they are not maintained, then the merge leaves links to
deleted RenderTarget nodes. This creates confusion while
trying to debug.
Change-Id: I9d98a4ed2887573ddc5dfa2bae1bb22d30879c5a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/402641
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Adlai Holler <adlai@google.com>
We were previously doing a square-matrix multiply then discarding one
third of the result; now, when available, we just get the result we need
via a non-square multiply.
Change-Id: Ie13ae6f2c7f23e3a4c1f2c4eeb6361a97cdccf67
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403079
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
This simplifies our world a lot, especially when reordering/merging
ops tasks. As noted in the comments, this assumes a full flush every
time but the successor – which is coming soon – won't rely on that.
Bug: skia:10877, skia:11948
Change-Id: I1843e80dfee8d7a868c6db4bae94bcd2cbfb5b78
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403856
Commit-Queue: Adlai Holler <adlai@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Now that the fixed count stroke tessellator has landed, these should
hopefully not regress performance.
Bug: skia:11138
Bug: skia:11139
Change-Id: Ifdcd817705d394ea6d0f932711ed725a66a7fc91
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403956
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Bug: skia:11945
Change-Id: I1a8b167c320108392c2a168ad88a92c36b34459f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404118
Commit-Queue: Ravi Mistry <rmistry@google.com>
Reviewed-by: Eric Boren <borenet@google.com>
This reverts commit adadb95a9f.
Reason for revert: breaking android
Original change's description:
> Better first-class shader & color filter support in runtime effects
>
> This does a few things, because they're all intertwined:
>
> 1) SkRuntimeEffect's API now includes details about children (which Skia
> stage was declared, not just the name). The factories verify that the
> declared types in the SkSL match up with the C++ types being passed.
> Today, we still only support adding children of the same type, so the
> checks are simple. Once we allow mixing types, we'll be testing the
> declared type against the actual C++ type supplied for each slot.
> 2) Adds sample variants that supply the input color to the child. This
> is now the only way to invoke a colorFilter child. Internally, we
> support passing a color when invoking a child shader, but I'm not
> exposing that. It's not clearly part of the semantics of the Skia
> pipeline, and is almost never useful. It also exposes users to
> several inconsistencies (skbug.com/11942).
> 3) Because of #2, it's possible that we can't compute a reusable program
> to filter individual colors. In that case, we don't set the constant
> output for constant input optimization, and filterColor4f falls back
> to the slower base-class implementation.
>
> Bug: skia:11813 skia:11942
> Change-Id: I06c41e1b35056e486f3163a72acf6b9535d7fed4
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/401917
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Mike Klein <mtklein@google.com>
TBR=mtklein@google.com,bsalomon@google.com,brianosman@google.com
Change-Id: I94ba57e73305b2302f86fd0c1d76f667d4e45b92
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:11813 skia:11942
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404117
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Change-Id: I721825d1a38e9f6846b94f84d14cb8c85b7a7519
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403601
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Being able to Construct() arbitrary types is necessary for the upcoming
DSLParser.
Change-Id: I2d439b4a1db7a460043efa5f0e9207b6073e9f1f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403696
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Galaxy S20 is dropping draws that involve stencil. This hopefully
won't affect performance since these GPUs have fast framebuffer fetch
support.
Bug: skia:11906
Change-Id: I5d81e689e161bdf5cdc767439561172bb6a4d311
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/401042
Auto-Submit: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
4ab224f7b0..c6fb0e5afb
2021-05-03 angle-autoroll@skia-public.iam.gserviceaccount.com Roll Chromium from ae499a6ea7cf to 34166dd37ed5 (607 revisions)
2021-05-03 jmadill@chromium.org infra: Add trybot_analyze_config.
2021-05-03 tandrii@google.com [infra][realms] bump usage to 25% of all builds.
2021-05-03 timvp@google.com Fix Rolling ANGLE into AOSP
2021-05-03 jplate@google.com Add support for OpenCL ICD Loader
2021-05-03 angle-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from c5559fe406e3 to 4676514cf188 (3 revisions)
2021-05-03 tandrii@google.com [infra] use realms on 5% of Angle builds.
2021-05-03 tandrii@google.com infra: init LUCI Realms config for Angle.
2021-05-03 tandrii@google.com infra: validate configs using lucicfg tool in PRESUBMIT.py
2021-05-03 tandrii@google.com infra: remove redundant ACL.
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-skia-autoroll
Please CC egdaniel@google.com on the revert to ensure that a human
is aware of the problem.
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md
Cq-Include-Trybots: skia/skia.primary:Build-Debian10-Clang-x86_64-Release-ANGLE;skia/skia.primary:Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE;skia/skia.primary:Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE
Tbr: egdaniel@google.com
Change-Id: I3b147e5cd58eb7af996e121e24badb964194be4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404038
Reviewed-by: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: skia-autoroll <skia-autoroll@skia-public.iam.gserviceaccount.com>
This does a few things, because they're all intertwined:
1) SkRuntimeEffect's API now includes details about children (which Skia
stage was declared, not just the name). The factories verify that the
declared types in the SkSL match up with the C++ types being passed.
Today, we still only support adding children of the same type, so the
checks are simple. Once we allow mixing types, we'll be testing the
declared type against the actual C++ type supplied for each slot.
2) Adds sample variants that supply the input color to the child. This
is now the only way to invoke a colorFilter child. Internally, we
support passing a color when invoking a child shader, but I'm not
exposing that. It's not clearly part of the semantics of the Skia
pipeline, and is almost never useful. It also exposes users to
several inconsistencies (skbug.com/11942).
3) Because of #2, it's possible that we can't compute a reusable program
to filter individual colors. In that case, we don't set the constant
output for constant input optimization, and filterColor4f falls back
to the slower base-class implementation.
Bug: skia:11813 skia:11942
Change-Id: I06c41e1b35056e486f3163a72acf6b9535d7fed4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/401917
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
We can't attach stencil to a wrapped render target. If we find
ourselves rendering to one that doesn't have stencil already, don't
issue any ops that use stencil.
Bug: chromium:1196353
Bug: skia:11943
Change-Id: I9db93f31a4f8556103be72eb708755e4eaf78136
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/399839
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
This string had several characters which resulted in zero
glyphs. Having zero glyphs bypassed the buffer sizing code,
and continued to process the glyph run list assuming it had
7 runs because the buffer sizing code also clears the run list.
This caused the code to process runs from a previous SkTextBlob,
which was already deleted.
If the there are no glyphs, call the buffer sizing code to
set up all the invariants. Exit if there are no runs produced.
Bug: oss-fuzz:33915
Change-Id: I9f3f38a58112c44ddd65265c68d982b3b0dcd79c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403439
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
The full 'display' presentation attribute [1] has a number of settings
that we likely don't want to support. However, 'display:none' has some
practical uses and is easy enough to support. This progresses some
local tests as well as a few W3C tests.
[1] https://www.w3.org/TR/SVG11/painting.html#DisplayProperty
Bug: skia:10842
Change-Id: I60fef959fb45c3cfb229b85b720dfa69fc458bc3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/403438
Commit-Queue: Tyler Denniston <tdenniston@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>