diff options
author | Ben Fletcher <ben.fletcher@me.com> | 2022-01-27 12:27:27 -0800 |
---|---|---|
committer | Ben Fletcher <ben.fletcher@me.com> | 2022-01-31 08:53:37 -0800 |
commit | 9ef702a37bab1916b0aa3bf1403fc27e14113ded (patch) | |
tree | 4ca6b85882ec389051e1df16ce4a96800b7c0d75 /src/gui/rhi/qrhi.cpp | |
parent | 1c3ae79ad36f77a044adb6264396e46575ee8757 (diff) |
rhi: Add the basic infrastructure for geometry shader support
.. but this will only be supported on Vulkan, OpenGL 3.2+, and Open GL
ES 3.2+ for the time being.
The situation is:
- Vulkan is working. qsb accepts .geom files already, and QShader has
existing geometry shader support.
- OpenGL 3.2 and OpenGL ES 3.2 are working.
- D3D11 is not working. D3D11 supports geometry shaders, but SPIRV-
Cross does not support translating geometry shaders to HLSL.
- Metal is not working. Metal does not directly support geometry
shaders.
Change-Id: Ieb7c44c58b8be5f2e2197bf5133cf6847e6c132d
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/gui/rhi/qrhi.cpp')
-rw-r--r-- | src/gui/rhi/qrhi.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp index d5a9ef6515..571c5e95b4 100644 --- a/src/gui/rhi/qrhi.cpp +++ b/src/gui/rhi/qrhi.cpp @@ -711,6 +711,15 @@ Q_LOGGING_CATEGORY(QRHI_LOG_INFO, "qt.rhi.general") the way hull shaders are structured, whereas Metal uses a somewhat different tessellation pipeline than others), and therefore no guarantees can be given for a universal solution for now. + + \value GeometryShader Indicates that the geometry shader stage is + supported. When supported, a geometry shader can be specified in the + QRhiShaderStage list. \b{Geometry Shaders are considered an experimental + feature in QRhi and can only be expected to be supported with Vulkan, + OpenGL (3.2+) and OpenGL ES (3.2+) for the time being}, assuming the + implementation reports it as supported at run time. Geometry shaders have + portability issues between APIs, and therefore no guarantees can be given + for a universal solution for now. */ /*! @@ -1470,6 +1479,9 @@ QDebug operator<<(QDebug dbg, const QRhiVertexInputLayout &v) \value Compute Compute stage. Must be used only when the QRhi::Compute feature is supported. + + \value Geometry Geometry stage. Must be used only when the + QRhi::GeometryShader feature is supported. */ /*! @@ -3269,6 +3281,7 @@ void QRhiImplementation::updateLayoutDesc(QRhiShaderResourceBindings *srb) \value TessellationEvaluationStage Tessellation evaluation (domain shader) stage \value FragmentStage Fragment (pixel shader) stage \value ComputeStage Compute stage + \value GeometryStage Geometry stage */ /*! @@ -7454,6 +7467,8 @@ QRhiPassResourceTracker::BufferStage QRhiPassResourceTracker::toPassTrackerBuffe return QRhiPassResourceTracker::BufFragmentStage; if (stages.testFlag(QRhiShaderResourceBinding::ComputeStage)) return QRhiPassResourceTracker::BufComputeStage; + if (stages.testFlag(QRhiShaderResourceBinding::GeometryStage)) + return QRhiPassResourceTracker::BufGeometryStage; Q_UNREACHABLE(); return QRhiPassResourceTracker::BufVertexStage; @@ -7472,6 +7487,8 @@ QRhiPassResourceTracker::TextureStage QRhiPassResourceTracker::toPassTrackerText return QRhiPassResourceTracker::TexFragmentStage; if (stages.testFlag(QRhiShaderResourceBinding::ComputeStage)) return QRhiPassResourceTracker::TexComputeStage; + if (stages.testFlag(QRhiShaderResourceBinding::GeometryStage)) + return QRhiPassResourceTracker::TexGeometryStage; Q_UNREACHABLE(); return QRhiPassResourceTracker::TexVertexStage; |