Commit Graph

258 Commits (f91c18e85c1e191df9fddd8bb45168cbfe3eb833)

Author SHA1 Message Date
Caleb Cornett f91c18e85c Fixed uniform offsets, removed a bunch of code from cdefines.h 2023-11-05 19:20:37 -06:00
Caleb Cornett ff0f30a986 Uniform buffer infrastructure, still missing offset support 2023-11-05 14:17:23 -06:00
Caleb Cornett bf4b640937 Fix texture conversion array 2023-10-26 23:03:05 -05:00
Caleb Cornett 01aff2e5f1 Fix command buffer memory leak 2023-10-26 21:39:15 -05:00
Caleb Cornett 3966614681 CreateTexture, SetTextureData, BindIndexBuffer, BindFragmentSamplers, QueueDestroyTexture, DrawIndexedPrimitives, DrawInstancedPrimitives 2023-10-26 21:25:03 -05:00
Caleb Cornett 21c5ded803 Fix redundant error code printing 2023-10-26 20:37:27 -05:00
Caleb Cornett 5ba865489b QueueDestroySampler 2023-10-12 22:12:55 -05:00
Caleb Cornett 595c15a087 Add a border color conversion function 2023-10-12 22:11:55 -05:00
Caleb Cornett 50730bd52d CreateSampler 2023-10-12 22:07:46 -05:00
Caleb Cornett e3748391fe CreateBuffer, QueueDestroyBuffer, SetBufferData, BindVertexBuffers 2023-10-12 21:31:04 -05:00
Caleb Cornett 5c6d32e21a Initial work on DestroyDevice 2023-10-12 08:42:32 -05:00
Caleb Cornett 0555023100 Implement SetViewport and SetScissor 2023-10-12 08:18:53 -05:00
Caleb Cornett 3c22699dbb Style cleanups + added FIXME note for shader compilation 2023-10-12 08:18:39 -05:00
Caleb Cornett e17f86724a DrawPrimitives, BindGraphicsPipeline, misc cleanup 2023-10-10 21:45:32 -05:00
Caleb Cornett c327c3547a Implement CreateShaderModule 2023-10-10 21:32:12 -05:00
Caleb Cornett e7b2542bc0 Pipeline creation copied over from old work + shaderc update 2023-10-10 21:27:36 -05:00
Caleb Cornett e48941eb48 Fix for command pool crash, fix for hanging on Wait 2023-10-08 16:16:11 -05:00
Caleb Cornett 4fecc829bf Reworked Wait and Submit logic to use D3D11 Query objects as fences 2023-10-08 16:05:33 -05:00
Caleb Cornett ff41afb04a Stub out D3D11_Wait, fix crash when unclaiming windows, fix backend order 2023-10-08 15:14:43 -05:00
Caleb Cornett cb467c7b1a UnclaimWindow, swapchain destruction, fixed template signature 2023-10-08 15:14:43 -05:00
Caleb Cornett d5a3438547 Implemented BeginRenderPass and Submit, ClearScreen works now! 2023-10-08 15:14:43 -05:00
Caleb Cornett 287d3a7a6e More swapchain setup 2023-10-08 15:14:43 -05:00
Caleb Cornett 433c70eb8c Apply swapchainDesc fix from FNA3D, add cdefines.h to CMakeLists 2023-10-08 15:14:43 -05:00
Caleb Cornett 8c98889f46 Implemented AcquireCommandBuffer (from old D3D11 work) 2023-10-08 15:14:43 -05:00
Caleb Cornett 0e5da8a2ea Implement ClaimWindow, mostly copied from Vulkan and FNA3D D3D11 2023-10-08 15:14:43 -05:00
Caleb Cornett 8b999aca93 Remove old stuff, flesh out PrepareDriver 2023-10-08 15:14:43 -05:00
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
TheSpydog a15e26b124 Update Driver Template + Window Crash Fix (#46)
Some minor stuff that's cropped up from the D3D11 work so far. This PR updates the Driver_Template with the latest API, and also fixes a crash in the Vulkan driver -- if you acquired a swapchain texture from a window that had been destroyed, there was no null check before de-referencing the WindowData.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#46
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-09-30 17:50:48 +00:00
cosmonaut a3949528eb Fence API (#45)
Reviewed-on: MoonsideGames/Refresh#45
2023-09-19 06:11:20 +00:00
cosmonaut c978df6275 remove unused variables 2023-07-31 16:12:20 -07:00
cosmonaut de42163673 rework Vulkan device selection and initialization 2023-07-31 16:06:47 -07:00
cosmonaut c3a5d9f417 enable independentBlend feature 2023-06-16 15:00:47 -07:00
cosmonaut 5a2b07097a SetTextureDataYUV rework (#44)
Reviewed-on: MoonsideGames/Refresh#44
2023-06-07 20:59:55 +00:00
cosmonaut 1f9f7e0939 Memory Management Rewrite (#41)
Various changes to reduce and optimize memory usage.

- Defragmenter
- Allocate 4 16MB transfer buffers for pool
- If transfer is larger than 16MB, create temporary transfer buffer
- Fixed some issues with CopyTextureToTexture

Reviewed-on: MoonsideGames/Refresh#41
2023-05-18 23:43:11 +00:00
cosmonaut 0f29bf03e9 Remove qoi.h 2023-04-18 23:43:23 -07:00
cosmonaut 74909b49c3 Redesign image API to be format agnostic (#40) 2023-04-19 06:42:44 +00: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 153c3c3c60 add missing texture formats to size function 2023-02-27 09:54:26 -08:00
cosmonaut decddae384 Fix MultipleThreads error on command buffer reset 2023-02-14 12:26:39 -08:00
TheSpydog 1f2aaeed9f add msaa support for depth textures (#38)
Depth textures handle MSAA differently than color textures do, because there's no need for a resolve texture. This means the root VulkanTexture can have the sample count instead of needing an additional `msaaTex`.

This changeset also fixes a bug where the depth buffer wasn't getting cleared if there were MSAA color attachments.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#38
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-31 20:30:05 +00: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 89ba9c52ff vulkan: Fix framebuffer creation with mip levels (#36)
Before this change, framebuffers were created based on the attachments' full dimensions, instead of the dimensions of the requested mip level. This fixes validation errors in the RenderTextureMipmaps test program.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#36
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-24 00:15:02 +00:00
TheSpydog e3ab5fadf8 vulkan: Fix 3D texture creation (#35)
The image type getting passed to imageCreateInfo was always VK_IMAGE_TYPE_2D, even for 3D textures. This fixes that bug, allowing Vulkan to successfully create 3D textures.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#35
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2023-01-24 00:13:23 +00:00
TheSpydog 05900bee14 Shader cross-compiler (#34)
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: MoonsideGames/Refresh#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)
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 903192cb4c Descriptor validation fix (#32)
The validator layer was complaining about us updating bound descriptor sets, this is technically a bug in the validator layer but resetting the command buffer in Cleanup makes more sense anyway. Also changed the wait for timeout call to a fence status query to make it easier to understand.

Reviewed-on: MoonsideGames/Refresh#32
2023-01-11 02:41:30 +00:00
cosmonaut 4cdd6a497a Fix transfer buffer alignment (#31)
Reviewed-on: MoonsideGames/Refresh#31
2023-01-07 05:24:58 +00: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