-
Notifications
You must be signed in to change notification settings - Fork 542
Vulkan Compatibility #1610
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Milestone
Comments
Merged
bors bot
added a commit
that referenced
this issue
Oct 31, 2017
1620: Pipeline deriving r=kvark a=msiglreith - Add support for deriving pipelines from other pipelines as supported in Vulkan. - Additional pipeline flag (ie disable optimizations) - Refactor pipeline descriptors a bit for compute and graphics Only HAL and Vulkan implemented so far, others require a few adjustment due to the new API. cc #1610
4 tasks
bors bot
added a commit
that referenced
this issue
Dec 9, 2018
2499: Add queue family resource ownership transfer to memory barriers for Vulkan r=msiglreith a=termhn ~~This is untested so far because I am not currently at a computer with Vulkan to test on... seems simple enough though.~~ Related to #1610, #1498 cc @omni-viral PR checklist: - [ ] `make` succeeds (on *nix) - [ ] `make reftests` succeeds - [x] tested examples with the following backends: vulkan, dx12, (no changes for metal) - [ ] `rustfmt` run on changed code Co-authored-by: Gray Olson <[email protected]>
6 tasks
bors bot
added a commit
that referenced
this issue
Mar 3, 2021
3521: Sparse (tiled) resources for Vulkan and DirectX 12 r=kvark a=deprilula28 Progress in implementing sparse resources, listed on issue #1610 This PR adds the following: - A `bind_sparse` method in CommandQueue based on `submit`. - A Vulkan implementation for `bind_sparse`, making a [vkQueueBindSparse](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueBindSparse.html) call. - A DirectX12 implementation for `bind_sparse` for images, creating a virtual resource with [CreateReservedResource](https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-createreservedresource) if unbound and mapping it to memory with [UpdateTileMappings](https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12commandqueue-updatetilemappings). - `SPARSE_BINDING`, `SPARSE_RESIDENCY` and `SPARSE_ALIASED` view capabilities when creating images. Also sets the texture layout to `D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE` when creating images on DX12. - A `sparselybound` feature on the `quad` example which binds the logo texture using `bind_sparse` instead of `bind_image_memory`. Remaining additions: - [ ] DirectX 11 implementation. - [ ] Buffer and opaque textures in the DirectX 12 implementation. - [ ] Setting sparse flags in buffer resources. (This will have to be a breaking change or a different buffer create method) PR checklist: - [x] `make` succeeds (on *nix) - [x] `make reftests` succeeds - [x] tested examples with the following backends: Vulkan, DirectX 12, DirectX 11 Co-authored-by: deprilula28 <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Meta issue about the current missing features of gfx-rs compared to Vulkan (Core) API:
Physical Device Physical Device Information #1671:
Adapter limits and features (easy): Adapter features #1553
Expose all limits from Vulkan and improve implementation for other backends.
Adapter Info (easy):
Add missing fields from
PhysicalDeviceInfo
Physical device limits (med) Allow device information acquisition on physical devices #1682:
Move
Limits
fromDevice
intoAdapterInfo
following Vulkan.Depending on adapter limits implementation.
OpenGL only exposes single adapter so we can just create a context here, depending on Place of GL backend in the new low-level world #1539 (comment)
DX12 might require temporarily create and destroy device again.
Queue families (easy):
Add missing queue family properties (timestampValidBits, minImageTransferGranularity)
minImageTransferGranularity arbitrary for transfer (0, 0, 0) for whole mipmaps
(1, 1, 1) for Compute or Graphics -> compute shader required for DX12 (metal?)
Support queue priorities (easy) hal: Custom queue priorities #1618
Support more formats (easy?) Refactor formats and tweak buffer-image copies #1700
Query supported formats for device (easy-med) Physical Device Information #1671
Might depend a bit on how other physical device/device queries are implemented
Command Buffers
Secondary command buffers (hard):
Expose buffer level Reusable and Secondary command buffers #1712
Inheritance info on buffer begin
cmd_execute_commands Reusable and Secondary command buffers #1712
Buffer usage flags: Reusable and Secondary command buffers #1712
OneTimeSubmit (Easy)
Simultaneous usage (Hard?)
RenderPassContinue (Easy)
Blit command (hard)
Requires emulation via shaders
Synchronization
(Memory barriers (hard)) [ll] Memory Barriers portability #1498
Difficult for global memory barriers due to RESOURCE_STATES not changing, issue?
Queue ownership transfer
Query fence status (Easy?) [hal][Vulkan][Metal][Empty] Add get_fence_status method to Device trait #1635
Events Add Events API and implement for Vulkan backend #2806
Subpass self-dependencies (med)
Queue wait idle (med) Add wait_idle #1773
Renderpass
Renderpass image resolves (med)
Renderpass implicit subpass dependencies:
Depends on global memory barriers (hard)
Query render area granularity (easy?) Query optimal renderpass area #1558
Lacks a bit of information on this topic
Might require a bit of research in kind of exposed values on different devices (discrete, integrated, tilers)
Pipeline
Geometry/Tessellation support (hard)
Early fragment test (med) HLSL: Support early_fragment_tests attribute KhronosGroup/SPIRV-Cross#337
Pipeline caches (hard)
Pipeline derives (med) Pipeline deriving #1620
Pipeline specialization constants (hard) Specialization constants #1634
Might require SPIR-V inspection and SPIRV-Cross support
Disable pipeline optimization (easy) Pipeline deriving #1620
Graphics pipeline dynamic states (med) Dynamic Pipeline States #1567
Concurrent pipeline bind points (hard) d3d12: Refactor pipeline layouts to match Vulkan's compatibility rules. #1632
Allow to handle graphics and compute bind points independently.
Hard on DX12 which will overwrite pipeline bind points.
Evaluate performance overhead/implications.
Multisampling (hard) Multisampling support #1542
Memory
Host memory allocator (hard):
Allow registration of custom memory allocators
Host memory access (hard) dx12/vk: Implement vulkan based memory mapping #1718
Vulkan allows persistent mapping of whole buffers and no nested mapping.
Flush and invalidation for visibility for non-coherent memory types.
Doesn't map very well to DX12 and Metal, need to find consensus by on Vulkan Portability TSG
Lazily allocated memory (easy?) Transient textures. #1390
Only supported on Vulkan (?), others can just not expose it.
Add function to query memory commitment
Resource sharing (hard)
Resources
Compatible image view formats (med)
DX12 has some restrictions on the supported image view formats to be compatible.
Requires consensus by VkPortability TSG
(Component swizzling?)
Sampler states (easy-med) Support Min/Mag filter for samplers #1404
Check all sampler configuration fields
Add missing descriptor types (hard)
Dynamic descriptors and Combined image-samplers
Push Constants (med) Push constants! #1622 [RFC] Push constants in D3D12 #1625
Query pools and commands (med-hard) (In progess @msiglreith) [RFC] Query resolve #1638 Query operations #1640
Sparse resources (hard)
Slightly unrelated
Optimization for rust orientated libs and possibly gpuweb
Allows more fine granular pipeline barriers
The text was updated successfully, but these errors were encountered: