docs: use ext-role for GL / VK extensions

This makes sure that we generate proper links to all of these
extensions.

Reviewed-by: Eric Engestrom <eric@igalia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19594>
This commit is contained in:
Erik Faye-Lund
2022-11-08 12:05:36 +01:00
committed by Marge Bot
parent f69560bdcb
commit ba78af66c6
20 changed files with 171 additions and 187 deletions

View File

@@ -14,7 +14,7 @@ specific to ANV:
:envvar:`ANV_DISABLE_SECONDARY_CMD_BUFFER_CALLS` :envvar:`ANV_DISABLE_SECONDARY_CMD_BUFFER_CALLS`
If defined to ``1`` or ``true``, this will prevent usage of self If defined to ``1`` or ``true``, this will prevent usage of self
modifying command buffers to implement ``vkCmdExecuteCommands``. As modifying command buffers to implement ``vkCmdExecuteCommands``. As
a result of this, it will also disable ``VK_KHR_performance_query``. a result of this, it will also disable :ext:`VK_KHR_performance_query`.
:envvar:`ANV_ALWAYS_BINDLESS` :envvar:`ANV_ALWAYS_BINDLESS`
If defined to ``1`` or ``true``, this forces all descriptor sets to If defined to ``1`` or ``true``, this forces all descriptor sets to
use the internal `Bindless model`_. use the internal `Bindless model`_.
@@ -28,7 +28,7 @@ specific to ANV:
Haswell, Cherryview). Haswell, Cherryview).
:envvar:`ANV_PRIMITIVE_REPLICATION_MAX_VIEWS` :envvar:`ANV_PRIMITIVE_REPLICATION_MAX_VIEWS`
Specifies up to how many view shaders can be lowered to handle Specifies up to how many view shaders can be lowered to handle
VK_KHR_multiview. Beyond this number, multiview is implemented :ext:`VK_KHR_multiview`. Beyond this number, multiview is implemented
using instanced rendering. If unspecified, the value default to using instanced rendering. If unspecified, the value default to
``2``. ``2``.
@@ -38,7 +38,7 @@ Experimental features
:envvar:`ANV_EXPERIMENTAL_NV_MESH_SHADER` :envvar:`ANV_EXPERIMENTAL_NV_MESH_SHADER`
If defined to ``1`` or ``true``, this advertise support for If defined to ``1`` or ``true``, this advertise support for
VK_NV_mesh_shader extension for platforms that have hardware :ext:`VK_NV_mesh_shader` extension for platforms that have hardware
support for it. support for it.

View File

@@ -131,9 +131,9 @@ Here are some known caveats in OpenGL support:
that may affect the quality of the texture lookup. that may affect the quality of the texture lookup.
- Lima supports FP16 textures in OpenGL ES (through - Lima supports FP16 textures in OpenGL ES (through
``GL_OES_texture_half_float``), but not in OpenGL. :ext:`GL_OES_texture_half_float<GL_OES_texture_float>`), but not in OpenGL.
This is because it would require ``ARB_texture_float`` which would also This is because it would require :ext:`GL_ARB_texture_float` which would
require 32-bit float textures, that the Mali-4xx does not support. also require 32-bit float textures, that the Mali-4xx does not support.
- Rendering to FP16 is possible, but the result is clamped to the - Rendering to FP16 is possible, but the result is clamped to the
[0.0,1.0] range. [0.0,1.0] range.

View File

@@ -23,12 +23,12 @@ With the Fall 2018 Workstation 15 / Fusion 11 releases, additional
features are supported in the driver: features are supported in the driver:
- Multisample antialiasing (2x, 4x) - Multisample antialiasing (2x, 4x)
- GL_ARB/AMD_draw_buffers_blend - :ext:`GL_ARB_draw_buffers_blend` / :ext:`GL_AMD_draw_buffers_blend`
- GL_ARB_sample_shading - :ext:`GL_ARB_sample_shading`
- GL_ARB_texture_cube_map_array - :ext:`GL_ARB_texture_cube_map_array`
- GL_ARB_texture_gather - :ext:`GL_ARB_texture_gather`
- GL_ARB_texture_query_lod - :ext:`GL_ARB_texture_query_lod`
- GL_EXT/OES_draw_buffers_indexed - :ext:`GL_EXT_draw_buffers_indexed` / :ext:`GL_OES_draw_buffers_indexed`
This requires version 2.15.0 or later of the vmwgfx kernel module and This requires version 2.15.0 or later of the vmwgfx kernel module and
the VM must be configured for hardware version 16 or later. the VM must be configured for hardware version 16 or later.

View File

@@ -16,9 +16,9 @@ Requirements
The Venus renderer requires The Venus renderer requires
- Vulkan 1.1 - Vulkan 1.1
- ``VK_EXT_external_memory_dma_buf`` - :ext:`VK_EXT_external_memory_dma_buf`
- ``VK_EXT_image_drm_format_modifier`` - :ext:`VK_EXT_image_drm_format_modifier`
- ``VK_EXT_queue_family_foreign`` - :ext:`VK_EXT_queue_family_foreign`
from the host driver. However, it violates the spec in some places currently from the host driver. However, it violates the spec in some places currently
and also relies on implementation-defined behaviors in others. It is not and also relies on implementation-defined behaviors in others. It is not
@@ -161,8 +161,8 @@ driver supports the formats, especially multi-planar ones, and the DRM format
modifiers of the GBM BOs. modifiers of the GBM BOs.
In the future, if virglrenderer's ``virgl_renderer_export_fence`` is In the future, if virglrenderer's ``virgl_renderer_export_fence`` is
supported, the Venus renderer will require ``VK_KHR_external_fence_fd`` with supported, the Venus renderer will require :ext:`VK_KHR_external_fence_fd`
``VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT`` from the host driver. with ``VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT`` from the host driver.
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
----------------------------------- -----------------------------------

View File

