Commit Graph

77 Commits (2d66ec775b024d27d37af196e87c4db8f416309b)

Author SHA1 Message Date
TheSpydog 05900bee14 Shader cross-compiler (#34)
continuous-integration/drone/push Build is passing Details
This PR adds a shader cross-compiler program (written in C#) that uses glslc and spirv-cross to compile GLSL source files to a custom, Refresh-specific shader blob format that contains shader code for various backends.

The goal is that whenever you want to compile your shaders, you just run this program (either via `refreshc` or `dotnet run`), passing in the path to the GLSL source file. You can specify which backends you want to support via flags (`--vulkan`, for instance), and it will generate a .refresh blob file for Refresh to consume.

This can also be extended via C# defines and the `partial class` system. An example is the PS5 shader implementation, whose logic is squirreled away in the NDA'd repository but can be called in sequence with the rest of the shader cross-compile logic. This way, we don't have to run two separate programs to compile our shaders to all supported platforms.

Refresh handles all the parsing of the file format in Refresh_CreateShaderModule, so individual backends do not need to concern themselves with the particulars.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: #34
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-20 23:19:12 +00:00
TheSpydog f7250ab12a Remove fixed command buffers + minor cleanup (#33)
continuous-integration/drone/push Build is passing Details
Removes the `fixed` parameter from AcquireCommandBuffer, and removes a couple other unused bools from the VulkanCommandBuffer struct.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: #33
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-14 18:03:58 +00:00
TheSpydog 297f234957 Miscellaneous API changes + more MSAA fixes (#26)
continuous-integration/drone/push Build is passing Details
**Breaking API Changes**
* Removed `REFRESH_SAMPLECOUNT_16/32/64`, since hardware support for these sample counts is generally poor (and completely non-existent with MoltenVK and certain consoles).
* Removed unused `sampleCount` parameter from `Refresh_TextureCreateInfo`.
* Removed `sampleCount` parameter from `Refresh_ColorAttachmentDescription`. The existence of this parameter meant you had to sync up three different sample count values (render pass, pipeline, and color attachment description) whenever you wanted to use multisampling. However, Vulkan requires that all color attachments in a given pipeline _must_ match the pipeline's sample count anyway, so we can assume all color attachments will use the pipeline's sample count.
* Removed the `renderArea` parameter from `Refresh_BeginRenderPass()` since it didn't serve much practical purpose and slightly complicated things on the MoonWorks managed side.

**Behavior Changes**
* When creating a render pass or graphics pipeline, the requested multisample count will be converted into a sample count that's actually supported by the GPU. For example, if you request 8x MSAA on a device that only supports up to 4x MSAA, it will silently fall back to 4x MSAA.
* All color attachments are now forced to have an internal store op of `STORE`, even if `REFRESH_STORE_OP_DONTCARE` is specified. The one exception is internal multisample textures -- if `DONTCARE` is used, those textures will be discarded to save on bandwidth. (Their resolve textures will still be stored.)
* The RenderPass hashing logic was updated so that it would still work correctly with the removal of `Refresh_ColorAttachmentDescription.sampleCount`.

**Bug Fixes**
* Fixed bugs where multisampling logic wasn't kicking in for certain sample counts due to incorrect enum comparisons.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: #26
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-11-08 19:09:21 +00:00
cosmonaut fabd31448b fix backend iteration when backend is not compiled 2022-10-04 10:15:16 -07:00
cosmonaut 1a0beea402 Backend selection + swapchain API revision (#23)
continuous-integration/drone/push Build is passing Details
- The application must now call `Refresh_SetBackend` before creating the device
- `Refresh_SetBackend` can set a preferred backend, but will fall back if it is not available
- Device creation no longer takes presentation parameters
- Windows must now be explicitly claimed by the device
- Windows can be unclaimed by the device
- Windows can have their swapchain present mode changed after creation

Reviewed-on: #23
2022-09-29 21:11:25 +00:00
cosmonaut 5b27f600de add DrawPrimitivesIndirect + fix sync issues
continuous-integration/drone/push Build is passing Details
2022-08-25 12:21:49 -07:00
TheSpydog d4693a9093 Prep for PS5Driver (#19)
continuous-integration/drone/push Build is passing Details
This PR contains the general changes needed for the PS5 driver (being developed separately, outside this repository).

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: #19
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-08-14 20:45:24 +00:00
cosmonaut 3820d458fe remove Clear and add pWidth and pHeight to AcquireSwapchainTexture
continuous-integration/drone/push Build is passing Details
2022-03-10 10:21:49 -08:00
cosmonaut 2731d47419 rename viewport and scissor set functions
continuous-integration/drone/push Build is passing Details
2022-03-04 12:47:36 -08:00
cosmonaut f6b96fe34b viewport and scissor ABI break
continuous-integration/drone/push Build is failing Details
2022-03-04 12:30:33 -08:00
cosmonaut 5fe4c8dbf3 remove command buffer from QueueDestroy calls
continuous-integration/drone/push Build is passing Details
2022-03-03 17:07:07 -08:00
cosmonaut 057a48e96f separate shader types
continuous-integration/drone/push Build is passing Details
2022-03-02 11:22:52 -08:00
cosmonaut cb99489b3c Rework Presentation Flow (#15)
continuous-integration/drone/push Build is passing Details
Removes `Refresh_RenderTarget`, `Refresh_CreateRenderTarget` and `Refresh_QueueDestroyRenderTarget`. Render targets are now managed by the implementation.

Adds `REFRESH_TEXTUREFORMAT_B8G8R8A8`.

Adds `Refresh_AcquireSwapchainTexture`. Returns a swapchain texture for the requested window.

Removes `Refresh_QueuePresent`. It is now assumed that the texture returned by `Refresh_AcquireSwapchainTexture` will be presented. This texture can be manipulated like any other texture.

Adds `Refresh_GetSwapchainFormat`. Returns the swapchain format for the requested window.

Reviewed-on: #15
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-03-02 06:33:57 +00:00
cosmonaut 517399f5d9 convert all spaces to tabs
continuous-integration/drone/push Build is passing Details
2022-02-25 13:42:11 -08:00
cosmonaut a531fb8593 Render Pass API Streamlining (#14)
continuous-integration/drone/push Build is passing Details
Removes `Refresh_RenderPass` and `Refresh_Framebuffer` objects.

`Refresh_BeginRenderPass` now takes a set of `Refresh_ColorAttachmentInfo` structs and an optional `Refresh_DepthStencilAttachmentInfo` struct that describe the render pass. The render pass and framebuffer objects are now managed by the implementation instead of the application.

Accordingly, `Refresh_GraphicsPipelineCreateInfo` now takes a `Refresh_GraphicsPipelineAttachmentInfo` struct that describes render passes that may be used with the pipeline. It is an error to bind a pipeline during an incompatible render pass.

Reviewed-on: #14
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-02-24 22:01:37 +00:00
cosmonaut 0319c26f6a Submission rewrite (#13)
continuous-integration/drone/push Build is passing Details
Rework submission flow to reduce waiting and improve the resource cleanup process.

This patch also gets rid of descriptor set caching.
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-02-23 00:49:45 +00:00
cosmonaut 829356d927 Revise swapchain management + remove external
continuous-integration/drone/push Build is passing Details
2022-02-08 17:16:11 -08:00
cosmonaut 34e4b4f576 SetBufferData rework (#6)
continuous-integration/drone/push Build is passing Details
Buffer uploads now require a command buffer, like textures do. Additionally it is now regarded as an error to upload data in the middle of a render pass.

Reviewed-on: #6
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-01-13 23:08:08 +00:00
cosmonaut 0e05ed6b34 Buffer and Submission Rework (#1)
continuous-integration/drone/push Build is passing Details
We used to have monolithic uniform buffers on the VulkanRenderer object, but this was inefficient in the case of threaded usage.

Now, we have a pool of uniform buffers. A uniform buffer is selected from the pool when a pipeline is bound. The uniform buffers are rotated upon presentation.

Now pushing uniforms is now a concern of the command buffer instead of the pipeline. The pipeline should just always have been a static object anyway.

Additionally, we now do extra buffer record-keeping so that buffer data can be updated after a bind/draw.

Fence submission has also been restructured so that submissions don't cause unnecessary blocks. Now we assign one fence per submission, and we don't wait for fences until it's time to present.

Reviewed-on: #1
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-01-12 22:41:10 +00:00
cosmonaut 78c5d54bf1 revise SetTextureData to take a command buffer
continuous-integration/drone/push Build is passing Details
2021-11-14 20:36:26 -08:00
cosmonaut b6a09517c2 change clear color type
continuous-integration/drone/push Build is passing Details
2021-02-09 22:51:49 -08:00
cosmonaut 8f1cdf190f change shader uniform push to take pipelines instead of command buffers
continuous-integration/drone/push Build is passing Details
2021-02-05 19:59:29 -08:00
cosmonaut 7f3e89315e uniform API update
continuous-integration/drone/push Build is passing Details
2021-02-02 16:37:01 -08:00
cosmonaut 4699c158f3 calculate texture length internally + fix rename
continuous-integration/drone/push Build is passing Details
2021-01-31 21:17:27 -08:00
cosmonaut 76c845cbb4 rename PushShaderParams to PushShaderUniforms
continuous-integration/drone/push Build is passing Details
2021-01-31 19:37:16 -08:00
cosmonaut 68d9a74ff4 change renderArea to a pointer
continuous-integration/drone/push Build is passing Details
2021-01-26 20:27:42 -08:00
cosmonaut 316e662f44 remove distinction between color target and depth target
continuous-integration/drone/push Build is passing Details
2021-01-26 18:57:46 -08:00
cosmonaut fe03f1739a change Clear definition to make more sense
continuous-integration/drone/push Build is passing Details
2021-01-22 14:16:02 -08:00
cosmonaut 56f4c3c2c4 texture creation uses one function + Refresh_TextureCreateInfo 2021-01-14 01:52:45 -08:00
cosmonaut b25daa5198 remove unused parameters from draw calls 2021-01-13 21:04:53 -08:00
cosmonaut bf91de783f Vulkan: persisent map buffers 2021-01-13 18:02:45 -08:00
thatcosmonaut b12b785dbe
External Interop (#14) 2021-01-13 17:37:54 -08:00
cosmonaut 4b6f17054c rename AddDispose to QueueDestroy 2021-01-05 17:02:36 -08:00
cosmonaut d3d9c9ad55 rename Set_Samplers to Bind_Samplers 2021-01-05 17:00:06 -08:00
cosmonaut 4ca101099d uncapitalize REFRESH in API calls 2021-01-05 15:05:16 -08:00
cosmonaut 5a92fdf984 move count param on REFRESH_Submit 2021-01-03 14:57:46 -08:00
cosmonaut 788c63f3ac rename SURFACEFORMAT to COLORFORMAT 2021-01-03 14:53:12 -08:00
thatcosmonaut b4dee16f80
Texture API Refactor (#9) 2021-01-03 14:37:02 -08:00
cosmonaut e82bce10dc texture copy API 2021-01-03 14:00:43 -08:00
cosmonaut 087a60fa52 add wait API call 2021-01-03 14:00:43 -08:00
cosmonaut 540c0985b7 proper texture staging + fix buffer dispose api 2021-01-03 14:00:43 -08:00
cosmonaut f8c99c4e18 make gets and sets async 2021-01-03 14:00:43 -08:00
cosmonaut e0ff380989 implement transfer queue 2021-01-03 14:00:43 -08:00
cosmonaut c818e332e7 started exposing command buffers 2021-01-03 14:00:43 -08:00
cosmonaut 5b3fa07790 more compute implementation 2020-12-30 23:07:59 -08:00
cosmonaut 5bddb9faab add compute related functions to API 2020-12-30 23:07:59 -08:00
cosmonaut dc92a1e274 started implementing compute structure 2020-12-30 23:07:59 -08:00
cosmonaut d6cd3715cb implement texture getters 2020-12-28 23:41:59 -08:00
cosmonaut cea9b853a4 implement Clear 2020-12-28 22:19:46 -08:00
cosmonaut 2548833525 update API to allow batchable shader params 2020-12-28 19:32:49 -08:00