State of the art "build your own engine" kit powered by gfx-hal

Overview

Build Status Crates.io docs page MIT/Apache Lines of Code

A rendering engine based on gfx-hal, which mimics the Vulkan API.

Building

This library requires standard build tools for the target platforms, except in the case of windows - the spirv-compiler feature requires Ninja to be installed for compilation. https://ninja-build.org

Features

Most importantly rendy features safer API by checking important states and invariants. It checks invariants statically using marker types and dynamically with stored values.

Capability

Queue family capability defines what operation queues of the family supports. rendy provides simple mechanisms to prevent recording unsupported commands. A queue's capability level can be stored statically by marking the Family type with one of capability types: Transfer, Graphics, Compute or General (Graphics and Compute combined). Alternatively the Capability type can be used instead of the marker type, this way actual capability level can be checked dynamically.

Command buffer

rendy provides a handy wrapper named CommandBuffer. In contrast to its raw counterpart this wrapper encodes crucial information about its state directly into the type. This means users can't accidentally:

  • record commands unsupported by queue family it belongs to.
  • record commands when a command buffer is not in recording state.
  • record render pass commands outside renderpass.
  • forget to finish recording a buffer before submitting.
  • resubmit a command buffer which was created for one time use.
  • record execution of a primary buffer into a secondary buffer.
  • etc

Memory manager

rendy's memory manager is called Heaps. Heaps provides convenient methods to sub-allocate device-visible memory based on usage and visibility requirements. It also handles mapping for specific usage types. It is possible for gfx-hal to adopt VMA. In which case rendy will use it

Rendergraph

rendy's rendergraph allows writing rendering code in simple modular style. Note that this is not a scene graph offered by high-level graphics libraries, where nodes in the graph correspond to complex objects in the world. Instead it is a graph of render passes with different properties. This makes it much easier to compose a complex frame from simple parts. A user defines nodes which declare which buffers and images it reads and writes and the rendergraph takes responsibility for transient resource allocation and execution synchronization. The user is responsible only for intra-node synchronization.

DynNode implementation - RenderPassNode can be constructed from RenderGroups collected into subpasses. RenderPassNode will do all work for render pass creating and inter-subpass synchronization. There will be more Node, DynNode and RenderGroup implementations to further simplify usage and reduce boilerplate code required for various use cases.

Cirques

This hybrid of circus and queue simplifies synchronizing host access to resources. Cirque allocates copies of the resource from resource specific allocator (e.g. CommandPool for CommandBuffers, Factory for Buffers) and gives access to the unused copy.

CPU-GPU data flow

Rendy can help to send data between device and host. The Factory type can upload data to the device local memory choosing most appropriate technique for that.

  • Memory mapping will be used if device local memory happens to be cpu-visible.
  • Relatively small data will be uploaded directly to buffers.
  • Staging buffer will be used for bigger uploads or any image uploads. Factory will automatically insert synchronization commands according to user request.

GPU-CPU data flow - Not yet implemented

Data driven pipelines - WIP

We think it is possible in many common cases to feed GPU with data in semi-automatic mode. rendy::graph::node::render::RenderGroup implementation will use spirv-reflect (or similar crate) to read layout information directly from shaders and use it to automatically populate descriptors and set index/vertex buffers based on registered data encoders and provided scene instance. Current WIP implementation will use specs::World as scene to render.

Declarative pipelines - Planned

Pipelines and descriptor sets has declarative nature and it is much easier to define them declaratively. rendy provides a trait for this called DescriptorSet. Deriving it will automatically generate code necessary for set creation, writing and binding. Deriving the GraphicsPipeline trait will generate code for graphics pipeline creation and usage. A similar ComputePipeline trait exists for compute pipelines.

Example

#[derive(DescriptorSet)]
struct Example {
    /// This field will be associated with binding 1 of type `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER`.
    /// Actual `Buffer` will be allocated and kept updated by `Set<Example>`.
    #[descriptor(UniformBlock)]
    transform: mat4,

    /// This field will be associated with binding 2 of type `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE`.
    /// `ImageView` will be fetched from `Texture` which implements `Borrow<ImageView>`.
    #[descriptor(SampledImage)]
    texture: Texture,

    /// Raw `gfx-hal` objects can be used as well.
    /// But this field will make binding `Set<Example>` to a command buffer an unsafe operation
    /// since it is the user's job to ensure that this raw image view is valid during command buffer execution.
    #[descriptor(unsafe, SampledImage)]
    foo: RawImageView,
}