@@ -44,13 +44,13 @@ Here's a list of those requirements:
* Device extensions: * Device extensions:
* `VK_KHR_maintenance1`_ * :ext:`VK_KHR_maintenance1`
* `VK_KHR_create_renderpass2`_ * :ext:`VK_KHR_create_renderpass2`
* `VK_KHR_imageless_framebuffer`_ * :ext:`VK_KHR_imageless_framebuffer`
* `VK_KHR_timeline_semaphore`_ * :ext:`VK_KHR_timeline_semaphore`
* `VK_EXT_custom_border_color`_ with ``customBorderColorWithoutFormat`` * :ext:`VK_EXT_custom_border_color` with ``customBorderColorWithoutFormat``
* `VK_EXT_provoking_vertex`_ * :ext:`VK_EXT_provoking_vertex`
* `VK_EXT_line_rasterization`_, with the following ``VkPhysicalDeviceLineRasterizationFeaturesEXT``: * :ext:`VK_EXT_line_rasterization`, with the following ``VkPhysicalDeviceLineRasterizationFeaturesEXT``:
* ``rectangularLines`` * ``rectangularLines``
* ``bresenhamLines`` * ``bresenhamLines``
@@ -59,14 +59,14 @@ Here's a list of those requirements:
* ``stippledBresenhamLines`` * ``stippledBresenhamLines``
* ``stippledSmoothLines`` * ``stippledSmoothLines``
* `VK_KHR_swapchain_mutable_format`_ * :ext:`VK_KHR_swapchain_mutable_format`
* `VK_EXT_border_color_swizzle`_ * :ext:`VK_EXT_border_color_swizzle`
* `VK_KHR_descriptor_update_template`_ * :ext:`VK_KHR_descriptor_update_template`
In addition to this, `VK_KHR_external_memory`_ is required to support the In addition to this, :ext:`VK_KHR_external_memory` is required to support the
DRI code-path. DRI code-path.
We also require either the `VK_EXT_scalar_block_layout`_ extension or We also require either the :ext:`VK_EXT_scalar_block_layout` extension or
Vulkan 1.2, with the ``scalarBlockLayout`` feature. Vulkan 1.2, with the ``scalarBlockLayout`` feature.
OpenGL 3.0 OpenGL 3.0
@@ -82,8 +82,8 @@ supported:
* Device extensions: * Device extensions:
* `VK_EXT_transform_feedback`_ * :ext:`VK_EXT_transform_feedback`
* `VK_EXT_conditional_rendering`_ * :ext:`VK_EXT_conditional_rendering`
OpenGL 3.1 OpenGL 3.1
^^^^^^^^^^ ^^^^^^^^^^
@@ -107,7 +107,7 @@ supported, although some of these might not actually get verified:
* Device extensions: * Device extensions:
* `VK_EXT_depth_clip_enable`_ * :ext:`VK_EXT_depth_clip_enable`
OpenGL 3.3 OpenGL 3.3
^^^^^^^^^^ ^^^^^^^^^^
@@ -121,7 +121,7 @@ supported, although some of these might not actually get verified:
* Device extensions: * Device extensions:
* `VK_EXT_vertex_attribute_divisor`_ * :ext:`VK_EXT_vertex_attribute_divisor`
OpenGL 4.0 OpenGL 4.0
^^^^^^^^^^ ^^^^^^^^^^
@@ -137,7 +137,7 @@ supported:
* Device extensions: * Device extensions:
* `VK_KHR_maintenance2`_ * :ext:`VK_KHR_maintenance2`
* Formats requiring ``VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT``: * Formats requiring ``VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT``:
@@ -167,7 +167,7 @@ For OpenGL 4.2 support, the following additional requirements must be
supported: supported:
* Device extensions: * Device extensions:
* `VK_EXT_image_2d_view_of_3d`_ * :ext:`VK_EXT_image_2d_view_of_3d`
* ``VkPhysicalDeviceLimits``: * ``VkPhysicalDeviceLimits``:
@@ -187,7 +187,7 @@ supported:
* Device extensions: * Device extensions:
* `VK_KHR_shader_draw_parameters`_ * :ext:`VK_KHR_shader_draw_parameters`
OpenGL 4.3 OpenGL 4.3
^^^^^^^^^^ ^^^^^^^^^^
@@ -221,7 +221,7 @@ supported:
* Device extensions: * Device extensions:
* `VK_KHR_sampler_mirror_clamp_to_edge`_ * :ext:`VK_KHR_sampler_mirror_clamp_to_edge`
OpenGL 4.5 OpenGL 4.5
^^^^^^^^^^ ^^^^^^^^^^
@@ -245,7 +245,7 @@ are required to be supported
* Device extensions: * Device extensions:
* `VK_KHR_draw_indirect_count`_ * :ext:`VK_KHR_draw_indirect_count`
Performance Performance
----------- -----------
@@ -308,24 +308,3 @@ questions, don't hesitate to visit `#zink on OFTC
.. _downloaded from GPUinfo.org: https://www.saschawillems.de/blog/2022/03/12/vulkan-profiles-support-for-the-vulkan-hardware-capability-viewer-and-database/> .. _downloaded from GPUinfo.org: https://www.saschawillems.de/blog/2022/03/12/vulkan-profiles-support-for-the-vulkan-hardware-capability-viewer-and-database/>
.. _VK_KHR_maintenance1: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_maintenance1.html
.. _VK_KHR_create_renderpass2: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_create_renderpass2.html
.. _VK_KHR_imageless_framebuffer: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_imageless_framebuffer.html
.. _VK_KHR_timeline_semaphore: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_timeline_semaphore.html
.. _VK_KHR_external_memory: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_external_memory.html
.. _VK_EXT_scalar_block_layout: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_scalar_block_layout.html
.. _VK_EXT_transform_feedback: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_transform_feedback.html
.. _VK_EXT_conditional_rendering: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_conditional_rendering.html
.. _VK_EXT_vertex_attribute_divisor: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_vertex_attribute_divisor.html
.. _VK_EXT_image_2d_view_of_3d: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_2d_view_of_3d.html
.. _VK_KHR_maintenance2: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_maintenance2.html
.. _VK_KHR_shader_draw_parameters: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_shader_draw_parameters.html
.. _VK_KHR_draw_indirect_count: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_draw_indirect_count.html
.. _VK_KHR_sampler_mirror_clamp_to_edge: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_sampler_mirror_clamp_to_edge.html
.. _VK_EXT_custom_border_color: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_custom_border_color.html
.. _VK_EXT_provoking_vertex: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_provoking_vertex.html
.. _VK_EXT_line_rasterization: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_line_rasterization.html
.. _VK_KHR_swapchain_mutable_format: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain_mutable_format.html
.. _VK_EXT_border_color_swizzle: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_border_color_swizzle.html
.. _VK_EXT_depth_clip_enable: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_depth_clip_enable.html
.. _VK_KHR_descriptor_update_template: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_descriptor_update_template.html

View File

@@ -40,8 +40,8 @@ Core Mesa environment variables
:envvar:`MESA_NO_SSE` :envvar:`MESA_NO_SSE`
if set, disables Intel SSE optimizations if set, disables Intel SSE optimizations
:envvar:`MESA_NO_ERROR` :envvar:`MESA_NO_ERROR`
if set to 1, error checking is disabled as per ``KHR_no_error``. This if set to 1, error checking is disabled as per :ext:`GL_KHR_no_error`.
will result in undefined behavior for invalid use of the API, but This will result in undefined behavior for invalid use of the API, but
can reduce CPU use for apps that are known to be error free. can reduce CPU use for apps that are known to be error free.
:envvar:`MESA_DEBUG` :envvar:`MESA_DEBUG`
if set, error messages are printed to stderr. For example, if the if set, error messages are printed to stderr. For example, if the
@@ -89,11 +89,11 @@ Core Mesa environment variables
- ``FC`` is an optional suffix that indicates a forward compatible - ``FC`` is an optional suffix that indicates a forward compatible
context. This is only valid for versions >= 3.0. context. This is only valid for versions >= 3.0.
- ``COMPAT`` is an optional suffix that indicates a compatibility - ``COMPAT`` is an optional suffix that indicates a compatibility
context or ``GL_ARB_compatibility`` support. This is only valid context or :ext:`GL_ARB_compatibility` support. This is only valid
for versions >= 3.1. for versions >= 3.1.
- GL versions <= 3.0 are set to a compatibility (non-Core) profile - GL versions <= 3.0 are set to a compatibility (non-Core) profile
- GL versions = 3.1, depending on the driver, it may or may not have - GL versions = 3.1, depending on the driver, it may or may not have
the ``ARB_compatibility`` extension enabled. the :ext:`GL_ARB_compatibility` extension enabled.
- GL versions >= 3.2 are set to a Core profile - GL versions >= 3.2 are set to a Core profile
- Examples: - Examples:
@@ -104,13 +104,13 @@ Core Mesa environment variables
``3.0FC`` ``3.0FC``
select a Core+Forward Compatible profile with GL version 3.0. select a Core+Forward Compatible profile with GL version 3.0.
``3.1`` ``3.1``
select GL version 3.1 with ``GL_ARB_compatibility`` enabled per select GL version 3.1 with :ext:`GL_ARB_compatibility` enabled
the driver default. per the driver default.
``3.1FC`` ``3.1FC``
select GL version 3.1 with forward compatibility and select GL version 3.1 with forward compatibility and
``GL_ARB_compatibility`` disabled. :ext:`GL_ARB_compatibility` disabled.
``3.1COMPAT`` ``3.1COMPAT``
select GL version 3.1 with ``GL_ARB_compatibility`` enabled. select GL version 3.1 with :ext:`GL_ARB_compatibility` enabled.
``X.Y`` ``X.Y``
override GL version to X.Y without changing the profile. override GL version to X.Y without changing the profile.
``X.YFC`` ``X.YFC``
@@ -332,7 +332,7 @@ Intel driver environment variables
``perf`` ``perf``
emit messages about performance issues emit messages about performance issues
``perfmon`` ``perfmon``
emit messages about ``AMD_performance_monitor`` emit messages about :ext:`GL_AMD_performance_monitor`
``reemit`` ``reemit``
mark all state dirty on each draw call mark all state dirty on each draw call
``rt`` ``rt``

