Giter VIP home page Giter VIP logo

cpf's Introduction

  • Develop: Build Status
  • Master : Build status

Very early multithreaded D3D12/Vulkan/Metal system. Threading is fairly solid, but lots of work to be done.

Requirements:

CMake 2.8 +

Visual Studio 2015 +

Some external dependencies: See Readme.txt under External/Source

A binary external distributable will be auto built at a later time.

cpf's People

Contributors

all8up avatar telanor avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

tezheng

cpf's Issues

Create a graphics utility library.

Create a utility library which encapsulates common bits of needed graphics utilities. The general contents will wrap up index/vertex buffer creation and texture creation/load as synchronous helpers.

Clean up image views.

Current image views are created in different manners. There is embedded code to create standard image views versus depth image views, this should all be in the image view initializer itself.

Add a thread local like ability to scheduler.

The current register solution is not particularly good. The registers are shared by all clients of the scheduler and that makes it easy to goof things up. Instead, allow the clients to register the items they want in a style similar to thread locals done by the Os (not the compiler version), so GetTLS/SetTLS style.

Separate ib/vb/cb from views.

Various buffer types need separated views instead of the current merged version. The higher level rendering systems can wrap that up later.

Consider renaming iResource to iBuffer.

Given the usage patterns, iBuffer as a base to everything would probably make more sense across the backend API's. Even with D3D12 you still discuss it as upload/readback 'buffers' though they are called resources by the API.

Decide where the clear values live.

Currently there are clear values in both the images when setup and in the render passes, decide on one or the other and figure out how to support it.

Build hashing into graphics objects.

iResourceBinding
iShader
iPipeline

Should have hash functions for compilation, materials and other items.

This should likely be done along with and extension to the IDL which attaches meta data to interfaces. I.e. in the IDL hashing would be added as:
[hash]
interface thing {...}

Plugin initialization unification.

Plugins go through different setup paths if they are directly linked versus dynamically loaded. The system needs a unifying wrapper such that the end consumer of the plugin does not need to know the difference.

Flatten the multicore interfaces.

Currently there are some outlines of possible directions to take in describing the multicore stages in the experimental d3d12 application. Decide on the best solution and implement it.

Remove the count from iFence.

Vulkan has no concept of a count on fences and this is a D3D12 only thing. Downside of this is needing multiple fences to go with various buffers but it really is not a horrible issue.

Plugin build issue.

Occasionally builds will fail due to plugin copies which happen before or during build of the plugin. Need a solution to get the dependencies resolved prior to the copy.

Create the IPlugin dll for C#.

The iPlugin.dll for C# needs to exist as a standard dll. I would contain only the type information for the iPlugin type such that both the binding dll and multiple plugins share the same definition. Since the binding will load on application initialization and immediately use the iPlugin interface, plugins will share the correct type and things should work as intended.

CommandBuffer inheritance for D3D12.

In Vulkan certain bits of the pipeline are inherited from the renderpass in the primary command buffer to the secondary buffers. For instance, the render targets set in the renderpass are set in all of the secondary buffers. This is not happening in the d3d12 simulation of primary/secondary buffers. Oops...

The potential solution is to overload the begin function such that the secondary buffers can grab the render target settings from the pass setup. This would be ignored by the Vulkan driver.

IDL additions.

Need to add support for events. The support should be able to describe dispatch type (immediate or queued) threading expectations (runs on main thread or free threaded) and binding type (single handler or multiple).

Should probably support a property type so each language can support getter/setters in the best manner.

Move current D3D12 driver to plugin.

If the d3d12 driver continues moving forward it should be moved into a plugin so it can be developed at a different rate than the current plan of just using BGFX for the time being.

Remove BGFX.

While BGFX has some nice bits to it, the structure is unfortunately based on old DX11 and lower designs. The purpose of this project is to focus on Metal, Vulkan and D3D12 with heavy multi-threading which means multiple submission queues and fine grained interaction.

Change the build binary directory setup.

Currently the setup for output ends up causing debug/release/etc to be in paths fed to the application during build. This makes packaging difficult and needs to change. Likely the best approach would be to change the binary output directories such that the very first part of the path is the configuration and then the rest is under that.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.