Use tuples for the fixed data. The numbering of rows in the data
tables isn't part of any public API, so we can change it freely; it is
thus unnecessary, as we can just enumerate a tuple of the data values
to generate sequential indices on the fly. (Updates to the data shall
no longer need to renumber in order to insert entries.)
Restore ordering of the data tables, and remove wanton spacing from
inside parens, in the process.
Change-Id: I59956cfb6191fe729300b57070671b7e66bd0379
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Casting an object to a subclass that is not the dynamic type of the
object constitutes undefined behavior.
Fix by befriending QObject.
Change-Id: Ib70dbef9095df31a6d89449d82a02cef9fccd348
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Since commit 20e9422e we don't ignore exit codes when installing files
anymore. This patch does the same for meta file installation. We
really should be notified properly if something goes wrong here.
Task-number: QTBUG-18870
Change-Id: Ib6a20293380f400379b10ec767bf38dc74d5beeb
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
With all of their special behavior deprecated, QCharRef and QByteRef
can simply be removed. Add a comment.
Change-Id: I8bad95424207ae281b5edf348b9ad81c6807dc12
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
The resetShaderResources() done when starting a render or compute pass
purges all vertex, index, SRV, and UAV bindings. This will be optimized
at a later point, but until then the command buffer's state should be
updated accordingly, otherwise certain use cases end up with incorrect
rendering results due to not binding vertex/index/shader resources
as appropriate.
This fixes the shadowmap example on d3d.
Change-Id: I4d07929b8664b64bc608c6c8df474b0ee7c2ddbb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Have feature flags as appropriate. OpenGL is causing a mess here
but let's support what we can since some of this will become relevant
in more sophisticated mesh drawing cases with 3D in particular.
Change-Id: Idfa7b4642ec87147978e03d78d6233efbd151491
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Draws 1024 cubes at random x,y positions with varying color with
a single instanced draw call.
Change-Id: I8737503acf23866ad4734b1d88753415a3b93445
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Enforce the maximum texture size limit both for textures and renderbuffers,
showing warnings and adjusting the size automatically.
On the low end ES 2.0 devices we can easily hit a maximum size of 2048x2048.
For example a Raspberry Pi running in full HD with the Controls 2 Material
style breaks right away as it tries to create slightly wider than 2048 texture
for its ShaderEffect.
Instead of breaking with an obscure framebuffer incomplete warning at best,
show something more informative and adjust the sizes so that something shows
up on the screen still.
(naturally applications not taking the maximum sizes returned from QRhi
into account are technically incorrect and may well end up with incorrect
rendering, but we should still try handling this as gracefully as possible)
Change-Id: Ib75eb893ab4774e1a3c49ed2d14c6bf9be8c807a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
So that we can now operate on plain ES 2.0 implementations like the
Broadcom stack on the Raspberry Pi (which does not even have packed
depth stencil).
Also add the WebGL-specific combined attach logic to enable WebAssembly.
This has not been tested in practice.
Change-Id: I21219319062f295c1e88e3057c0c2ede724ac664
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
...but this will vary between backends, or in some cases
even between implementations of the same API.
Point size is settable only via the vertex shader (gl_PointSize).
It is silently ignored with D3D and HLSL.
Line widths other than 1 are supported only on OpenGL and Vulkan.
(but this is in fact deprecated with GL and optional with Vulkan)
Add QRhi::Feature values for both.
The line width is now settable on QRhiGraphicsPipeline. It is not a
dynamic state since the static, per-pipeline width is good enough for
most cases. (and the feature is not supported on half of the backends
anyways so it will get limited use in practice).
Change-Id: I6d3a32269527c452b794b2cb8b0f03101eab40b2
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
By default RTEMS does not support linux extensions for errno.
Enable it for build.
Change-Id: I43b346794b99ac0ed339bfbe6e39684071615503
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Ryan Chu <ryan.chu@qt.io>
The default stack size is too small on RTEMS.
Qt uses threads internally and there is no way to change their stack
size.
Change-Id: I94a42c7a70c745f0b50d7051d9320edfabd1e09e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
[ChangeLog][QtCore][QStringList] Added QStringView overloads of join(),
filter(), and replaceInStrings().
Change-Id: I9636e21e2e43ed46cce0aa7fa23ab0710aa641ba
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This change is used to generalize a template docker-compose file for all
modules. Ideally, the leaf module only need to keep a docker compose
file for all platforms (docker-compose.yml).
NOTE:
The version of docker-compose file downgrades from 3.4 to 2.1 because
the 'extends' keyword is not supported in Compose version 3.x.
Change-Id: I2e36fd9236eda86cb5fcf940d787ccefe9200696
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
RTEMS does not have "timezone" global variable.
Change-Id: Ifa4c6f8939270a83fb7b5ba623daafa1e9f81003
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Apply Fixits by Qt Creator with some amendments.
Task-number: QTBUG-69413
Change-Id: I366cca6e5755719e8241e76774af6be2b5312627
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Because it is.
Change-Id: I8d5204c30884b2c8656615a7d82428c539672d28
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
The array of QAtomicPointer<QMutex> can be initialized using relaxed
stores of nullptr, since nullptr is the whole data. But once we store
an actual QMutex pointer in the array, we need to publish the indirect
data thus created. We did this, with testAndSetRelease(); what was
missing was a corresponding acquire fence on load, without which there
is no happens-before relationship between the writes performed by the
QMutex ctor and the reads performed by a subsequent mutex.lock(), say,
on the same data.
Fix by adding acquire fences to all loads. That includes the dtor,
since mutexes may have been created in different threads, and never
been imported into this_thread before the dtor is running.
As a drive-by, return a new'ed QMutex that was successfully installed
directly to the caller, without again going through a load-acquire.
Change-Id: Ia25d205b1127c8c4de0979cef997d1a88123c5c3
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... and schedule it for removal in Qt 6.
This appears to have come to some fame on the internet, so better add
a deprecation warning before we remove it in Qt 6.
Change-Id: I42d91d933f47dfd2d8d54c92358e9e46ced6bf21
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This appears to have come to some fame on the internet, so better fix
the implementation before we remove it in Qt 6.
Change-Id: Ia37ca89105b13bea1ffcdce8b2e8cd957b7bd108
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The old code used the implicit conversions from QAtomicPointer<T> to T*
and vice versa. The semantics of these differ from the ones std::atomic
uses, so we're going to deprecate these, like we did for load() and
store(), too.
This patch fixex some users of these APIs before we deprecate them.
Change-Id: I0a88bb1c359392538bb64b511bfc62381a56a468
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This helps to fix build without feature.properties
Change-Id: Ia1fd2a1ca88105048e75694874058bb1292899a0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
The -d option makes rcc output a dependency file with the specified
file name.
The resulting dependency file is useful for make or ninja based build
systems.
[ChangeLog][Tools][rcc] Added -d option to generate a dependency file.
Fixes: QTBUG-45460
Change-Id: I495ade50f8d9865d4c00dce9373b2b6d1a6c8f2f
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
Since it was added in Qt 4.2, addAppFont() has been written
to first register the font, then immediately invalidate the
font database and later reload the font again the next time
the db is used. This caused all application fonts to be
reloaded *at least* once, an operation which can be quite heavy
for large fonts, such as CJK fonts. If an application loaded
multiple fonts at different stages of execution, you could
end up loading the same fonts a large number of times, since
all application fonts would be reregistered every time a new
one was added.
When calling removeApplicationFont(), this is okay-ish, since
we need to remove all traces of the font from the platform
database and clearing the whole thing is a convenient way
of making sure there is nothing left. There might be more
efficient ways of doing this, but unloading fonts is not
a common operation, so it is fine to keep this behavior there.
This change removes the invalidation of the font database from
addAppFont(), since this should not be necessary as long as we
are adding fonts. It also removes the reregisterAppFonts flag,
which was a bit of a convoluted way of saying that the database
had been invalidated and needed repopulating. Instead, we use the
same mechanism as for repopulating the system database: We just
check if it is currently empty, which means it has been
invalidated and the application fonts have to be reregistered.
It does not touch the logic in qt_cleanupFontDatabase(), which
is kind of broken (it will leave application fonts in memory
and reregister them if the application continues to run). But
this is only actually called during shutdown (from application
destructor).
[ChangeLog][QtGui][Text] Fixed an issue where application fonts
would be parsed multiple times, causing some unnecessary overhead
when during application startup.
Task-number: QTBUG-76239
Change-Id: Idfb62f73133b55e0909bb398631c8e762442e95b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
A recurring problem with the Q_NAMESPACE macro is that it declares
an object (staticMetaObject) in the surrounding namespace. That
object lacks any export/import qualification to make it usable
with shared libraries.
Introduce therefore another macro to work around this issue, allowing
the user to prefix the object with an exporting macro, f.i. like this:
Q_NAMESPACE_EXPORT(Q_CORE_EXPORT)
The old macro can simply then be rewritten in terms of this new one,
supplying an empty export macro.
Note that NOT passing an argument to a macro expecting one is well
defined behavior in C99 -- the macro will expand an empty token.
Of course, MSVC doesn't like this and emits warnings. As a
workaround, use a variadic macro.
[ChangeLog][QtCore] Added the new Q_NAMESPACE_EXPORT macro. It
can be used just like Q_NAMESPACE to add meta-object information
to a namespace; however it also supports exporting of such
information from shared libraries.
[ChangeLog][Potentially Source-Incompatible Changes] Prefixing
Q_NAMESPACE with an export macro may no longer work. Use the new
Q_NAMESPACE_EXPORT macro for that use case.
Fixes: QTBUG-68014
Change-Id: Ib044a555ace1f77ae8e0244d824ec473550f3d8e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Fix warnings:
Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
introduced by qtbase/c2d2757bccc68e1b981df059786c2e76f2969530 (5.14).
Change-Id: Ie6f0e2e3bb198a95dd40e7416adc8ffb29f3b2ba
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Fix remaining nullptr and member initialization issues which
Qt Creator did not catch.
Change-Id: If5492259aea9849c790f00809a27f4c78b446b9b
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
The code was actually there, but not connected to the command line
parser.
Task-number: QTBUG-76375
Change-Id: I801cf2bbd2f207a6ce1dabd1ee1dfbd892089bbc
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Fix warnings:
QWWARN : tst_QImageReader::readFromFileAfterJunk(xpm) Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
QWARN : tst_QImageReader::readFromFileAfterJunk(xpm) Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
QWARN : tst_QImageReader::readFromFileAfterJunk(xpm) Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
introduced by qtbase/c2d2757bccc68e1b981df059786c2e76f2969530 (5.14).
Refactor write_xpm_image() to use a QByteArray and append().
Change-Id: I25e6270e2e5fcb868d4ee38e3b294afc7ee27dcc
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Fix warnings showing in network tests:
tst_QNetworkReply::headFromHttp(rfc+socks):
Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
introduced by qtbase/c2d2757bccc68e1b981df059786c2e76f2969530 (5.14).
Replace index access by QByteArray::append().
Change-Id: I0b4aed563d076237d5f9cc6aa438c7502eb3568c
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
- Fix some spelling
- Use QT_CONFIG for shortcuts
- Quick C++ brush up, use member initialization
Preemptively fix sanity bot warnings about missing space after flow
control keyword, introducing range-based for on this occasion
- Remove unused member variable
Task-number: QTBUG-69478
Change-Id: I6af21886d5a0b48f4b2d11082991a877bd8d817d
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Apply fixits by Creator and results of manual search focusing on
QCore/Gui/Applicaton(Private) methods and variables to prepare for
splitting out some classes.
Task-number: QTBUG-69478
Task-number: QTBUG-76497
Task-number: QTBUG-76493
Change-Id: Iaf468166793e0cabb514b51c827b30317bf45a2d
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Make aligned a template, fixing:
rhi\qrhid3d11.cpp: In member function 'void QRhiD3D11::updateShaderResourceBindings(QD3D11ShaderResourceBindings*)':
rhi\qrhid3d11.cpp:1627:53: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
Q_ASSERT(aligned(b->u.ubuf.offset, 256) == b->u.ubuf.offset);
Change-Id: I6b747ebaf78e5accb9b7ed145df71a80d0a15762
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
The old code used the implicit conversions from QAtomicInteger<T> to T
and vice versa. The semantics of these differ from the ones std::atomic
uses, so we're going to deprecate these, like we did for load() and
store(), too.
This patch fixex some users of these APIs before we deprecate them.
Change-Id: I4877276581757cd57e042efea8296fe535a493d1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The loop iterates over a collection of QExplicitSharedDataPointer, which
traditionally doesn't propagate const. In Qt 6, it will, so prepare the
code for this change, by taking the loop variable by non-const reference.
Since the loop is followed by container.clear(), make it a consume-loop
by looping over qExchange(container, {}).
Change-Id: If12ab005544183598fd76a0c486b2df1582710d5
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Define the static QAtomic at file scope to avoid GCC's pessimisation with
function-static QAtomic (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79561),
and make sure the initial value is 0, so it ends up in BSS, not TEXT.
In QRhi..., don't create a static instance of the wrapper class, use a file-
static atomic, too. This turns the class into a glorified namespace.
Change-Id: I707f628e2b434330028077223071716d5704ba32
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Blocks are likely to have been created in a differnt thread from the one
performing their deletion, so we need an acquire fence.
The rest of the atomics use in the class looks ok, but nevertheless warrants
a deeper analysis.
Change-Id: I1571ded3a06695b0d58b5bf1d80d6283ac21f959
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>