View File

@@ -292,8 +292,8 @@ being said, many people have managed to figure out the process.
Joining the appropriate mailing lists and asking questions (and Joining the appropriate mailing lists and asking questions (and
searching the archives) is a good way to get information. searching the archives) is a good way to get information.
4.3 Why isn't ``GL_EXT_texture_compression_s3tc`` implemented in Mesa? 4.3 Why isn't :ext:`GL_EXT_texture_compression_s3tc` implemented in Mesa?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oh but it is! Prior to 2nd October 2017, the Mesa project did not Oh but it is! Prior to 2nd October 2017, the Mesa project did not
include S3TC support due to intellectual property (IP) and/or patent include S3TC support due to intellectual property (IP) and/or patent

View File

@@ -182,7 +182,7 @@ Euro Truck Simulator
893943 glDrawArrays(mode = GL_TRIANGLES, first = 0, count = 6) 893943 glDrawArrays(mode = GL_TRIANGLES, first = 0, count = 6)
At the start of this frame, buffer 14 and 15 haven't been used in the previous 2 At the start of this frame, buffer 14 and 15 haven't been used in the previous 2
frames, and the ``GL_ARB_sync`` fence has ensured that the GPU has at least started frames, and the :ext:`GL_ARB_sync` fence has ensured that the GPU has at least started
frame n-1 as the CPU starts the current frame. The first map is ``offset = 0, frame n-1 as the CPU starts the current frame. The first map is ``offset = 0,
INVALIDATE_BUFFER | UNSYNCHRONIZED``, which suggests that the driver should INVALIDATE_BUFFER | UNSYNCHRONIZED``, which suggests that the driver should
reallocate storage for the mapping even in the ``UNSYNCHRONIZED`` case, except reallocate storage for the mapping even in the ``UNSYNCHRONIZED`` case, except
@@ -237,7 +237,7 @@ Plague Inc
1640863 glDrawElementsBaseVertex(mode = GL_TRIANGLES, count = 6, type = GL_UNSIGNED_SHORT, indices = 0x58, basevertex = 4) 1640863 glDrawElementsBaseVertex(mode = GL_TRIANGLES, count = 6, type = GL_UNSIGNED_SHORT, indices = 0x58, basevertex = 4)
At the start of this frame, the VBOs haven't been used in about 6 frames, and At the start of this frame, the VBOs haven't been used in about 6 frames, and
the ``GL_ARB_sync`` fence has ensured that the GPU has started frame n-1. the :ext:`GL_ARB_sync` fence has ensured that the GPU has started frame n-1.
Note the use of ``glFlushMappedBufferRange()`` on a small fraction of the size Note the use of ``glFlushMappedBufferRange()`` on a small fraction of the size
of the VBO -- it is important that a blitting driver make use of the flush of the VBO -- it is important that a blitting driver make use of the flush
@@ -299,7 +299,7 @@ Tabletop Simulator
1289068 glDrawArrays(mode = GL_TRIANGLE_STRIP, first = 8, count = 4) 1289068 glDrawArrays(mode = GL_TRIANGLE_STRIP, first = 8, count = 4)
1289553 glXSwapBuffers(dpy = 0x3e10810, drawable = 23068692) 1289553 glXSwapBuffers(dpy = 0x3e10810, drawable = 23068692)
In this app, buffer 480 gets used like this every other frame. The ``GL_ARB_sync`` In this app, buffer 480 gets used like this every other frame. The :ext:`GL_ARB_sync`
fence ensures that frame n-1 has started on the GPU before CPU work starts on fence ensures that frame n-1 has started on the GPU before CPU work starts on
the current frame, so the unsynchronized access to the buffers is safe. the current frame, so the unsynchronized access to the buffers is safe.
@@ -337,7 +337,7 @@ Hollow Knight
1873097 glDrawElementsBaseVertex(mode = GL_TRIANGLES, count = 36, type = GL_UNSIGNED_SHORT, indices = 0x2d0, basevertex = 240) 1873097 glDrawElementsBaseVertex(mode = GL_TRIANGLES, count = 36, type = GL_UNSIGNED_SHORT, indices = 0x2d0, basevertex = 240)
In this app, buffer 29/30 get used like this starting from offset 0 every other In this app, buffer 29/30 get used like this starting from offset 0 every other
frame. The ``GL_ARB_sync`` fence is used to make sure that the GPU has reached the frame. The :ext:`GL_ARB_sync` fence is used to make sure that the GPU has reached the
start of the previous frame before we go unsynchronized writing over the n-2 start of the previous frame before we go unsynchronized writing over the n-2
frame's buffer. frame's buffer.
@@ -363,7 +363,7 @@ Borderlands 2
3563064 glBindBufferARB(target = GL_ELEMENT_ARRAY_BUFFER, buffer = 875) 3563064 glBindBufferARB(target = GL_ELEMENT_ARRAY_BUFFER, buffer = 875)
3563065 glDrawElementsInstancedARB(mode = GL_TRIANGLES, count = 72, type = GL_UNSIGNED_SHORT, indices = NULL, instancecount = 28) 3563065 glDrawElementsInstancedARB(mode = GL_TRIANGLES, count = 72, type = GL_UNSIGNED_SHORT, indices = NULL, instancecount = 28)
The ``GL_ARB_sync`` fence ensures that the GPU has started frame n-1 before the CPU The :ext:`GL_ARB_sync` fence ensures that the GPU has started frame n-1 before the CPU
starts on the current frame. starts on the current frame.
This sequence of buffer uploads appears in each frame with the same buffer This sequence of buffer uploads appears in each frame with the same buffer

View File

@@ -102,7 +102,7 @@ objects. They all follow simple, one-method binding calls, e.g.
PIPE_MAX_VIEWPORTS. PIPE_MAX_VIEWPORTS.
* ``set_viewport_states`` * ``set_viewport_states``
* ``set_window_rectangles`` sets the window rectangles to be used for * ``set_window_rectangles`` sets the window rectangles to be used for
rendering, as defined by GL_EXT_window_rectangles. There are two rendering, as defined by :ext:`GL_EXT_window_rectangles`. There are two
modes - include and exclude, which define whether the supplied modes - include and exclude, which define whether the supplied
rectangles are to be used for including fragments or excluding rectangles are to be used for including fragments or excluding
them. All of the rectangles are ORed together, so in exclude mode, them. All of the rectangles are ORed together, so in exclude mode,
@@ -122,7 +122,7 @@ objects. They all follow simple, one-method binding calls, e.g.
for tessellation. for tessellation.
* ``set_debug_callback`` sets the callback to be used for reporting * ``set_debug_callback`` sets the callback to be used for reporting
various debug messages, eventually reported via KHR_debug and various debug messages, eventually reported via :ext:`GL_KHR_debug` and
similar mechanisms. similar mechanisms.
Samplers Samplers

View File

@@ -15,7 +15,8 @@ clamp_vertex_color
the execution of the vertex shader, before being passed to the geometry the execution of the vertex shader, before being passed to the geometry
shader or fragment shader. shader or fragment shader.
OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or GL_ARB_color_buffer_float OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or
:ext:`GL_ARB_color_buffer_float`
D3D11: seems always disabled D3D11: seems always disabled
@@ -28,7 +29,8 @@ clamp_fragment_color
Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader
are clamped to [0, 1]. are clamped to [0, 1].
OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or ARB_color_buffer_float OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or
:ext:`GL_ARB_color_buffer_float`
D3D11: seems always disabled D3D11: seems always disabled

View File

