| cs_mipmap_3d_p.h |
|
8237 |
- |
| cs_mipmap_p.h |
|
33041 |
- |
| LICENSE.MiniEngine.txt |
|
1077 |
- |
| mipmap.hlsl |
|
3805 |
- |
| mipmap_3d.hlsl |
|
604 |
- |
| qdxgihdrinfo.cpp |
|
7911 |
- |
| qdxgihdrinfo_p.h |
|
2309 |
- |
| qdxgivsyncservice.cpp |
|
15951 |
- |
| qdxgivsyncservice_p.h |
|
3652 |
- |
| qrhi.cpp |
|
548895 |
- |
| qrhi.h |
|
71976 |
- |
| qrhi_p.h |
|
41194 |
- |
| qrhi_platform.h |
|
4922 |
- |
| qrhid3d11.cpp |
Direct3D 11 backend. Provides a double-buffered flip model swapchain.
Textures and "static" buffers are USAGE_DEFAULT, leaving it to
UpdateSubResource to upload the data in any way it sees fit. "Dynamic"
buffers are USAGE_DYNAMIC and updating is done by mapping with WRITE_DISCARD.
(so here QRhiBuffer keeps a copy of the buffer contents and all of it is
memcpy'd every time, leaving the rest (juggling with the memory area Map
returns) to the driver).
|
250012 |
- |
| qrhid3d11_p.h |
|
38679 |
- |
| qrhid3d12.cpp |
Direct 3D 12 backend.
|
347720 |
- |
| qrhid3d12_p.h |
|
56312 |
- |
| qrhid3dhelpers.cpp |
|
3438 |
- |
| qrhid3dhelpers_p.h |
|
1073 |
- |
| qrhigles2.cpp |
OpenGL backend. Binding vertex attribute locations and decomposing uniform
buffers into uniforms are handled transparently to the application via the
reflection data (QShaderDescription). Real uniform buffers are never used,
regardless of the GLSL version. Textures and buffers feature no special
logic, it's all just glTexSubImage2D and glBufferSubData (with "dynamic"
buffers set to GL_DYNAMIC_DRAW). The swapchain and the associated
renderbuffer for depth-stencil will be dummies since we have no control over
the underlying buffers here. While the baseline here is plain GLES 2.0, some
modern GL(ES) features like multisample renderbuffers, blits, and compute are
used when available. Also functional with core profile contexts.
|
352620 |
- |
| qrhigles2_p.h |
|
50398 |
- |
| qrhimetal.mm |
Metal backend. Double buffers and throttles to vsync. "Dynamic" buffers are
Shared (host visible) and duplicated (to help having 2 frames in flight),
"static" and "immutable" are Managed on macOS and Shared on iOS/tvOS.
Textures are Private (device local) and a host visible staging buffer is
used to upload data to them. Does not rely on strong objects refs from
command buffers but does rely on the automatic resource tracking of the
command encoders. Assumes that an autorelease pool (ideally per frame) is
available on the thread on which QRhi is used.
|
357609 |
- |
| qrhimetal_icb_p.h |
|
5182 |
- |
| qrhimetal_p.h |
|
24109 |
- |
| qrhinull.cpp |
!
\class QRhiNullInitParams
\inmodule QtGuiPrivate
\inheaderfile rhi/qrhi.h
\since 6.6
\brief Null backend specific initialization parameters.
\note This is a RHI API with limited compatibility guarantees, see \l QRhi
for details.
A Null QRhi needs no special parameters for initialization.
\badcode
QRhiNullInitParams params;
rhi = QRhi::create(QRhi::Null, ¶ms);
\endcode
The Null backend does not issue any graphics calls and creates no
resources. All QRhi operations will succeed as normal so applications can
still be run, albeit potentially at an unthrottled speed, depending on
their frame rendering strategy.
|
32193 |
- |
| qrhinull_p.h |
|
12867 |
- |
| qrhivulkan.cpp |
Vulkan 1.0 backend. Provides a double-buffered swapchain that throttles the
rendering thread to vsync. Textures and "static" buffers are device local,
and a separate, host visible staging buffer is used to upload data to them.
"Dynamic" buffers are in host visible memory and are duplicated (since there
can be 2 frames in flight). This is handled transparently to the application.
Barriers are generated automatically for each render or compute pass, based
on the resources that are used in that pass (in QRhiShaderResourceBindings,
vertex inputs, etc.). This implies deferring the recording of the command
buffer since the barriers have to be placed at the right place (before the
pass), and that can only be done once we know all the things the pass does.
This in turn has implications for integrating external commands
(beginExternal() - direct Vulkan calls - endExternal()) because that is
incompatible with this approach by nature. Therefore we support another mode
of operation, where each render or compute pass uses one or more secondary
command buffers (recorded right away), with each beginExternal() leading to
closing the current secondary cb, creating a new secondary cb for the
external content, and then starting yet another one in endExternal() for
whatever comes afterwards in the pass. This way the primary command buffer
only has vkCmdExecuteCommand(s) within a renderpass instance
(Begin-EndRenderPass). (i.e. our only subpass is then
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS instead of
VK_SUBPASS_CONTENTS_INLINE)
The command buffer management mode is decided on a per frame basis,
controlled by the ExternalContentsInPass flag of beginFrame().
|
429837 |
- |
| qrhivulkan_p.h |
|
46855 |
- |
| qshader.cpp |
!
\class QShader
\ingroup painting-3D
\ingroup shared
\inmodule QtGui
\since 6.6
\brief Contains multiple versions of a shader translated to multiple shading languages,
together with reflection metadata.
QShader is the entry point to shader code in the graphics API agnostic
Qt world. Instead of using GLSL shader sources, as was the custom with Qt
5.x, new graphics systems with backends for multiple graphics APIs, such
as, Vulkan, Metal, Direct3D, and OpenGL, take QShader as their input
whenever a shader needs to be specified.
\warning The QRhi family of classes in the Qt Gui module, including QShader
and QShaderDescription, offer limited compatibility guarantees. There are
no source or binary compatibility guarantees for these classes, meaning the
API is only guaranteed to work with the Qt version the application was
developed against. Source incompatible changes are however aimed to be kept
at a minimum and will only be made in minor releases (6.7, 6.8, and so on).
To use these classes in an application, link to
\c{Qt::GuiPrivate} (if using CMake), and include the headers with the \c
rhi prefix, for example \c{#include <rhi/qshader.h>}.
A QShader instance is empty and thus invalid by default. To get a useful
instance, the two typical methods are:
\list
\li Generate the contents offline, during build time or earlier, using the
\c qsb command line tool. The result is a binary file that is shipped with
the application, read via QIODevice::readAll(), and then deserialized via
fromSerialized(). For more information, see QShaderBaker.
\li Generate at run time via QShaderBaker. This is an expensive operation,
but allows applications to use user-provided or dynamically generated
shader source strings.
\endlist
When used together with the Qt Rendering Hardware Interface and its
classes, like QRhiGraphicsPipeline, no further action is needed from the
application's side as these classes are prepared to consume a QShader
whenever a shader needs to be specified for a given stage of the graphics
pipeline.
Alternatively, applications can access
\list
\li the source or byte code for any of the shading language versions that
are included in the QShader,
\li the name of the entry point for the shader,
\li the reflection metadata containing a description of the shader's
inputs, outputs and resources like uniform blocks. This is essential when
an application or framework needs to discover the inputs of a shader at
runtime due to not having advance knowledge of the vertex attributes or the
layout of the uniform buffers used by the shader.
\endlist
QShader makes no assumption about the shading language that was used
as the source for generating the various versions and variants that are
included in it.
QShader uses implicit sharing similarly to many core Qt types, and so
can be returned or passed by value. Detach happens implicitly when calling
a setter.
For reference, a typical, portable QRhi expects that a QShader suitable for
all its backends contains at least the following. (this excludes support
for core profile OpenGL contexts, add GLSL 150 or newer for that)
\list
\li SPIR-V 1.0 bytecode suitable for Vulkan 1.0 or newer
\li GLSL/ES 100 source code suitable for OpenGL ES 2.0 or newer
\li GLSL 120 source code suitable for OpenGL 2.1 or newer
\li HLSL Shader Model 5.0 source code or the corresponding DXBC bytecode suitable for Direct3D 11/12
\li Metal Shading Language 1.2 source code or the corresponding bytecode suitable for Metal 1.2 or newer
\endlist
\sa QShaderBaker
|
39439 |
- |
| qshader.h |
|
7690 |
- |
| qshader_p.h |
|
3324 |
- |
| qshaderdescription.cpp |
|
69452 |
- |
| qshaderdescription.h |
|
11212 |
- |
| qshaderdescription_p.h |
|
3017 |
- |
| qt_attribution.json |
|
782 |
- |
| REUSE.toml |
|
180 |
- |
| test.hlsl |
|
385 |
- |
| vs_test_p.h |
|
7338 |
- |