X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdocs%2Fd3d11ddi.txt;h=14a589fffe284432ccfce412d72b70e07a6456bb;hb=8490d21cbe9cce4ceb5c1908b42672f5160fd013;hp=8f2509ce035ab4ad2f8e3806fd3752469ffb5ae1;hpb=b4a191e351ff1ac1cd27cd7e02d169958a78ca86;p=mesa.git diff --git a/src/gallium/docs/d3d11ddi.txt b/src/gallium/docs/d3d11ddi.txt index 8f2509ce035..14a589fffe2 100644 --- a/src/gallium/docs/d3d11ddi.txt +++ b/src/gallium/docs/d3d11ddi.txt @@ -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 @@ -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