@@ -69,11 +69,11 @@ TODO there's no CAP bit currently for this, there's also unspecified size etc. l
TODO: is there any chance of supporting GL pixel buffer object acceleration with this? TODO: is there any chance of supporting GL pixel buffer object acceleration with this?
OpenGL: vertex buffers in GL 1.5 or GL_ARB_vertex_buffer_object OpenGL: vertex buffers in GL 1.5 or :ext:`GL_ARB_vertex_buffer_object`
- Binding to stream out requires GL 3.0 or GL_NV_transform_feedback - Binding to stream out requires GL 3.0 or :ext:`GL_NV_transform_feedback`
- Binding as constant buffers requires GL 3.1 or GL_ARB_uniform_buffer_object - Binding as constant buffers requires GL 3.1 or :ext:`GL_ARB_uniform_buffer_object`
- Binding to a sampling stage requires GL 3.1 or GL_ARB_texture_buffer_object - Binding to a sampling stage requires GL 3.1 or :ext:`GL_ARB_texture_buffer_object`
D3D11: buffer resources D3D11: buffer resources
- Binding to a render target requires D3D_FEATURE_LEVEL_10_0 - Binding to a render target requires D3D_FEATURE_LEVEL_10_0
@@ -93,7 +93,7 @@ PIPE_TEXTURE_1D / PIPE_TEXTURE_1D_ARRAY
OpenGL: GL_TEXTURE_1D in GL 1.0 OpenGL: GL_TEXTURE_1D in GL 1.0
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two - PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or :ext:`GL_ARB_texture_non_power_of_two`
D3D11: 1D textures in D3D_FEATURE_LEVEL_10_0 D3D11: 1D textures in D3D_FEATURE_LEVEL_10_0
@@ -107,7 +107,8 @@ PIPE_TEXTURE_RECT
- Must use unnormalized coordinates - Must use unnormalized coordinates
- Must use a clamp wrap mode - Must use a clamp wrap mode
OpenGL: GL_TEXTURE_RECTANGLE in GL 3.1 or GL_ARB_texture_rectangle or GL_NV_texture_rectangle OpenGL: GL_TEXTURE_RECTANGLE in GL 3.1 or :ext:`GL_ARB_texture_rectangle` or
:ext:`GL_NV_texture_rectangle`
OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily
@@ -128,7 +129,7 @@ PIPE_TEXTURE_2D / PIPE_TEXTURE_2D_ARRAY
OpenGL: GL_TEXTURE_2D in GL 1.0 OpenGL: GL_TEXTURE_2D in GL 1.0
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two - PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or :ext:`GL_ARB_texture_non_power_of_two`
OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily
@@ -147,9 +148,9 @@ Mipmap dimensions are reduced in all 3 coordinates.
- array_size must be 1 - array_size must be 1
- Must use normalized coordinates - Must use normalized coordinates
OpenGL: GL_TEXTURE_3D in GL 1.2 or GL_EXT_texture3D OpenGL: GL_TEXTURE_3D in GL 1.2 or :ext:`GL_EXT_texture3D`
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two - PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or :ext:`GL_ARB_texture_non_power_of_two`
D3D11: 3D textures D3D11: 3D textures
@@ -173,11 +174,11 @@ resulting in filtering taking samples from multiple surfaces near to the edge.
width and height must be powers of two width and height must be powers of two
- Must use normalized coordinates - Must use normalized coordinates
OpenGL: GL_TEXTURE_CUBE_MAP in GL 1.3 or EXT_texture_cube_map OpenGL: GL_TEXTURE_CUBE_MAP in GL 1.3 or :ext:`GL_EXT_texture_cube_map`
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two - PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or :ext:`GL_ARB_texture_non_power_of_two`
- Seamless cube maps require GL 3.2 or GL_ARB_seamless_cube_map or GL_AMD_seamless_cubemap_per_texture - Seamless cube maps require GL 3.2 or :ext:`GL_ARB_seamless_cube_map` or :ext:`GL_AMD_seamless_cubemap_per_texture`
- Cube map arrays require GL 4.0 or GL_ARB_texture_cube_map_array - Cube map arrays require GL 4.0 or :ext:`GL_ARB_texture_cube_map_array`
D3D11: 2D array textures with the D3D11_RESOURCE_MISC_TEXTURECUBE flag D3D11: 2D array textures with the D3D11_RESOURCE_MISC_TEXTURECUBE flag
@@ -191,7 +192,7 @@ Surfaces are views of a resource that can be bound as a framebuffer to serve as
TODO: write much more on surfaces TODO: write much more on surfaces
OpenGL: FBOs are collections of surfaces in GL 3.0 or GL_ARB_framebuffer_object OpenGL: FBOs are collections of surfaces in GL 3.0 or :ext:`GL_ARB_framebuffer_object`
D3D11: render target views and depth/stencil views D3D11: render target views and depth/stencil views

View File

