tgsi: update docs for ArrayID usage
[mesa.git] / src / gallium / docs / d3d11ddi.txt
index 8f2509ce035ab4ad2f8e3806fd3752469ffb5ae1..a7036481411843666907eea1083acb877821f298 100644 (file)
@@ -36,7 +36,7 @@ d3dumddi.h contains the DirectX 9 DDI interface
 BC1: DXT1
 BC2: DXT3
 BC3: DXT5
-BC5: RGTC
+BC5: RGTC1
 BC6H: BPTC float
 BC7: BPTC
 CS = compute shader: OpenCL-like shader
@@ -66,9 +66,6 @@ Unordered access view: view supporting random read/write access (usually from co
 clear
        + Gallium supports clearing both render targets and depth/stencil with a single call
 
-draw_range_elements
-       + Gallium supports indexed draw with explicit range
-
 fence_signalled
 fence_finish
        + D3D10/D3D11 don't appear to support explicit fencing; queries can often substitute though, and flushing is supported
@@ -79,7 +76,7 @@ set_clip_state
 set_polygon_stipple
        + Gallium supports polygon stipple
 
-surface_fill
+clearRT/clearDS
        + Gallium supports subrectangle fills of surfaces, D3D10 only supports full clears of views
 
 * DirectX 10/11 DDI functions and Gallium equivalents
@@ -114,11 +111,10 @@ CheckDeferredContextHandleSizes (D3D11 only)
 CheckFormatSupport -> screen->is_format_supported
        ! Gallium passes usages to this function, D3D11 returns them
        - Gallium does not differentiate between blendable and non-blendable render targets
-       - Gallium lacks multisampled-texture and multisampled-render-target usages
+       ! Gallium includes sample count directly, D3D11 uses additional query 
 
 CheckMultisampleQualityLevels
-       * could merge this with is_format_supported
-       - Gallium lacks multisampling support
+       ! is merged with is_format_supported
 
 CommandListExecute (D3D11 only)
        - Gallium does not support command lists
@@ -126,8 +122,8 @@ CommandListExecute (D3D11 only)
 CopyStructureCount (D3D11 only)
        - Gallium does not support unordered access views (views that can be written to arbitrarily from compute shaders)
 
-ClearDepthStencilView -> clear
-ClearRenderTargetView -> clear
+ClearDepthStencilView -> clear_depth_stencil
+ClearRenderTargetView -> clear_render_target
        # D3D11 is not totally clear about whether this applies to any view or only a "currently-bound view"
        + Gallium allows to clear both depth/stencil and render target(s) in a single operation
        + Gallium supports double-precision depth values (but not rgba values!)
@@ -139,7 +135,6 @@ ClearUnorderedAccessViewUint (D3D11 only)
 
 CreateBlendState (extended in D3D10.1) -> create_blend_state
        # D3D10 does not support per-RT blend modes (but per-RT blending), only D3D10.1 does
-       - Gallium lacks alpha-to-coverage
        + Gallium supports logic ops
        + Gallium supports dithering
        + Gallium supports using the broadcast alpha component of the blend constant color
@@ -167,10 +162,9 @@ CreateDepthStencilState -> create_depth_stencil_alpha_state
        + Gallium has per-face writemask/valuemasks, D3D11 uses the same value for back and front
        + Gallium supports the alpha test, which D3D11 lacks
 
-CreateDepthStencilView -> get_tex_surface
-CreateRenderTargetView -> get_tex_surface
-       ! Gallium merges depthstencil and rendertarget views into pipe_surface, which also doubles as a 2D surface abstraction
-       - lack of texture array support
+CreateDepthStencilView -> create_surface
+CreateRenderTargetView -> create_surface
+       ! Gallium merges depthstencil and rendertarget views into pipe_surface
        - lack of render-to-buffer support
        + Gallium supports using 3D texture zslices as a depth/stencil buffer (in theory)
 
@@ -179,7 +173,7 @@ CreateElementLayout -> create_vertex_elements_state
        ! D3D11 has an extra flag (InputSlotClass) that is the same as instance_divisor == 0
 
 CreateGeometryShader -> create_gs_state
-CreateGeometryShaderWithStreamOutput -> create_gs_state
+CreateGeometryShaderWithStreamOutput -> create_gs_state + create_stream_output_state
 CreatePixelShader -> create_fs_state
 CreateVertexShader -> create_vs_state
        > bytecode is different (see D3d10tokenizedprogramformat.hpp)
@@ -189,16 +183,10 @@ CreateVertexShader -> create_vs_state
 CheckCounter
 CheckCounterInfo
 CreateQuery -> create_query
-       - Gallium only supports occlusion, primitives generated and primitives emitted queries
        ! D3D11 implements fences with "event" queries
-       * TIMESTAMP could be implemented as an additional fields for other queries: some cards have hardware support for exactly this
-       * OCCLUSIONPREDICATE is required for the OpenGL v2 occlusion query functionality
        * others are performance counters, we may want them but they are not critical
 
 CreateRasterizerState
-       - Gallium lacks clamping of polygon offset depth biases
-       - Gallium lacks support to disable depth clipping
-       - Gallium lacks multisampling
        + Gallium, like OpenGL, supports PIPE_POLYGON_MODE_POINT
        + Gallium, like OpenGL, supports per-face polygon fill modes
        + Gallium, like OpenGL, supports culling everything
@@ -223,15 +211,11 @@ CreateResource -> texture_create or buffer_create
        # Note that hardware often has the implicit rule, so the D3D11 interface seems to make little sense
        # Also, the D3D11 API does not allow the user to specify mipmap sizes, so this really seems a dubious decision on Microsoft's part
        - D3D11 supports specifying initial data to write in the resource
-       - Gallium lacks support for stream output buffer usage
        - Gallium does not support unordered access buffers
        ! D3D11 specifies mapping flags (i.e. read/write/discard);:it's unclear what they are used for here
        - D3D11 supports odd things in the D3D10_DDI_RESOURCE_MISC_FLAG enum (D3D10_DDI_RESOURCE_MISC_DISCARD_ON_PRESENT, D3D11_DDI_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, D3D11_DDI_RESOURCE_MISC_BUFFER_STRUCTURED)
        - Gallium does not support indirect draw call parameter buffers
-       - Gallium lacks multisampling
-       - Gallium lacks array textures
        ! D3D11 supports specifying hardware modes and other stuff here for scanout resources
-       + Gallium allows specifying minimum buffer alignment
        ! D3D11 implements cube maps as 2D array textures
 
 CreateSampler
@@ -241,8 +225,6 @@ CreateSampler
        + Gallium supports setting min/max/mip filters and anisotropy independently
 
 CreateShaderResourceView (extended in D3D10.1) -> create_sampler_view
-       - Gallium lacks sampler views over buffers
-       - Gallium lacks texture arrays, and cube map views over texture arrays
        + Gallium supports specifying a swizzle
        ! D3D11 implements "cube views" as views into a 2D array texture
 
@@ -276,32 +258,27 @@ Dispatch (D3D11 only)
 DispatchIndirect (D3D11 only)
        - Gallium does not support compute shaders
 
-Draw -> draw_arrays
+Draw -> draw_vbo
        ! D3D11 sets primitive modes separately with IaSetTopology: it's not obvious which is better
 
-DrawAuto
-       - Gallium lacks stream out and DrawAuto
+DrawAuto -> draw_auto
 
-DrawIndexed -> draw_elements
+DrawIndexed -> draw_vbo
        ! D3D11 sets primitive modes separately with IaSetTopology: it's not obvious which is better
-       * may want to add a separate set_index_buffer
-       - Gallium lacks base vertex for indexed draw calls
-       + D3D11 lacks draw_range_elements functionality, which is required for OpenGL
+       + D3D11 lacks explicit range, which is required for OpenGL
 
-DrawIndexedInstanced -> draw_elements_instanced
+DrawIndexedInstanced -> draw_vbo
        ! D3D11 sets primitive modes separately with IaSetTopology: it's not obvious which is better
-       * may want to add a separate set_index_buffer
-       - Gallium lacks base vertex for indexed draw calls
 
-DrawIndexedInstancedIndirect (D3D11 only) -> call draw_elements_instanced multiple times in software
-       # this allows to use an hardware buffer to specify the parameters for multiple draw_elements_instanced calls
+DrawIndexedInstancedIndirect (D3D11 only)
+       # this allows to use an hardware buffer to specify the parameters for multiple draw_vbo calls
        - Gallium does not support draw call parameter buffers and indirect draw
 
-DrawInstanced -> draw_arrays_instanced
+DrawInstanced -> draw_vbo
        ! D3D11 sets primitive modes separately with IaSetTopology: it's not obvious which is better
 
-DrawInstancedIndirect (D3D11 only) -> call draw_arrays_instanced multiple times in software
-       # this allows to use an hardware buffer to specify the parameters for multiple draw_arrays_instanced calls
+DrawInstancedIndirect (D3D11 only)
+       # this allows to use an hardware buffer to specify the parameters for multiple draw_vbo calls
        - Gallium does not support draw call parameter buffers and indirect draws
 
 DsSetConstantBuffers (D3D11 only)
@@ -312,7 +289,7 @@ DsSetShaderWithIfaces (D3D11 only)
        - Gallium does not support domain shaders
 
 Flush -> flush
-       ! Gallium supports fencing and several kinds of flushing here, D3D11 just has a dumb glFlush-like function
+       ! Gallium supports fencing, D3D11 just has a dumb glFlush-like function
 
 GenMips
        - Gallium lacks a mipmap generation interface, and does this manually with the 3D engine
@@ -338,10 +315,9 @@ HsSetShaderResources (D3D11 only)
 HsSetShaderWithIfaces (D3D11 only)
        - Gallium does not support hull shaders
 
-IaSetIndexBuffer
-       ! Gallium passes this to the draw_elements or draw_elements_instanced calls
+IaSetIndexBuffer -> set_index_buffer
        + Gallium supports 8-bit indices
-       ! the D3D11 interface allows index-size-unaligned byte offsets into index buffers; it's not clear whether they actually work
+       # the D3D11 interface allows index-size-unaligned byte offsets into the index buffer; most drivers will abort with an assertion
 
 IaSetInputLayout -> bind_vertex_elements_state
 
@@ -352,7 +328,6 @@ IaSetTopology
        + Gallium supports line loops, triangle fans, quads, quad strips and polygons
 
 IaSetVertexBuffers -> set_vertex_buffers
-       + Gallium allows to specify a max_index here
        - Gallium only allows setting all vertex buffers at once, while D3D11 supports setting a subset
 
 OpenResource -> texture_from_handle
@@ -368,7 +343,7 @@ PsSetShader -> bind_fs_state
 PsSetShaderWithIfaces (D3D11 only)
        - Gallium does not support shader interfaces
 
-PsSetShaderResources -> set_fragment_sampler_views
+PsSetShaderResources -> set_sampler_views
        * may want to allow binding subsets instead of all at once
 
 QueryBegin -> begin_query
@@ -400,18 +375,16 @@ ResourceCopy
 ResourceCopyRegion
 ResourceConvert (D3D10.1+ only)
 ResourceConvertRegion (D3D10.1+ only)
-       -> surface_copy
-       - Gallium does not support hardware buffer copies
-       - Gallium does not support copying 3D texture subregions in a single call
+       -> resource_copy_region
 
-ResourceIsStagingBusy -> is_texture_referenced, is_buffer_referenced
-       - Gallium does not support checking reference for a whole texture, but only a specific surface
+ResourceIsStagingBusy ->
+       - Gallium lacks this
+       + Gallium can use fences
 
 ResourceReadAfterWriteHazard
-       ! Gallium specifies hides this, except for the render and texture caches
+       - Gallium lacks this
 
-ResourceResolveSubresource
-       - Gallium does not support multisample sample resolution
+ResourceResolveSubresource -> blit
 
 ResourceMap
 ResourceUnmap
@@ -424,7 +397,6 @@ DynamicResourceMapDiscard
 DynamicResourceUnmap
 StagingResourceMap
 StagingResourceUnmap
-       -> buffer_map / buffer_unmap
        -> transfer functions
        ! Gallium and D3D have different semantics for transfers
        * D3D separates vertex/index buffers from constant buffers
@@ -433,9 +405,8 @@ StagingResourceUnmap
 ResourceUpdateSubresourceUP -> transfer functionality, transfer_inline_write in gallium-resources
 DefaultConstantBufferUpdateSubresourceUP -> transfer functionality, transfer_inline_write in gallium-resources
 
-SetBlendState -> bind_blend_state and set_blend_color
-       ! D3D11 fuses bind_blend_state and set_blend_color in a single function
-       - Gallium lacks the sample mask
+SetBlendState -> bind_blend_state, set_blend_color and set_sample_mask
+       ! D3D11 fuses bind_blend_state, set_blend_color and set_sample_mask in a single function
 
 SetDepthStencilState -> bind_depth_stencil_alpha_state and set_stencil_ref
        ! D3D11 fuses bind_depth_stencil_alpha_state and set_stencil_ref in a single function
@@ -455,8 +426,7 @@ SetRenderTargets (extended in D3D11) -> set_framebuffer_state
        - Gallium does not support unordered access views
        - Gallium does not support geometry shader selection of texture array image / 3D texture zslice
 
-SetResourceMinLOD (D3D11 only)
-       - Gallium does not support min lod directly on textures
+SetResourceMinLOD (D3D11 only) -> pipe_sampler_view::tex::first_level
 
 SetScissorRects
        - Gallium lacks support for multiple geometry-shader-selectable scissor rectangles D3D11 has
@@ -471,11 +441,11 @@ SetVertexPipelineOutput (D3D10.1+ only)
 SetViewports
        - Gallium lacks support for multiple geometry-shader-selectable viewports D3D11 has
 
-ShaderResourceViewReadAfterWriteHazard -> flush(PIPE_FLUSH_RENDER_CACHE)
-       - Gallium does not support specifying this per-render-target/view
+ShaderResourceViewReadAfterWriteHazard
+       - Gallium lacks support for this
+       + Gallium has texture_barrier
 
-SoSetTargets
-       - Gallium does not support stream out
+SoSetTargets -> set_stream_output_buffers
 
 VsSetConstantBuffers -> for(i = StartBuffer; i < NumBuffers; ++i) set_constant_buffer(PIPE_SHADER_VERTEX, i, phBuffers[i])
        * may want to split into fragment/vertex-specific versions
@@ -488,5 +458,5 @@ VsSetShader -> bind_vs_state
 VsSetShaderWithIfaces (D3D11 only)
        - Gallium does not support shader interfaces
 
-VsSetShaderResources  -> set_fragment_sampler_views
+VsSetShaderResources  -> set_sampler_views
        * may want to allow binding subsets instead of all at once