Commit Graph

154 Commits (5c6d32e21acdd82e38c9e617ceb99397a3a8184c)

Author SHA1 Message Date
Caleb Cornett 2498e2d7c4 Groundwork for D3D11. Yoinked most of this from the prior work, but updated the ABI 2023-10-08 15:13:08 -05:00
cosmonaut 172fa83417 1.15.0 2023-09-18 23:12:01 -07:00
cosmonaut a3949528eb Fence API (#45)
Reviewed-on: MoonsideGames/Refresh#45
2023-09-19 06:11:20 +00:00
cosmonaut f55968814f 1.14.1 2023-07-31 16:14:53 -07:00
cosmonaut 9631dc9f83 1.14.0 2023-06-07 14:13:21 -07:00
cosmonaut 5a2b07097a SetTextureDataYUV rework (#44)
Reviewed-on: MoonsideGames/Refresh#44
2023-06-07 20:59:55 +00:00
cosmonaut 4df0459b04 1.13.0 2023-04-18 23:43:59 -07:00
cosmonaut 74909b49c3 Redesign image API to be format agnostic (#40) 2023-04-19 06:42:44 +00:00
cosmonaut 3f5fe1ff67 1.12.0 2023-04-03 17:15:14 -07:00
cosmonaut 3fc743ce28 Add support for QOI format and reading images from memory (#39)
Reviewed-on: MoonsideGames/Refresh#39
2023-04-04 00:14:20 +00:00
cosmonaut 2d66ec775b 1.11.0 2023-02-07 12:26:46 -08:00
TheSpydog 6439516835 ABI break: Textures now have a sample count, not render passes (#37)
This change makes Refresh behave more like FNA and other rendering APIs, where user-side textures have a sample count instead of generating MSAA RTs on the fly.

This should theoretically reduce memory consumption since subresource views no longer generate their own MSAA textures. Instead, each texture with a sample count > 1 now has a reference to an MSAA texture baked into the root texture itself, so views can just reference that.

This also simplifies VulkanRenderTarget significantly, to the point where it's just a wrapper around VkImageView. We could probably remove the abstraction entirely at this point.

Since VkRenderPass objects still require knowing the sample count, we can use the first bound texture's sample count. This means users only have to specify sample count in two places -- the graphics pipeline, and the texture. Easy enough.

I also noticed and fixed a bug with clear values with MSAA levels > 1.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#37
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-30 18:22:16 +00:00
TheSpydog f7250ab12a Remove fixed command buffers + minor cleanup (#33)
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: MoonsideGames/Refresh#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
cosmonaut 28b4253fdf 1.10.0 2023-01-04 11:18:37 -08:00
TheSpydog e4215efe5e Enable multiDrawIndirect feature, add indirect command struct (#30)
Fixes a validation error when attempting to draw multiple primitives via an indirect draw call. Adds some documentation for how indirect draw buffers should be set up.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#30
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-04 18:44:02 +00:00
Caleb Cornett 329ffab6b8 Remove SRC1 blend factors and depthClampEnable flag 2022-12-28 19:10:59 -08:00
Caleb Cornett 15b35fccfe update documentation + remove validation + misc cleanup 2022-12-28 19:08:08 -08:00
cosmonaut 59f9eeed36 1.9.0 2022-11-09 12:04:01 -08:00
TheSpydog 297f234957 Miscellaneous API changes + more MSAA fixes (#26)
**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: MoonsideGames/Refresh#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 5166ae87b2 1.8.2 2022-11-01 16:26:27 -07:00
cosmonaut 403dcc6084 1.8.1 2022-10-04 10:15:26 -07:00
cosmonaut 9aaead40a3 1.8.0 2022-09-29 14:13:08 -07:00
cosmonaut 1a0beea402 Backend selection + swapchain API revision (#23)
- 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: MoonsideGames/Refresh#23
2022-09-29 21:11:25 +00:00
cosmonaut 5176f790d8 1.7.1 2022-09-22 14:01:48 -07:00
cosmonaut 8f0ba8ffb2 1.7.0 2022-09-13 13:55:25 -07:00
cosmonaut f49c0ab190 Texture format rework (#21)
- Adds number format information to the texture format names
- Adds several unsigned integer texture formats

Reviewed-on: MoonsideGames/Refresh#21
2022-09-13 20:51:41 +00:00
cosmonaut 764de140cc 1.6.1 2022-08-25 16:21:45 -07:00
cosmonaut 83a59d7685 1.6.0 2022-08-25 13:51:54 -07:00
cosmonaut 5b27f600de add DrawPrimitivesIndirect + fix sync issues 2022-08-25 12:21:49 -07:00
cosmonaut 3007b4c989 1.5.0 2022-05-11 21:18:54 -07:00
cosmonaut 163adfb5cd add BC7 support 2022-05-11 21:16:24 -07:00
cosmonaut f0b970496e vertex format changes 2022-03-17 14:41:16 -07:00
cosmonaut 38d14fd99d 1.4.0 2022-03-14 10:54:32 -07:00
cosmonaut 4bba0f99f9 remove lineWidth from RasterizerState 2022-03-14 10:43:01 -07:00
cosmonaut acefc530fd 1.3.0 2022-03-10 10:28:00 -08:00
cosmonaut 3820d458fe remove Clear and add pWidth and pHeight to AcquireSwapchainTexture 2022-03-10 10:21:49 -08:00
cosmonaut 0380a96817 Swapchain resize fixes (#18)
Fixes various errors related to the swapchain being recreated.

Additionally, `BeginRenderPass` now allows a NULL `renderArea` parameter. If NULL, Refresh will select a sensible default render area.
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-03-07 06:31:39 +00:00
cosmonaut 22236607f7 1.2.1 2022-03-04 13:39:31 -08:00
cosmonaut 7b91c5a140 1.2.0 2022-03-04 13:18:58 -08:00
cosmonaut 2731d47419 rename viewport and scissor set functions 2022-03-04 12:47:36 -08:00
cosmonaut f6b96fe34b viewport and scissor ABI break 2022-03-04 12:30:33 -08:00
cosmonaut 9422d4975f 1.1.0 2022-03-03 17:32:21 -08:00
cosmonaut 435f56f6b7 move API defines to the top 2022-03-03 17:31:33 -08:00
cosmonaut 5fe4c8dbf3 remove command buffer from QueueDestroy calls 2022-03-03 17:07:07 -08:00
cosmonaut 67e3a8799c 1.0.0 2022-03-02 15:55:56 -08:00
cosmonaut ee50c04428 remove interop structs 2022-03-02 15:49:40 -08:00
cosmonaut 9eae69f96b remove unused enum 2022-03-02 11:46:41 -08:00
cosmonaut 057a48e96f separate shader types 2022-03-02 11:22:52 -08:00
cosmonaut 61e83cfba8 D3D compatibility ABI break 2022-03-02 11:10:28 -08:00
cosmonaut cb99489b3c Rework Presentation Flow (#15)
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: MoonsideGames/Refresh#15
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
2022-03-02 06:33:57 +00:00