@@ -119,8 +119,9 @@ The integer capabilities:
is allowed to return ``0`` in which case ``PIPE_CAP_GLSL_FEATURE_LEVEL`` is is allowed to return ``0`` in which case ``PIPE_CAP_GLSL_FEATURE_LEVEL`` is
used. used.
Note that simply returning the same value as the GLSL feature level cap is Note that simply returning the same value as the GLSL feature level cap is
incorrect. For example, GLSL version 3.30 does not require ``ARB_gpu_shader5``, incorrect. For example, GLSL version 3.30 does not require
but ESSL version 3.20 es does require ``EXT_gpu_shader5`` :ext:`GL_EXT_gpu_shader5`, but ESSL version 3.20 es does require
:ext:`GL_EXT_gpu_shader5`
* ``PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION``: Whether quads adhere to * ``PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION``: Whether quads adhere to
the flatshade_first setting in ``pipe_rasterizer_state``. the flatshade_first setting in ``pipe_rasterizer_state``.
* ``PIPE_CAP_USER_VERTEX_BUFFERS``: Whether the driver supports user vertex * ``PIPE_CAP_USER_VERTEX_BUFFERS``: Whether the driver supports user vertex
@@ -207,7 +208,7 @@ The integer capabilities:
PIPE_ENDIAN_BIG or PIPE_ENDIAN_LITTLE. PIPE_ENDIAN_BIG or PIPE_ENDIAN_LITTLE.
* ``PIPE_CAP_MIXED_FRAMEBUFFER_SIZES``: Whether it is allowed to have * ``PIPE_CAP_MIXED_FRAMEBUFFER_SIZES``: Whether it is allowed to have
different sizes for fb color/zs attachments. This controls whether different sizes for fb color/zs attachments. This controls whether
ARB_framebuffer_object is provided. :ext:`GL_ARB_framebuffer_object` is provided.
* ``PIPE_CAP_VS_LAYER_VIEWPORT``: Whether ``VARYING_SLOT_LAYER`` and * ``PIPE_CAP_VS_LAYER_VIEWPORT``: Whether ``VARYING_SLOT_LAYER`` and
``VARYING_SLOT_VIEWPORT`` are supported as vertex shader outputs. Note that ``VARYING_SLOT_VIEWPORT`` are supported as vertex shader outputs. Note that
the viewport will only be used if multiple viewports are exposed. the viewport will only be used if multiple viewports are exposed.
@@ -270,11 +271,11 @@ The integer capabilities:
* ``PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE``: The maximum supported vertex stride. * ``PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE``: The maximum supported vertex stride.
* ``PIPE_CAP_SAMPLER_VIEW_TARGET``: Whether the sampler view's target can be * ``PIPE_CAP_SAMPLER_VIEW_TARGET``: Whether the sampler view's target can be
different than the underlying resource's, as permitted by different than the underlying resource's, as permitted by
ARB_texture_view. For example a 2d array texture may be reinterpreted as a :ext:`GL_ARB_texture_view`. For example a 2d array texture may be reinterpreted as a
cube (array) texture and vice-versa. cube (array) texture and vice-versa.
* ``PIPE_CAP_CLIP_HALFZ``: Whether the driver supports the * ``PIPE_CAP_CLIP_HALFZ``: Whether the driver supports the
pipe_rasterizer_state::clip_halfz being set to true. This is required pipe_rasterizer_state::clip_halfz being set to true. This is required
for enabling ARB_clip_control. for enabling :ext:`GL_ARB_clip_control`.
* ``PIPE_CAP_POLYGON_OFFSET_CLAMP``: If true, the driver implements support * ``PIPE_CAP_POLYGON_OFFSET_CLAMP``: If true, the driver implements support
for ``pipe_rasterizer_state::offset_clamp``. for ``pipe_rasterizer_state::offset_clamp``.
* ``PIPE_CAP_MULTISAMPLE_Z_RESOLVE``: Whether the driver supports blitting * ``PIPE_CAP_MULTISAMPLE_Z_RESOLVE``: Whether the driver supports blitting
@@ -303,16 +304,16 @@ The integer capabilities:
textures. textures.
* ``PIPE_CAP_DEPTH_BOUNDS_TEST``: Whether bounds_test, bounds_min, and * ``PIPE_CAP_DEPTH_BOUNDS_TEST``: Whether bounds_test, bounds_min, and
bounds_max states of pipe_depth_stencil_alpha_state behave according bounds_max states of pipe_depth_stencil_alpha_state behave according
to the GL_EXT_depth_bounds_test specification. to the :ext:`GL_EXT_depth_bounds_test` specification.
* ``PIPE_CAP_TEXTURE_QUERY_SAMPLES``: Whether the ``TXQS`` opcode is supported * ``PIPE_CAP_TEXTURE_QUERY_SAMPLES``: Whether the ``TXQS`` opcode is supported
* ``PIPE_CAP_FORCE_PERSAMPLE_INTERP``: If the driver can force per-sample * ``PIPE_CAP_FORCE_PERSAMPLE_INTERP``: If the driver can force per-sample
interpolation for all fragment shader inputs if interpolation for all fragment shader inputs if
pipe_rasterizer_state::force_persample_interp is set. This is only used pipe_rasterizer_state::force_persample_interp is set. This is only used
by GL3-level sample shading (ARB_sample_shading). GL4-level sample shading by GL3-level sample shading (:ext:`GL_ARB_sample_shading`). GL4-level sample
(ARB_gpu_shader5) doesn't use this. While GL3 hardware has a state for it, shading (:ext:`GL_ARB_gpu_shader5`) doesn't use this. While GL3 hardware has a
GL4 hardware will likely need to emulate it with a shader variant, or by state for it, GL4 hardware will likely need to emulate it with a shader
selecting the interpolation weights with a conditional assignment variant, or by selecting the interpolation weights with a conditional
in the shader. assignment in the shader.
* ``PIPE_CAP_SHAREABLE_SHADERS``: Whether shader CSOs can be used by any * ``PIPE_CAP_SHAREABLE_SHADERS``: Whether shader CSOs can be used by any
pipe_context. Important for reducing jank at draw time by letting GL shaders pipe_context. Important for reducing jank at draw time by letting GL shaders
linked in one thread be used in another thread without recompiling. linked in one thread be used in another thread without recompiling.
@@ -367,11 +368,13 @@ The integer capabilities:
rendering or textures. rendering or textures.
* ``PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR``: Implementation uses bounds * ``PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR``: Implementation uses bounds
checking on resource accesses by shader if the context is created with checking on resource accesses by shader if the context is created with
PIPE_CONTEXT_ROBUST_BUFFER_ACCESS. See the ARB_robust_buffer_access_behavior PIPE_CONTEXT_ROBUST_BUFFER_ACCESS. See the
extension for information on the required behavior for out of bounds accesses :ext:`GL_ARB_robust_buffer_access_behavior` extension for information on the
and accesses to unbound resources. required behavior for out of bounds accesses and accesses to unbound
* ``PIPE_CAP_CULL_DISTANCE``: Whether the driver supports the arb_cull_distance resources.
extension and thus implements proper support for culling planes. * ``PIPE_CAP_CULL_DISTANCE``: Whether the driver supports the
:ext:`GL_ARB_cull_distance` extension and thus implements proper support for
culling planes.
* ``PIPE_CAP_CULL_DISTANCE_NOCOMBINE``: Whether the driver wants to skip * ``PIPE_CAP_CULL_DISTANCE_NOCOMBINE``: Whether the driver wants to skip
running the ``nir_lower_clip_cull_distance_arrays`` pass in order to get running the ``nir_lower_clip_cull_distance_arrays`` pass in order to get
VARYING_SLOT_CULL_DIST0 slot variables. VARYING_SLOT_CULL_DIST0 slot variables.
@@ -401,13 +404,13 @@ The integer capabilities:
equal interpolation qualifiers. equal interpolation qualifiers.
Components may overlap, notably when the gaps in an array of dvec3 are Components may overlap, notably when the gaps in an array of dvec3 are
filled in. filled in.
* ``PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME``: Whether GL_ARB_transform_feedback2 * ``PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME``: Whether
is supported, including pausing/resuming queries and having :ext:`GL_ARB_transform_feedback2` is supported, including pausing/resuming
``count_from_stream_output`` set on indirect draws to implement queries and having ``count_from_stream_output`` set on indirect draws to
glDrawTransformFeedback. Required for OpenGL 4.0. implement glDrawTransformFeedback. Required for OpenGL 4.0.
* ``PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS``: Whether interleaved stream * ``PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS``: Whether interleaved stream
output mode is able to interleave across buffers. This is required for output mode is able to interleave across buffers. This is required for
ARB_transform_feedback3. :ext:`GL_ARB_transform_feedback3`.
* ``PIPE_CAP_SHADER_CAN_READ_OUTPUTS``: Whether every TGSI shader stage can read * ``PIPE_CAP_SHADER_CAN_READ_OUTPUTS``: Whether every TGSI shader stage can read
from the output file. from the output file.
* ``PIPE_CAP_FBFETCH``: The number of render targets whose value in the * ``PIPE_CAP_FBFETCH``: The number of render targets whose value in the
@@ -459,7 +462,7 @@ The integer capabilities:
* ``PIPE_CAP_LOAD_CONSTBUF``: True if the driver supports ``TGSI_OPCODE_LOAD`` use * ``PIPE_CAP_LOAD_CONSTBUF``: True if the driver supports ``TGSI_OPCODE_LOAD`` use
with constant buffers. with constant buffers.
* ``PIPE_CAP_TILE_RASTER_ORDER``: Whether the driver supports * ``PIPE_CAP_TILE_RASTER_ORDER``: Whether the driver supports
GL_MESA_tile_raster_order, using the tile_raster_order_* fields in :ext:`GL_MESA_tile_raster_order`, using the tile_raster_order_* fields in
pipe_rasterizer_state. pipe_rasterizer_state.
* ``PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES``: Limit on combined shader * ``PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES``: Limit on combined shader
output resources (images + buffers + fragment outputs). If 0 the state output resources (images + buffers + fragment outputs). If 0 the state
@@ -509,7 +512,7 @@ The integer capabilities:
* ``PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE``: Whether * ``PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE``: Whether
``PIPE_CAP_POST_DEPTH_COVERAGE`` works with conservative rasterization. ``PIPE_CAP_POST_DEPTH_COVERAGE`` works with conservative rasterization.
* ``PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE``: Whether * ``PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE``: Whether
inner_coverage from GL_INTEL_conservative_rasterization is supported. inner_coverage from :ext:`GL_INTEL_conservative_rasterization` is supported.
* ``PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS``: The maximum * ``PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS``: The maximum
subpixel precision bias in bits during conservative rasterization. subpixel precision bias in bits during conservative rasterization.
* ``PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS``: True is the driver supports * ``PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS``: True is the driver supports
@@ -534,7 +537,7 @@ The integer capabilities:
of pipe_vertex_element::src_offset. of pipe_vertex_element::src_offset.
* ``PIPE_CAP_SURFACE_SAMPLE_COUNT``: Whether the driver * ``PIPE_CAP_SURFACE_SAMPLE_COUNT``: Whether the driver
supports pipe_surface overrides of resource nr_samples. If set, will supports pipe_surface overrides of resource nr_samples. If set, will
enable EXT_multisampled_render_to_texture. enable :ext:`GL_EXT_multisampled_render_to_texture`.
* ``PIPE_CAP_IMAGE_ATOMIC_FLOAT_ADD``: Atomic floating point adds are * ``PIPE_CAP_IMAGE_ATOMIC_FLOAT_ADD``: Atomic floating point adds are
supported on images, buffers, and shared memory. supported on images, buffers, and shared memory.
* ``PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND``: True if the driver needs blend state to use zero/one instead of destination alpha for RGB/XRGB formats. * ``PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND``: True if the driver needs blend state to use zero/one instead of destination alpha for RGB/XRGB formats.
@@ -577,7 +580,7 @@ The integer capabilities:
turn arrays whose contents can be deduced at compile time into constant turn arrays whose contents can be deduced at compile time into constant
buffer loads, or false if the driver can handle such arrays itself in a more buffer loads, or false if the driver can handle such arrays itself in a more
efficient manner (such as through nir_opt_large_constants() and nir->constant_data). efficient manner (such as through nir_opt_large_constants() and nir->constant_data).
* ``PIPE_CAP_GL_SPIRV``: True if the driver supports ARB_gl_spirv extension. * ``PIPE_CAP_GL_SPIRV``: True if the driver supports :ext:`GL_ARB_gl_spirv` extension.
* ``PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS``: True if the driver supports Variable Pointers in SPIR-V shaders. * ``PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS``: True if the driver supports Variable Pointers in SPIR-V shaders.
* ``PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION``: True if driver supports demote keyword in GLSL programs. * ``PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION``: True if driver supports demote keyword in GLSL programs.
* ``PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE``: True if driver wants the TG4 component encoded in sampler swizzle rather than as a separate source. * ``PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE``: True if driver wants the TG4 component encoded in sampler swizzle rather than as a separate source.
@@ -604,9 +607,9 @@ The integer capabilities:
* ``PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED``: Driver needs the nir_lower_viewport_transform pass to be enabled. This also means that the gl_Position value is modified and should be lowered for transform feedback, if needed. Defaults to false. * ``PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED``: Driver needs the nir_lower_viewport_transform pass to be enabled. This also means that the gl_Position value is modified and should be lowered for transform feedback, if needed. Defaults to false.
* ``PIPE_CAP_PSIZ_CLAMPED``: Driver needs for the point size to be clamped. Additionally, the gl_PointSize has been modified and its value should be lowered for transform feedback, if needed. Defaults to false. * ``PIPE_CAP_PSIZ_CLAMPED``: Driver needs for the point size to be clamped. Additionally, the gl_PointSize has been modified and its value should be lowered for transform feedback, if needed. Defaults to false.
* ``PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE``: Buffer size used to upload vertices for glBegin/glEnd. * ``PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE``: Buffer size used to upload vertices for glBegin/glEnd.
* ``PIPE_CAP_VIEWPORT_SWIZZLE``: Whether pipe_viewport_state::swizzle can be used to specify pre-clipping swizzling of coordinates (see GL_NV_viewport_swizzle). * ``PIPE_CAP_VIEWPORT_SWIZZLE``: Whether pipe_viewport_state::swizzle can be used to specify pre-clipping swizzling of coordinates (see :ext:`GL_NV_viewport_swizzle`).
* ``PIPE_CAP_SYSTEM_SVM``: True if all application memory can be shared with the GPU without explicit mapping. * ``PIPE_CAP_SYSTEM_SVM``: True if all application memory can be shared with the GPU without explicit mapping.
* ``PIPE_CAP_VIEWPORT_MASK``: Whether ``TGSI_SEMANTIC_VIEWPORT_MASK`` and ``TGSI_PROPERTY_LAYER_VIEWPORT_RELATIVE`` are supported (see GL_NV_viewport_array2). * ``PIPE_CAP_VIEWPORT_MASK``: Whether ``TGSI_SEMANTIC_VIEWPORT_MASK`` and ``TGSI_PROPERTY_LAYER_VIEWPORT_RELATIVE`` are supported (see :ext:`GL_NV_viewport_array2`).
* ``PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE``: Whether mapping a buffer as unsynchronized from any thread is safe. * ``PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE``: Whether mapping a buffer as unsynchronized from any thread is safe.
* ``PIPE_CAP_GLSL_ZERO_INIT``: Choose a default zero initialization some GLSL variables. If ``1``, then all GLSL shader variables and gl_FragColor are initialized to zero. If ``2``, then shader out variables are not initialized but function out variables are. * ``PIPE_CAP_GLSL_ZERO_INIT``: Choose a default zero initialization some GLSL variables. If ``1``, then all GLSL shader variables and gl_FragColor are initialized to zero. If ``2``, then shader out variables are not initialized but function out variables are.
* ``PIPE_CAP_BLEND_EQUATION_ADVANCED``: Driver supports blend equation advanced without necessarily supporting FBFETCH. * ``PIPE_CAP_BLEND_EQUATION_ADVANCED``: Driver supports blend equation advanced without necessarily supporting FBFETCH.
@@ -628,7 +631,7 @@ The integer capabilities:
* ``PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE``: Maximum 1D/2D/rectangle texture image dimension for a sparse texture. * ``PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE``: Maximum 1D/2D/rectangle texture image dimension for a sparse texture.
* ``PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE``: Maximum 3D texture image dimension for a sparse texture. * ``PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE``: Maximum 3D texture image dimension for a sparse texture.
* ``PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS``: Maximum number of layers in a sparse array texture. * ``PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS``: Maximum number of layers in a sparse array texture.
* ``PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS``: TRUE if there are no restrictions on the allocation of mipmaps in sparse textures and FALSE otherwise. See SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB description in ARB_sparse_texture extension spec. * ``PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS``: TRUE if there are no restrictions on the allocation of mipmaps in sparse textures and FALSE otherwise. See SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB description in :ext:`GL_ARB_sparse_texture` extension spec.
* ``PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY``: TRUE if shader sparse texture sample instruction could also return the residency information. * ``PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY``: TRUE if shader sparse texture sample instruction could also return the residency information.
* ``PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD``: TRUE if shader sparse texture sample instruction support clamp the minimal lod to prevent read from un-committed pages. * ``PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD``: TRUE if shader sparse texture sample instruction support clamp the minimal lod to prevent read from un-committed pages.
* ``PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER``: TRUE if the driver allows the "draw out of order" optimization to be enabled. See _mesa_update_allow_draw_out_of_order for more details. * ``PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER``: TRUE if the driver allows the "draw out of order" optimization to be enabled. See _mesa_update_allow_draw_out_of_order for more details.