Modularity

Most of the features provided by rendy can be used independently from each other This helps to keep API clean and hopefully sound. The top-level umbrella crate rendy has features for each subcrate so that they could be enabled separately (enabling a subcrate will also enable its dependencies).

Changelog

Who is using it?

Kindly open a PR or issue if you're aware of other projects using rendy.

License

Licensed under either of

at your option.

Comments
  • Optimize build times

    Optimize build times

    Removing failure and derivative should be a solid step in this direction. See https://github.com/gfx-rs/gfx/pull/2970 and also https://github.com/amethyst/rendy/pull/198

    enhancement help wanted 
    opened by kvark 24
  • Backend of rendy

    Backend of rendy

    This issue shall discuss which backend(s) rendy is going to use.

    Discussion so far:

    @kvark

    What's the reasoning behind "Abandon hal for now."?


    @omni-viral

    @kvark without reinventing the wheel (abstraction layer over ash and hal) I'm way more productive.

    Instead of providing own abstractions I believe it is better to implement ash::DeviceV* etc traits for hal. I heard that someone already suggesting to do so (or even started). Then to work over hal rendy would only need to parametrize Factory type.


    @Moxinilian

    To the reader: please note that "dropping hal" does not mean that hal will not have anything to do with rendy. Viral is focusing on ash right now as it is closer to Vulkan so easier to use for him, but when all of this is done rendy is made in such a way that it will be "easy" to implement the hal backend. It's just to not have to implement two backends at once.


    @kvark

    @Moxinilian thank you for clarification. I don't see the story the same way. gfx-hal is already pretty much Vulkan, just a bit rustier (borrowing, move semantics, and references instead of pointers and opaque handles). You could just have used gfx-hal and have access to all platforms, while benefiting gfx-rs community with your feedback.

    Truth is that @omni-viral found gfx-hal inconvenient for their needs, hence the departure. I don't see it temporary. The expressed solution (in #12 (comment)) is basically - solve it on the Ash level, so that Amethyst wouldn't care about gfx-rs APIs.

    Tight Ash (and Vulkano) integration is certainly one of our goals, but it's not going to be the most performant path at the end of the day, so we'd like Rust projects which really need performance (like Amethyst and WebRender) to work with gfx-hal directly.


    @Moxinilian

    There is enough motivation within the Amethyst team to make sure hal will be supported by rendy, most notably in the perspective of WebGL (and eventually WebGPU). From what has been discussed on Discord, it seems like first class hal is planned in the future.

    If I misunderstood, then this is going to be a much larger issue considering Amethyst's next step after mobile support will be web technologies, in which gfx-hal would help in a significant way.


    @kvark

    @Moxinilian FYI, this is a very poor communication on the Amethyst side. Your team discussed something on discord (which we don't even have any visibility into, since we use Gitter) and decided to drop gfx-hal without any heads up to our team, without even bothering to explain this in PR description... We hope that in the future, if there is any news of that scale, we'd know about it from you.


    @Moxinilian

    Yes, I agree. If I recall correctly, an issue is being written to be posted on the gfx issue tracker regarding the reasons for such a decision. I still believe that supporting hal from the ground up would have been better, but I am not involved enough in rendering to have a meaningful opinion.


    @Moxinilian

    We handled this very poorly, and apologize to the entire gfx-hal team. It was inexcusable, and we will take steps internally to ensure it doesn't happen again. We would like to re-open a dialog on this with the gfx-hal team, if they are ok with it.


    @omni-viral

    @kvark Sorry I didn't explained in detail why I abandoned hal in this PR. I also sad for that I didn't state my opinion clearly in gfx-rs/gfx#2206 :sob:

    Correct me if I'm wrong. As I understand it the main idea of hal API to stay is that it is rustier and reduces boxing overhead over non-Vulkan backends. But I also see calling overhead in hal's API for Vulkan backend which you underestimate (I think). Hence I'd really like to see ash's API implemented for hal's backends (notably metal backend which is awesome :+1:).

    Sorry. It's hard for me to express sophisticated stuff in language I barely know. It took me 15 minutes to write this comment :sweat_smile:


    Also pinging:

    • @msiglreith
    • @maikklein
    • @grovesNL
    • @magnonellie
    • @anderejd

    (please ignore if you're not interested)

    • EDIT 1: add forgotten comments
    opened by torkleyy 21
  • Add dyn RenderGroup API to subpass builder

    Add dyn RenderGroup API to subpass builder

    This change allows explicitly passing boxed rendergroups to the pass. This doesn't add any cost, as concrete types were translated to boxes anyway. This is required for easier implementation of ergonomic-friendly abstraction over rendergarph builder.

    Additionaly fixed error reporting problems that I ran into when working on that.

    opened by Frizi 15
  • Update shaderc version to 0.6

    Update shaderc version to 0.6

    This update enables shaderc to choose either shared or static versions of the SPIRV-Tools, depending on what is installed on the system.

    This is a minor update because Python2 is no longer supported (relevant commit).

    opened by barskern 13
  • fix potentially unsound Factory::drop

    fix potentially unsound Factory::drop

    As far as I know calling dispose requires unique access on a device. This is guaranteed by calling device.wait_idle(). As we previously discarded the result of this call, it may have silently failed. This allowed us to cause UB by disposing currently used resources later on.

    I am currently not that knowledgeable about both vulkan and rendy, so please correct me if anything I said was wrong.

    opened by lcnr 11
  • Don't panic when freeing resources if already panicking.

    Don't panic when freeing resources if already panicking.

    When using rendy in a test application, and the application panics, sometimes there are resources that are still held when DynamicAllocator::dispose(self) is called, causing an illegal instruction (segfault) on Windows.

    This PR prevents a double panic, though I don't understand rendy enough to tell how to free up the resources before the allocator.

    opened by azriel91 11
  • Add `premultiply_alpha` option to `ImageTextureConfig`

    Add `premultiply_alpha` option to `ImageTextureConfig`

    Adds an option to have the loader premultiply image alpha when loading. This is desirable in most cases (http://www.adriancourreges.com/blog/2017/05/09/beware-of-transparent-pixels/), however, is left off by default because it could be unexpected default behavior.

    This is technically a breaking change, however the number of users that would actually be affected by this is tiny (those using ImageTextureConfig without Default), so it's possibly worth just putting in a patch release.

    opened by fu5ha 11
  • Update Rendy Descriptor For Latest Hal?

    Update Rendy Descriptor For Latest Hal?

    I have absolutely no idea what I'm doing, but I was just messing around trying to get wgpu-rs to compile with OpenGL support and this got in the way because it seems it is not up-to-date with the latest gfx-hal.

    Is this correct or is there a better way to do this? If I'm way off this may not be worth your time and you can feel free to close this. :slightly_smiling_face:

    Related: https://github.com/gfx-rs/wgpu/issues/450

    Edit: I'll squash the commits before merging if this looks good.

    opened by zicklag 10
  • [Q] How to enable a rendering backend for project?

    [Q] How to enable a rendering backend for project?

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: No enabled backends among:  vulkan  dx12  metal  gl', src\libcore\result.rs:1165:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
    error: process didn't exit successfully: `target\debug\vox.exe` (exit code: 101)
    
    opened by trsh 10
  • Revert PR #197 and re-implement to fix incorrect buffer writes

    Revert PR #197 and re-implement to fix incorrect buffer writes

    #197 unintentionally allowed for incorrectly writing Vec types when collected and submitted. This was discussed in the PR and actually seen, where a crash was mentioned, but it was incorrectly assumed to be an upstream problem. The change in #197 caused upload_* functions to accept a plain Vec as &T can AsRef a Vec, which was then cast incorrectly to a u8 and submitted.

    This was only evident in the quads example because it is the only example which actually provides a Vec type (from a Vec::collect call) for a buffer upload.

    This PR reverts #197 and changes the fix for #58 to the original concept of just bounding T: 'static + Copy, instead of changing from &[T] to &T. As discussed in #197, this will have problems with large arrays being submitted - but we can just ignore that, as its unrealistic; it is better to correctly accept Vec types for large arrays, instead of compensating for large static slices which will almost never exist.

    opened by jaynus 10
  • Fix another rendy-memory assert

    Fix another rendy-memory assert

    I hit another very similar looking assert. Please be aware that I don't properly understand this and I just cargo-culted your library so that my program works. :P

    I also changed blocks from a u32 to a u64, because it looks like high_bit is supposed to get shifted all the way. But this didn't affect my program either way.

    Also also, it looks like there are even more similar asserts lying around :eyes: But I have no idea if they are correct or not.

    opened by rukai 10
  • Update image requirement from 0.22.0 to 0.24.5

    Update image requirement from 0.22.0 to 0.24.5

    Updates the requirements on image to permit the latest version.

    Changelog

    Sourced from image's changelog.

    Version 0.24.5

    Structural changes:

    • Increased the minimum supported Rust version (MSRV) to 1.61.
    • Increased the version requirement for the tiff crate to 0.8.0.
    • Increased the version requirement for the jpeg crate to 0.3.0.

    Bug fixes:

    • The as_rgb32f function of DynamicImage is now correctly documented.
    • Fixed a crash when decoding ICO images. Added a regression test.
    • Fixed a panic when transforming webp images. Added a regression test.
    • Added a check to prevent integer overflow when calculating file size for BMP images. The missing check could panic in debug mode or else set an incorrect file size in release mode.
    • Upgraded the PNG image encoder to use the newer PngEncoder::write_image instead of the deprecated PngEncoder::encode which did not account for byte order and could result in images with incorrect colors.
    • Fixed InsufficientMemory error when trying to decode a PNG image.
    • Fix warnings and CI issues.
    • Typos and links in the documentation have been corrected.

    Performance:

    • Added check for dynamic image dimensions before resizing. This improves performance in cases where the image does not need to be resized or has already been resized.

    Version 0.24.4

    New Features:

    • Encoding for webp is now available with the native library. This needs to be activate explicitly with the web-encoder feature.
    • exr decoding has gained basic limit support.

    Bug fixes:

    • The Iterator::size_hint implementation of pixel iterators has been fixed to return the current length indicated by its ExactSizeIterator hint.
    • Typos and bad references in the documentation have been removed.

    Performance:

    • ImageBuffer::get_pixel{,_mut} is now marked inline.
    • resize now short-circuits when image dimensions are unchanged.

    Version 0.24.3

    New Features:

    • TiffDecoder now supports setting resource limits.

    Bug fixes:

    • Fix compile issues on little endian systems.
    • Various panics discovered by fuzzing.

    ... (truncated)

    Commits
    • aa1e81e Changes and release notes for 0.24.5
    • 88aadcb Merge pull request #1821 from micahsnyder/bump-jpeg-dependency
    • dffefce Bump the 'jpeg' version requirement to 0.3.0
    • bf0a96b Merge pull request #1812 from fintelia/png-with-limits
    • a7026e9 Merge pull request #1817 from Flashover89/Check-dimensions-for-dyn-image-befo...
    • 392798c Fix white spacing
    • 2be3d17 Merge branch 'image-rs:master' into Check-dimensions-for-dyn-image-before-res...
    • 4681225 Fix review findings
    • 1361f4a Add PngDecoder::with_limits
    • 1878c88 Merge pull request #1815 from fintelia/fix-ci
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Bump actions/checkout from 2 to 3.1.0

    Bump actions/checkout from 2 to 3.1.0

    Bumps actions/checkout from 2 to 3.1.0.

    Release notes

    Sourced from actions/checkout's releases.

    v3.1.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v3.0.2...v3.1.0

    v3.0.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v3...v3.0.2

    v3.0.1

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    v3.1.0

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Update palette requirement from 0.4 to 0.6

    Update palette requirement from 0.4 to 0.6

    Updates the requirements on palette to permit the latest version.

    Changelog

    Sourced from palette's changelog.

    Version 0.6.0 - 2021-07-12

    • #235[235]: Upgrade phf to 0.9 and enable named_from_str for no_std.
    • #200[200]: Add Oklab support. Closes #222[222].
    • #231[231]: Update approx and find-crate dependencies.
    • #229[229]: Implement bytemuck::Zeroable and bytemuck::Pod for every color type.
    • #225[225]: Add Hsluv support. Closes #112[112].
    • #223[223]: Add Lchuv support.
    • #221[221]: Add CIE Luv support.
    • #217[217]: Implement relative and absolute methods for Lighten/Darken, Saturate. Closes #215[215].
    • #216[216]: Add doc alias, doc cleanups, remove trait from Packed struct.
    • #211[211]: Implement PartialEq/Eq for all colorspaces, Alpha, PreAlpha, and LabHue/RgbHue. Closes #206[206].
    • #210[210]: Rename Limited trait to Clamp. Closes #209[209].
    • #205[205]: Generalizing gradients and add constant gradients. Closes #62[62].
    • #190[190]: Convert documentation to intra doc links, add default whitepoint for Lab/Lch, make code fixups. Closes #177[177].
    • #189[189]: Correct scaling on random distribution of Lab/Lch.
    • #188[188]: Allow HSV, HSL and HWB to represent nonlinear RGB. Closes #160[160], #187[187].
    • #184[184]: Optimize into_component for float_to_uint, u8 to f32/f64.
    • #183[183]: Optimize matrix functions, color conversion performance.
    • #176[176]: Rewrite the conversion traits to work more like From and Into. Closes #41[41], #111[111].
    • #175[175]: Add feature "random" for random color generation using rand crate. Closes #174[174].
    • #173[173]: Add functions to get min/max component values for all color types, alpha.
    • #170[170]: Add {into,from}_u32 methods for RGB/A, Packed struct for u32 representations of RGBA. Closes #144[144].
    • #164[164]: Implement WCAG contrast ratio calculations.
    • #162[162]: Implement CIEDE2000 color difference for Lab/Lch. Closes #143[143].
    • #161[161]: Split the Component trait into more specific traits.
    • #157[157]: Implement FromStr method for Rgb<S, u8>. Closes #148[148].
    • #158[158]: Make Take iterator for gradient inclusive of both end colors, add tests.
    • #154[154]: Add DoubleEndedIterator impl for gradient::Take. Closes #153[153].
    • #137[137]: Add some missing From impls between Srgb and LinSrgb types.

    Version 0.5.0 - 2019-11-17

    • #149[149]: Use libm through num_traits, and update all dependencies.
    • #142[142]: Make libm optional. Closes #116[116].
    • #138[138]: Fix no_std build failure.
    • #136[136]: Update dependencies and remove --release flag from feature tests.
    • #135[135]: Round to nearest instead of down when converting components to integers.
    • #127[127]: fix no_std. Closes #125[125].
    • #124[124]: Update approx dependency to 0.3.
    • #119[119]: Remove the color enum. Closes #72[72].
    • #118[118]: Implement assign ops. Closes #94[94].
    • #110[110]: No std support. Closes #108[108].
    • #106[106]: Add Extended Conversion Trait.
    • #104[104]: Update image and approx crate dependency. Closes #101[101], #100[100].

    Version 0.4.1 - 2018-08-02

    • #113[113]: Import everything from the parent scope in derives.

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Update gfx-hal requirement from 0.5 to 0.9

    Update gfx-hal requirement from 0.5 to 0.9

    Updates the requirements on gfx-hal to permit the latest version.

    Changelog

    Sourced from gfx-hal's changelog.

    hal-0.9.0 (18-06-2021)

    • This is the final crates-published release of gfx-hal. gfx-hal development was mainly driven by wgpu which has now switched to its own GPU abstraction: wgpu-hal. As such, gfx-hal will be in maintence mode until the story of gfx-portability is figured out. Read more about the transition in #3768.
    • MTL: Prevent accessing NSView on other threads.
    • Fix panics when android apps reopen.
    • Support dynamic array sizes on metal.
    • Added backend agnostic RenderDoc captures.
    • Allow initialization of gfx objects from raw handles.
    • Add missing features to the dx12 backend that are needed by wgpu.
    • Made PhysicalDevice::enabled_extensions public.
    • Added the ability to import formeign memory
    • GLES: Deferred deleting shaders until after linking
    • GLES: Fix texture views
    • GLES: Fix nearest neighbor filtering.
    • Assorted: Documentation fixes

    backend-metal-0.8.2 (08-05-2021)

    • fix linking to QuartzCore

    hal-0.8.0 (29-04-2021)

    • Naga is the required and preferred shader translation path in Metal and OpenGL
    • enabling SPIRV-Cross is optional behind cross feature API:
      • all backends can create shader modules from naga::Module
      • sampler reduction modes (min/max samplers)
      • image view creation requires image::Usage to be specified
      • timestamp period query is moved to the Queue
      • DescriptorLimits is added to consolidate descriptor-related limits and its fields changed from usize to u32
      • Limits and Capabilities structures merged together as PhysicalDeviceProperties
      • Entries for Mesh Shading and Descriptor Indexing added to PhysicalDeviceProperties
      • buffer descriptor indexing
      • sparse memory binding
      • blend color is renamed to blend constants
      • debug capture API for interfacing with XCode/RenderDoc/PIX
      • better shader and pipeline creation errors
    • Infrastructure:
      • the new "bench" example is added
    • Metal backend:
      • pipeline cache support with binary archives
      • profiling integration
      • immutable sampler support on Naga path
      • improve window resizing, expose "present with transaction" option

    hal-0.7.0 (30-01-2021)

    • Borrow and ExactSizeIterator bounds are removed from the iterators
    • error improvements:
      • use thiserror for errors
      • variants and a few names are refactored
    • API external synchronization constraints now match Vulkan, &mut changes affected the following parameters:
      • event in Device::set_event and Device::reset_event
      • fence in Device::reset_fences and Queue::submit

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Update gfx-backend-empty requirement from 0.5 to 0.9

    Update gfx-backend-empty requirement from 0.5 to 0.9

    Updates the requirements on gfx-backend-empty to permit the latest version.

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Update gfx-backend-dx12 requirement from 0.5 to 0.9

    Update gfx-backend-dx12 requirement from 0.5 to 0.9

    Updates the requirements on gfx-backend-dx12 to permit the latest version.

    Changelog

    Sourced from gfx-backend-dx12's changelog.

    hal-0.9.0 (18-06-2021)

    • This is the final crates-published release of gfx-hal. gfx-hal development was mainly driven by wgpu which has now switched to its own GPU abstraction: wgpu-hal. As such, gfx-hal will be in maintence mode until the story of gfx-portability is figured out. Read more about the transition in #3768.
    • MTL: Prevent accessing NSView on other threads.
    • Fix panics when android apps reopen.
    • Support dynamic array sizes on metal.
    • Added backend agnostic RenderDoc captures.
    • Allow initialization of gfx objects from raw handles.
    • Add missing features to the dx12 backend that are needed by wgpu.
    • Made PhysicalDevice::enabled_extensions public.
    • Added the ability to import formeign memory
    • GLES: Deferred deleting shaders until after linking
    • GLES: Fix texture views
    • GLES: Fix nearest neighbor filtering.
    • Assorted: Documentation fixes

    backend-metal-0.8.2 (08-05-2021)

    • fix linking to QuartzCore

    hal-0.8.0 (29-04-2021)

    • Naga is the required and preferred shader translation path in Metal and OpenGL
    • enabling SPIRV-Cross is optional behind cross feature API:
      • all backends can create shader modules from naga::Module
      • sampler reduction modes (min/max samplers)
      • image view creation requires image::Usage to be specified
      • timestamp period query is moved to the Queue
      • DescriptorLimits is added to consolidate descriptor-related limits and its fields changed from usize to u32
      • Limits and Capabilities structures merged together as PhysicalDeviceProperties
      • Entries for Mesh Shading and Descriptor Indexing added to PhysicalDeviceProperties
      • buffer descriptor indexing
      • sparse memory binding
      • blend color is renamed to blend constants
      • debug capture API for interfacing with XCode/RenderDoc/PIX
      • better shader and pipeline creation errors
    • Infrastructure:
      • the new "bench" example is added
    • Metal backend:
      • pipeline cache support with binary archives
      • profiling integration
      • immutable sampler support on Naga path
      • improve window resizing, expose "present with transaction" option

    hal-0.7.0 (30-01-2021)

    • Borrow and ExactSizeIterator bounds are removed from the iterators
    • error improvements:
      • use thiserror for errors
      • variants and a few names are refactored
    • API external synchronization constraints now match Vulkan, &mut changes affected the following parameters:
      • event in Device::set_event and Device::reset_event
      • fence in Device::reset_fences and Queue::submit

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
Releases(v0.4.1)
Owner
Amethyst Foundation
Non-Profit with focus on Rust and the Game Dev ecosystem.
Amethyst Foundation
Guide for using gfx-rs's wgpu library.

Introduction What is wgpu? Wgpu is a Rust implementation of the WebGPU API spec. WebGPU is a specification published by the GPU for the Web Community

sotrh 1k Dec 29, 2022
Transform your terminal into an art canvas where you can draw stuff!

Termdraw Turn your terminal into the drawing cavnas of your dream... or not! Installation To install this dream-come-true of a tool simply run cargo i

Enoki 5 Nov 23, 2022
🪄 Shader art using webgpu

✨ Shader art using webgpu ✨ This is the implementation of An introduction to Shader Art Coding in Rust using webgpu. ?? Setup You need: Rust compiler

BADR 7 Aug 29, 2023
State machine engine

orga Deterministic state machine engine written in Rust Orga is a stack for building blockchain applications powered by Tendermint consensus. Status:

Nomic 103 Dec 21, 2022
A framework for saving and loading game state in Bevy.

Bevy_save A framework for saving and loading game state in Bevy. Features bevy_save is primarily built around extension traits to Bevy's World. Serial

Hank Jordan 10 Jan 24, 2023
Minimalistic state machine for Bevy Game Engine.

??️ Moonshine Behavior Minimalistic state machine for Bevy game engine. Overview This crates is designed to provide a simple, stack-based, lightweight

null 3 May 4, 2023
A rollback library that buffers component state. Useful for netcode.

bevy_timewarp Buffer and rollback to states up to a few frames ago, for rollback networking. Doesn't do any networking, just concerned with buffering

Richard Jones 7 Sep 4, 2023
This is a Minecraft Classic server written in Rust powered by tokio and classicl.

classicl_server Introduction This is a Minecraft Classic server written in Rust powered by tokio and classicl. Installation Cargo The project can be i

null 3 Nov 3, 2022
Native WebGPU implementation based on gfx-hal

This is an active GitHub mirror of the WebGPU implementation in Rust, which now lives in "gfx/wgpu" of Mozilla-central. Issues and pull requests are a

Rust Graphics Mages 6.5k Jan 9, 2023
Freebsd-embedded-hal - Like linux-embedded-hal but FreeBSD

freebsd-embedded-hal Implementation of embedded-hal traits for FreeBSD devices: gpio: using libgpio, with stateful and toggleable support, with suppor

null 2 Oct 1, 2022
💥 Fast State-of-the-Art Tokenizers optimized for Research and Production

Provides an implementation of today's most used tokenizers, with a focus on performance and versatility. Main features: Train new vocabularies and tok

Hugging Face 6.2k Jan 2, 2023
💥 Fast State-of-the-Art Tokenizers optimized for Research and Production

Provides an implementation of today's most used tokenizers, with a focus on performance and versatility. Main features: Train new vocabularies and tok

Hugging Face 6.2k Jan 5, 2023
An attempt at implementing a state-of-the-art Voxel DAG in Rust

VDAG Introduction This is an attempt at implementing a state-of-the-art compressed voxel data structure, as described in a number of papers ([PDFs] Ka

SamCasavant 2 Aug 25, 2022
Fast state-of-the-art tokenizers for Ruby

Fast state-of-the-art tokenizers for Ruby

Andrew Kane 34 Dec 15, 2022
Alexander Mongus is a state-of-the-art filter to sneak amogus characters in pictures

A. Mongus Go to: http://www.lortex.org/amogu/ ??? This is a client-side, Webassembly-based filter to hide amongus characters in your images. Example:

Lucas Pluvinage 3 Apr 16, 2022
Proof-of-concept of getting OpenXR rendering support for Bevy game engine using gfx-rs abstractions

Introduction Proof-of-concept of getting OpenXR rendering support for Bevy game engine using gfx-rs abstractions. (hand interaction with boxes missing

Mika 52 Nov 14, 2022
Guide for using gfx-rs's wgpu library.

Introduction What is wgpu? Wgpu is a Rust implementation of the WebGPU API spec. WebGPU is a specification published by the GPU for the Web Community

sotrh 1k Dec 29, 2022
Rustato: A powerful, thread-safe global state management library for Rust applications, offering type-safe, reactive state handling with an easy-to-use macro-based API.

Rustato State Manager A generical thread-safe global state manager for Rust Introduction • Features • Installation • Usage • Advanced Usage • Api Refe

BiteCraft 8 Sep 16, 2024
A Software Development Kit (SDK) for Zero-Knowledge Transactions

Aleo SDK The Aleo SDK is a developer framework to make it simple to create a new account, craft a transaction, and broadcast it to the network. Table

Aleo 270 Jan 5, 2023
Kit-kat clock utility rewritten in Rust using minifb

kitkat clock in Rust This is the plan9 cat clock utility rewritten in rust with minifb crate. $ kitkat --help Usage: kitkat [--hook|--crazy|--offset O

Manos Pitsidianakis 18 Oct 19, 2022