View File

@@ -899,9 +899,9 @@ XXX doesn't look like most of the opcodes really belong here.
.. opcode:: TXF - Texel Fetch .. opcode:: TXF - Texel Fetch
As per NV_gpu_program4, extract a single texel from a specified texture As per :ext:`GL_NV_gpu_program4`, extract a single texel from a specified
image or PIPE_BUFFER resource. The source sampler may not be a CUBE or texture image or PIPE_BUFFER resource. The source sampler may not be a
SHADOW. *src0* is a CUBE or SHADOW. *src0* is a
four-component signed integer vector used to identify the single texel four-component signed integer vector used to identify the single texel
accessed. 3 components + level. If the texture is multisampled, then accessed. 3 components + level. If the texture is multisampled, then
the fourth component indicates the sample, not the mipmap level. the fourth component indicates the sample, not the mipmap level.
@@ -915,11 +915,11 @@ XXX doesn't look like most of the opcodes really belong here.
.. opcode:: TXQ - Texture Size Query .. opcode:: TXQ - Texture Size Query
As per NV_gpu_program4, retrieve the dimensions of the texture depending on As per :ext:`GL_NV_gpu_program4`, retrieve the dimensions of the texture
the target. For 1D (width), 2D/RECT/CUBE (width, height), 3D (width, height, depending on the target. For 1D (width), 2D/RECT/CUBE (width, height),
depth), 1D array (width, layers), 2D array (width, height, layers). 3D (width, height, depth), 1D array (width, layers), 2D array (width,
Also return the number of accessible levels (last_level - first_level + 1) height, layers). Also return the number of accessible levels
in W. (last_level - first_level + 1) in W.
For components which don't return a resource dimension, their value For components which don't return a resource dimension, their value
is undefined. is undefined.
@@ -951,15 +951,15 @@ XXX doesn't look like most of the opcodes really belong here.
.. opcode:: TG4 - Texture Gather .. opcode:: TG4 - Texture Gather
As per ARB_texture_gather, gathers the four texels to be used in a bi-linear As per :ext:`GL_ARB_texture_gather`, gathers the four texels to be used in a
filtering operation and packs them into a single register. Only works with bi-linear filtering operation and packs them into a single register.
2D, 2D array, cubemaps, and cubemaps arrays. For 2D textures, only the Only works with 2D, 2D array, cubemaps, and cubemaps arrays. For 2D
addressing modes of the sampler and the top level of any mip pyramid are textures, only the addressing modes of the sampler and the top level of any
used. Set W to zero. It behaves like the TEX instruction, but a filtered mip pyramid are used. Set W to zero. It behaves like the TEX instruction,
sample is not generated. The four samples that contribute to filtering are but a filtered sample is not generated. The four samples that contribute to
placed into XYZW in clockwise order, starting with the (u,v) texture filtering are placed into XYZW in clockwise order, starting with the (u,v)
coordinate delta at the following locations (-, +), (+, +), (+, -), (-, -), texture coordinate delta at the following locations (-, +), (+, +), (+, -),
where the magnitude of the deltas are half a texel. (-, -), where the magnitude of the deltas are half a texel.
PIPE_CAP_TEXTURE_SM5 enhances this instruction to support shadow per-sample PIPE_CAP_TEXTURE_SM5 enhances this instruction to support shadow per-sample
depth compares, single component selection, and a non-constant offset. It depth compares, single component selection, and a non-constant offset. It
@@ -3537,7 +3537,7 @@ TGSI_SEMANTIC_VIEWPORT_MASK
""""""""""""""""""""""""""" """""""""""""""""""""""""""
A bit mask of viewports to broadcast the current primitive to. See A bit mask of viewports to broadcast the current primitive to. See
GL_NV_viewport_array2 for more details. :ext:`GL_NV_viewport_array2` for more details.
TGSI_SEMANTIC_TESS_DEFAULT_OUTER_LEVEL TGSI_SEMANTIC_TESS_DEFAULT_OUTER_LEVEL
@@ -3666,7 +3666,7 @@ If LOWER_LEFT, the position will be (0,0) at the lower left corner and
increase upward and rightward. increase upward and rightward.
OpenGL defaults to LOWER_LEFT, and is configurable with the OpenGL defaults to LOWER_LEFT, and is configurable with the
GL_ARB_fragment_coord_conventions extension. :ext:`GL_ARB_fragment_coord_conventions` extension.
DirectX 9/10 use UPPER_LEFT. DirectX 9/10 use UPPER_LEFT.
@@ -3684,7 +3684,7 @@ rasterization, which is instead controlled by half_pixel_center in the
rasterizer. rasterizer.
OpenGL defaults to HALF_INTEGER, and is configurable with the OpenGL defaults to HALF_INTEGER, and is configurable with the
GL_ARB_fragment_coord_conventions extension. :ext:`GL_ARB_fragment_coord_conventions` extension.
DirectX 9 uses INTEGER. DirectX 9 uses INTEGER.
DirectX 10 uses HALF_INTEGER. DirectX 10 uses HALF_INTEGER.

View File

@@ -66,8 +66,8 @@ November 2002: Mesa 5.0 is released. It implements the OpenGL 1.4
specification. specification.
January 2003: Mesa 6.0 is released. It implements the OpenGL 1.5 January 2003: Mesa 6.0 is released. It implements the OpenGL 1.5
specification as well as the GL_ARB_vertex_program and specification as well as the :ext:`GL_ARB_vertex_program` and
GL_ARB_fragment_program extensions. :ext:`GL_ARB_fragment_program` extensions.
June 2007: Mesa 7.0 is released, implementing the OpenGL 2.1 June 2007: Mesa 7.0 is released, implementing the OpenGL 2.1
specification and OpenGL Shading Language. specification and OpenGL Shading Language.

View File

@@ -131,29 +131,29 @@ the sRGB colorspace.
When sampling from a texture, the value returned to the shader is in the linear When sampling from a texture, the value returned to the shader is in the linear
colorspace. The conversion from sRGB happens as part of sampling. In OpenGL, colorspace. The conversion from sRGB happens as part of sampling. In OpenGL,
thanks mostly to history, there are various knobs for determining when you thanks mostly to history, there are various knobs for determining when you
should or should not encode or decode sRGB. In 2007, GL_EXT_texture_sRGB added should or should not encode or decode sRGB. In 2007, :ext:`GL_EXT_texture_sRGB`
support for sRGB texture formats and was included in OpenGL 2.1. In 2010, added support for sRGB texture formats and was included in OpenGL 2.1. In
GL_EXT_texture_sRGB_decode added a flag to allow you to disable texture 2010, :ext:`GL_EXT_texture_sRGB_decode` added a flag to allow you to disable
decoding so that the shader received the data still in the sRGB colorspace. texture decoding so that the shader received the data still in the sRGB
Then, in 2012, GL_ARB_texture_view came along and made colorspace. Then, in 2012, :ext:`GL_ARB_texture_view` came along and made
GL_EXT_texture_sRGB_decode simultaneously obsolete and very confusing. Now, :ext:`GL_EXT_texture_sRGB_decode` simultaneously obsolete and very confusing.
thanks to the combination of extensions, you can upload a texture as linear, Now, thanks to the combination of extensions, you can upload a texture as
create an sRGB view of it and ask that sRGB not be decoded. What format is it linear, create an sRGB view of it and ask that sRGB not be decoded. What
in again? format is it in again?
The situation with render targets is a bit different. Historically, you got The situation with render targets is a bit different. Historically, you got
your render target from the window system (which is always sRGB) and the spec your render target from the window system (which is always sRGB) and the spec
said nothing whatsoever about encoding. All render targets were sRGB because said nothing whatsoever about encoding. All render targets were sRGB because
that's how monitors worked and application writers were expected to understand that's how monitors worked and application writers were expected to understand
that their final rendering needed to be in sRGB. However, with the advent of that their final rendering needed to be in sRGB. However, with the advent of
EXT_framebuffer_object this was no longer true. Also, sRGB was causing :ext:`GL_EXT_framebuffer_object` this was no longer true. Also, sRGB was causing
problems with blending because GL was blind to the fact that the output was problems with blending because GL was blind to the fact that the output was
sRGB and blending was occurring in the wrong colorspace. In 2006, a set of sRGB and blending was occurring in the wrong colorspace. In 2006, a set of
EXT_framebuffer_sRGB extensions added support (on both the GL and window-system :ext:`GL_EXT_framebuffer_sRGB` extensions added support (on both the GL and
sides) for detecting whether a particular framebuffer was in sRGB and window-system sides) for detecting whether a particular framebuffer was in sRGB
instructing GL to do the conversion into the sRGB colorspace as the final step and instructing GL to do the conversion into the sRGB colorspace as the final
prior to writing out to the render target. Enabling sRGB also implied that step prior to writing out to the render target. Enabling sRGB also implied
blending would occur in the linear colorspace prior to sRGB conversion and that blending would occur in the linear colorspace prior to sRGB conversion and
would therefore be more accurate. When sRGB was added to the OpenGL ES spec in would therefore be more accurate. When sRGB was added to the OpenGL ES spec in
3.1, they added the query for sRGB but did not add the flag to allow you to 3.1, they added the query for sRGB but did not add the flag to allow you to
turn it on and off. turn it on and off.

View File

@@ -71,9 +71,9 @@ language.
Several GLSL extensions are also supported: Several GLSL extensions are also supported:
- GL_ARB_draw_buffers - :ext:`GL_ARB_draw_buffers`
- GL_ARB_fragment_coord_conventions - :ext:`GL_ARB_fragment_coord_conventions`
- GL_ARB_shader_bit_encoding - :ext:`GL_ARB_shader_bit_encoding`
Unsupported Features Unsupported Features
-------------------- --------------------
@@ -95,7 +95,8 @@ Implementation Notes
-------------------- --------------------
- Shading language programs are compiled into low-level programs very - Shading language programs are compiled into low-level programs very
similar to those of GL_ARB_vertex/fragment_program. similar to those of :ext:`GL_ARB_vertex_program` /
:ext:`GL_ARB_fragment_program`.
- All vector types (vec2, vec3, vec4, bvec2, etc) currently occupy full - All vector types (vec2, vec3, vec4, bvec2, etc) currently occupy full
float[4] registers. float[4] registers.
- Float constants and variables are packed so that up to four floats - Float constants and variables are packed so that up to four floats
@@ -142,7 +143,7 @@ After building Mesa, the compiler can be found at
src/compiler/glsl/glsl_compiler src/compiler/glsl/glsl_compiler
Here's an example of using the compiler to compile a vertex shader and Here's an example of using the compiler to compile a vertex shader and
emit GL_ARB_vertex_program-style instructions: emit :ext:`GL_ARB_vertex_program`-style instructions:
.. code-block:: console .. code-block:: console

View File

@@ -34,7 +34,7 @@ somewhat dated, unfortunately.
superseded by SGI SI GLU). superseded by SGI SI GLU).
- **Holger Waechtler** contributed AMD 3DNow! assembly code which - **Holger Waechtler** contributed AMD 3DNow! assembly code which
accelerates vertex transformation in Mesa 3.1. Holger also accelerates vertex transformation in Mesa 3.1. Holger also
implemented the GL_EXT_texture_env_combine extension. implemented the :ext:`GL_EXT_texture_env_combine` extension.
- **Jeroen van der Zijp** and **Thorsten Ohl** contributed the Xt/Motif - **Jeroen van der Zijp** and **Thorsten Ohl** contributed the Xt/Motif
widget code. widget code.
- **John Stone** provided the multi-threading support in Mesa 3.0. - **John Stone** provided the multi-threading support in Mesa 3.0.

View File

@@ -37,10 +37,8 @@ Catia-03 tests 3, 4, 8
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
These tests use features of the These tests use features of the
`GL_NV_fragment_program2 <https://www.opengl.org/registry/specs/NV/fragment_program2.txt>`__ :ext:`GL_NV_fragment_program2` and :ext:`GL_NV_vertex_program3` extensions
and without checking if the driver supports them.
`GL_NV_vertex_program3 <https://www.opengl.org/registry/specs/NV/vertex_program3.txt>`__
extensions without checking if the driver supports them.
When Mesa tries to compile the vertex/fragment programs it generates When Mesa tries to compile the vertex/fragment programs it generates
errors (which Viewperf ignores). Subsequent drawing calls become no-ops errors (which Viewperf ignores). Subsequent drawing calls become no-ops
@@ -49,9 +47,7 @@ and the rendering is incorrect.
sw-02 tests 1, 2, 4, 6 sw-02 tests 1, 2, 4, 6
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
These tests depend on the These tests depend on the :ext:`GL_NV_primitive_restart` extension.
`GL_NV_primitive_restart <https://www.opengl.org/registry/specs/NV/primitive_restart.txt>`__
extension.
If the Mesa driver doesn't support this extension the rendering will be If the Mesa driver doesn't support this extension the rendering will be
incorrect and the test will fail. incorrect and the test will fail.
@@ -211,11 +207,11 @@ catia-04
~~~~~~~~ ~~~~~~~~
One of the catia tests calls wglGetProcAddress() to get some One of the catia tests calls wglGetProcAddress() to get some
GL_EXT_direct_state_access functions (such as glBindMultiTextureEXT) and :ext:`GL_EXT_direct_state_access` functions (such as
some GL_NV_half_float functions (such as glMultiTexCoord3hNV). If the glBindMultiTextureEXT) and some :ext:`GL_NV_half_float` functions (such
extension/function is not supported, wglGetProcAddress() can return as glMultiTexCoord3hNV). If the extension/function is not supported,
NULL. Unfortunately, Viewperf doesn't check for null pointers and wglGetProcAddress() can return NULL. Unfortunately, Viewperf doesn't check
crashes when it later tries to use the pointer. for null pointers and crashes when it later tries to use the pointer.
Another catia test uses OpenGL 3.1's primitive restart feature. But when Another catia test uses OpenGL 3.1's primitive restart feature. But when
Viewperf creates an OpenGL context, it doesn't request version 3.1 If Viewperf creates an OpenGL context, it doesn't request version 3.1 If

View File

@@ -257,7 +257,8 @@ the function pointer:
index into the entrypoint table, not the dispatch table, because the index into the entrypoint table, not the dispatch table, because the
rules for when an entrypoint should be exposed are per-entrypoint. For rules for when an entrypoint should be exposed are per-entrypoint. For
instance, ``vkBindImageMemory2`` is available on Vulkan 1.1 and later but instance, ``vkBindImageMemory2`` is available on Vulkan 1.1 and later but
``vkBindImageMemory2KHR`` is available if VK_KHR_bind_memory2 is enabled. ``vkBindImageMemory2KHR`` is available if :ext:`VK_KHR_bind_memory2` is
enabled.
3. A compaction table is used to map from the entrypoint table index to 3. A compaction table is used to map from the entrypoint table index to
the dispatch table index and the function is finally fetched from the the dispatch table index and the function is finally fetched from the

View File

@@ -5,13 +5,14 @@ The Vulkan runtime code in Mesa provides several helpful utilities to make
managing render passes easier. managing render passes easier.
VK_KHR_create_renderpass2 :ext:`VK_KHR_create_renderpass2`
------------------------- --------------------------------
It is strongly recommended that drivers implement VK_KHR_create_renderpass2 It is strongly recommended that drivers implement
directly and not bother implementing the old Vulkan 1.0 entrypoints. If a :ext:`VK_KHR_create_renderpass2` directly and not bother implementing the
driver does not implement them, the following will be implemented in common old Vulkan 1.0 entrypoints. If a driver does not implement them, the
code in terms of their VK_KHR_create_renderpass2 counterparts: following will be implemented in common code in terms of their
:ext:`VK_KHR_create_renderpass2` counterparts:
- :cpp:func:`vkCreateRenderPass` - :cpp:func:`vkCreateRenderPass`
- :cpp:func:`vkCmdBeginRenderPass` - :cpp:func:`vkCmdBeginRenderPass`
@@ -34,12 +35,12 @@ that driver doesn't need to do any additional compilation at
of :cpp:func:`vkCreateRenderPass2` and :cpp:func:`vkDestroyRenderPass`. of :cpp:func:`vkCreateRenderPass2` and :cpp:func:`vkDestroyRenderPass`.
VK_KHR_dynamic_rendering :ext:`VK_KHR_dynamic_rendering`
------------------------ -------------------------------
For drivers which don't need to do subpass combining, it is recommended For drivers which don't need to do subpass combining, it is recommended
that they skip implementing render passes entirely and implement that they skip implementing render passes entirely and implement
VK_KHR_dynamic_rendering instead. If they choose to do so, the runtime :ext:`VK_KHR_dynamic_rendering` instead. If they choose to do so, the runtime
will provide the following, implemented in terms of will provide the following, implemented in terms of
:cpp:func:`vkCmdBeginRendering` and :cpp:func:`vkCmdEndRendering`: :cpp:func:`vkCmdBeginRendering` and :cpp:func:`vkCmdEndRendering`:
@@ -66,7 +67,7 @@ Because render passes and subpass indices are also passed into
:cpp:func:`vkCmdCreateGraphicsPipelines` and :cpp:func:`vkCmdCreateGraphicsPipelines` and
:cpp:func:`vkCmdExecuteCommands` which we can't implement on the driver's :cpp:func:`vkCmdExecuteCommands` which we can't implement on the driver's
behalf, we provide a couple of helpers for getting the render pass behalf, we provide a couple of helpers for getting the render pass
information in terms of the relevant VK_KHR_dynamic_rendering: information in terms of the relevant :ext:`VK_KHR_dynamic_rendering`:
.. doxygenfunction:: vk_get_pipeline_rendering_create_info .. doxygenfunction:: vk_get_pipeline_rendering_create_info