Commit Graph

363 Commits (bb5752824216cc430265ea62210fb6d7189f2902)

Author SHA1 Message Date
Caleb Cornett 105ef1aebb Clean up fence logic 2024-03-02 23:11:36 -08:00
Caleb Cornett 155d01ed92 Uniform buffer binding rework for clarity + minor cleanup 2024-03-02 23:11:36 -08:00
Caleb Cornett 06f00c77a0 First pass at fence infrastructure 2024-03-02 23:11:36 -08:00
Caleb Cornett 297b8b2cd2 First rough draft of Compute functions (untested!) 2024-03-02 23:11:36 -08:00
Caleb Cornett f598b65be5 DrawPrimitivesIndirect 2024-03-02 23:11:36 -08:00
Caleb Cornett 60a0ecab92 BindVertexSamplers 2024-03-02 23:11:36 -08:00
Caleb Cornett 4d11afa422 Fix 3D texture SRV creation, use UpdateSubresource1 to avoid bug with non-zero offsets on deferred contexts 2024-03-02 23:11:36 -08:00
Caleb Cornett 5d069f006d Fix fragment uniform buffer block calculation 2024-03-02 23:11:36 -08:00
Caleb Cornett e7be43e835 Fix device level check, fix ID3D11Device memory leak 2024-03-02 23:11:36 -08:00
Caleb Cornett b712bda8a3 Set up the DXGI Info Queue so we can filter messages without using DirectX Control Panel 2024-03-02 23:11:36 -08:00
Caleb Cornett 5f3dd6ba8a Add DXGIDebug logic to help track memory leaks, fix SRV leak it discovered 2024-03-02 23:11:36 -08:00
Caleb Cornett db6ad7fb6a Minor style cleanup 2024-03-02 23:11:36 -08:00
Caleb Cornett 0108b26d31 Fix a couple minor memory leaks 2024-03-02 23:11:36 -08:00
Caleb Cornett ca29f3b7da Release DLLs after releasing D3D11/DXGI objects (and release dxgi.dll!) 2024-03-02 23:11:36 -08:00
Caleb Cornett c9f23dd73b Fix degenerate InputLayout creation when creating graphics pipeline with no vertex attributes 2024-03-02 23:11:36 -08:00
Caleb Cornett a3c8ab6a55 Fixed uniform offsets, removed a bunch of code from cdefines.h 2024-03-02 23:11:36 -08:00
Caleb Cornett eb956a2f8b Uniform buffer infrastructure, still missing offset support 2024-03-02 23:11:36 -08:00
Caleb Cornett cdad57d1dd Fix texture conversion array 2024-03-02 23:11:36 -08:00
Caleb Cornett ce3b222529 Fix command buffer memory leak 2024-03-02 23:11:36 -08:00
Caleb Cornett 6a1c4ba80f CreateTexture, SetTextureData, BindIndexBuffer, BindFragmentSamplers, QueueDestroyTexture, DrawIndexedPrimitives, DrawInstancedPrimitives 2024-03-02 23:11:36 -08:00
Caleb Cornett a7bbc51653 Fix redundant error code printing 2024-03-02 23:11:36 -08:00
Caleb Cornett ba842d855e QueueDestroySampler 2024-03-02 23:11:36 -08:00
Caleb Cornett b906ec9c69 Add a border color conversion function 2024-03-02 23:11:36 -08:00
Caleb Cornett 7f4ddde607 CreateSampler 2024-03-02 23:11:36 -08:00
Caleb Cornett 15a73854b6 CreateBuffer, QueueDestroyBuffer, SetBufferData, BindVertexBuffers 2024-03-02 23:11:36 -08:00
Caleb Cornett abfdb2c7d9 Initial work on DestroyDevice 2024-03-02 23:11:36 -08:00
Caleb Cornett d7290c5e2b Implement SetViewport and SetScissor 2024-03-02 23:11:36 -08:00
Caleb Cornett 740fb56aa1 Style cleanups + added FIXME note for shader compilation 2024-03-02 23:11:36 -08:00
Caleb Cornett 01cd001b07 DrawPrimitives, BindGraphicsPipeline, misc cleanup 2024-03-02 23:11:36 -08:00
Caleb Cornett dda7db1d92 Implement CreateShaderModule 2024-03-02 23:11:36 -08:00
Caleb Cornett f008408965 Pipeline creation copied over from old work + shaderc update 2024-03-02 23:11:36 -08:00
Caleb Cornett b74666a6d7 Fix for command pool crash, fix for hanging on Wait 2024-03-02 23:11:36 -08:00
Caleb Cornett acf64d51f0 Reworked Wait and Submit logic to use D3D11 Query objects as fences 2024-03-02 23:11:36 -08:00
Caleb Cornett acae35ebfa Stub out D3D11_Wait, fix crash when unclaiming windows, fix backend order 2024-03-02 23:11:36 -08:00
Caleb Cornett 0948537fe0 UnclaimWindow, swapchain destruction, fixed template signature 2024-03-02 23:11:36 -08:00
Caleb Cornett cbd8f4aee0 Implemented BeginRenderPass and Submit, ClearScreen works now! 2024-03-02 23:11:36 -08:00
Caleb Cornett dd9ae93696 More swapchain setup 2024-03-02 23:11:36 -08:00
Caleb Cornett 08ba467551 Apply swapchainDesc fix from FNA3D, add cdefines.h to CMakeLists 2024-03-02 23:11:36 -08:00
Caleb Cornett dd1060373d Implemented AcquireCommandBuffer (from old D3D11 work) 2024-03-02 23:11:36 -08:00
Caleb Cornett b9d7cec252 Implement ClaimWindow, mostly copied from Vulkan and FNA3D D3D11 2024-03-02 23:11:36 -08:00
Caleb Cornett 5385f02bbd Remove old stuff, flesh out PrepareDriver 2024-03-02 23:11:36 -08:00
Caleb Cornett d6378aba74 Groundwork for D3D11. Yoinked most of this from the prior work, but updated the ABI 2024-03-02 23:11:36 -08:00
cosmonaut 9d1059ed0e fix stencil state
continuous-integration/drone/push Build is passing Details
2024-03-02 23:11:07 -08:00
cosmonaut 02c0d85885 Resource containers, new bindings API, WriteOptions (#51)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #51
2024-03-02 09:09:49 +00:00
cosmonaut 695abd4139 alter vulkan defrag strategy
continuous-integration/drone/push Build is passing Details
2024-02-27 00:16:06 -08:00
cosmonaut 2361cec274 actually assign len in Refresh_Image_Info
continuous-integration/drone/push Build is passing Details
2024-02-25 01:44:19 -08:00
cosmonaut 899f961461 prefer host-local instead of require host-local
continuous-integration/drone/push Build is passing Details
2024-02-24 23:07:22 -08:00
cosmonaut 9d36ddaac1 Refresh2 Vulkan Implementation (#50)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #50
2024-02-23 23:46:02 +00:00
cosmonaut 4e1705d1bd specify buffer type in param name
continuous-integration/drone/push Build is failing Details
2024-02-23 09:50:48 -08:00
cosmonaut 2f57a05c85 rename CpuBuffer to TransferBuffer
continuous-integration/drone/push Build is failing Details
2024-02-23 09:42:31 -08:00
cosmonaut 2798067d54 add Refresh_Image_Info
continuous-integration/drone/push Build is failing Details
2024-02-23 00:03:17 -08:00
cosmonaut d34310a7df fix Refresh_CreateCpuBuffer in Refresh.c
continuous-integration/drone/push Build is failing Details
2024-02-22 10:34:48 -08:00
cosmonaut 72ff9407c4 update CreateCpuBuffer in Refresh_Driver
continuous-integration/drone/push Build is failing Details
2024-02-21 10:59:31 -08:00
cosmonaut 94f181787b CpuBuffer Set/Get API
continuous-integration/drone/push Build is failing Details
2024-02-17 20:21:52 -08:00
cosmonaut c44a095bca CreateCpuBuffer writes a data pointer
continuous-integration/drone/push Build is failing Details
2024-02-16 18:53:52 -08:00
cosmonaut fdb29ade82 remove map/unmap calls
continuous-integration/drone/push Build is failing Details
2024-02-16 18:44:16 -08:00
cosmonaut 61386a27ba update Refresh_Driver.h and Refresh.c
continuous-integration/drone/push Build is failing Details
2024-02-16 17:54:58 -08:00
cosmonaut c779718967 buffer bindings should actually use uint64_t
continuous-integration/drone/push Build is failing Details
2024-02-15 20:05:18 -08:00
cosmonaut 218587bb6a rearrange copy params order
continuous-integration/drone/push Build is failing Details
2024-02-15 17:27:40 -08:00
cosmonaut 80914e9c38 add command buffer to Pass functions
continuous-integration/drone/push Build is failing Details
2024-02-15 16:48:26 -08:00
cosmonaut 342a7f9ef6 update ASSIGN_DRIVER_FUNC calls
continuous-integration/drone/push Build is failing Details
2024-02-15 16:34:52 -08:00
cosmonaut 10c0b5ae37 a few more API revisions
continuous-integration/drone/push Build is failing Details
2024-02-12 11:00:06 -08:00
cosmonaut 6f31f17be1 proposed API revision
continuous-integration/drone/push Build is failing Details
2024-02-12 00:04:02 -08:00
cosmonaut b78d01592b memory system tweaks
continuous-integration/drone/push Build is passing Details
2024-02-11 15:56:53 -08:00
cosmonaut c99b4cdfa1 fix incorrect flag bit
continuous-integration/drone/push Build is passing Details
2024-01-31 14:47:01 -08:00
cosmonaut 2803e6d94e force ignore device-local property if allocation failed
continuous-integration/drone/push Build is passing Details
2024-01-31 14:36:02 -08:00
cosmonaut 30b5f1dd21 user-requested buffers are no longer host-visible
continuous-integration/drone/push Build is passing Details
2024-01-31 14:26:40 -08:00
cosmonaut 4ce2d80f80 Intel doesn't like 1 byte buffers
continuous-integration/drone/push Build is passing Details
2024-01-19 10:19:23 -08:00
cosmonaut c10ca98ccd Remove some unused variables
continuous-integration/drone/push Build is passing Details
2024-01-15 22:25:27 -08:00
cosmonaut d441424b7c Fix ANY_SHADER_READ_SAMPLED_IMAGE sync hazard
continuous-integration/drone/push Build is passing Details
2024-01-15 21:41:36 -08:00
cosmonaut 55c77def69 Revert "Fix potential sync hazards (#49)"
This reverts commit 20636ec951.
2024-01-15 21:38:37 -08:00
cosmonaut 2634359b48 Texture size calculation fixes
continuous-integration/drone/push Build is passing Details
2024-01-15 16:36:56 -08:00
cosmonaut 859fc3b9fa fix UBO buffer size
continuous-integration/drone/push Build is passing Details
2024-01-13 23:45:07 -08:00
cosmonaut 05350a9332 UBO offsets should respect alignment
continuous-integration/drone/push Build is passing Details
2024-01-13 23:39:58 -08:00
cosmonaut 20636ec951 Fix potential sync hazards (#49)
We now do certain image layout transitions in the render pass instead of a barrier in EndRenderPass.

There is also an additional barrier on buffer uploads to prevent write-after-write hazard. It's a kludge on the fact that we're only tracking the most recent resource access.

Reviewed-on: #49
2024-01-12 18:10:11 -08:00
cosmonaut 7297eba889 Uniform buffers are now slices of dedicated allocs (#48)
continuous-integration/drone/push Build is passing Details
This should fix an issue where draw calls could flicker if a defrag was in progress and a uniform buffer was being used.

Uniform buffer "pools" are now just a single dedicated VulkanBuffer, and the uniform buffer objects are offsets into that buffer.

Reviewed-on: #48
2024-01-13 01:41:12 +00:00
cosmonaut fa92e9e08a change dummy uniform buffer size to 1
continuous-integration/drone/push Build is passing Details
2023-12-08 12:49:46 -08:00
cosmonaut 483c07f3a8 Vulkan: fix dummy UBOs becoming invalid after defrag
continuous-integration/drone/push Build is passing Details
2023-12-05 12:22:40 -08:00
cosmonaut f01d5d817a Vulkan: fix some missed cleanup in DestroyDevice
continuous-integration/drone/push Build is passing Details
2023-12-04 17:28:25 -08:00
cosmonaut 1b3e954da8 change render pass barriers to read-write
continuous-integration/drone/push Build is passing Details
2023-11-09 11:00:19 -08:00
Evan Hemsley 0989e45f88 MoltenVK support
continuous-integration/drone/push Build is passing Details
2023-10-14 22:14:00 -07:00
cosmonaut 54a8ff122c Fix uniform buffers not tracking correctly 2023-10-12 11:11:27 -07:00
TheSpydog a15e26b124 Update Driver Template + Window Crash Fix (#46)
continuous-integration/drone/push Build is passing Details
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: #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)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #45
2023-09-19 06:11:20 +00:00
cosmonaut c978df6275 remove unused variables
continuous-integration/drone/push Build is passing Details
2023-07-31 16:12:20 -07:00
cosmonaut de42163673 rework Vulkan device selection and initialization
continuous-integration/drone/push Build is passing Details
2023-07-31 16:06:47 -07:00
cosmonaut c3a5d9f417 enable independentBlend feature
continuous-integration/drone/push Build is passing Details
2023-06-16 15:00:47 -07:00
cosmonaut 5a2b07097a SetTextureDataYUV rework (#44)
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #44
2023-06-07 20:59:55 +00:00
cosmonaut 1f9f7e0939 Memory Management Rewrite (#41)
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
continuous-integration/drone Build is passing Details
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: #41
2023-05-18 23:43:11 +00:00
cosmonaut 0f29bf03e9 Remove qoi.h
continuous-integration/drone/push Build is passing Details
2023-04-18 23:43:23 -07:00
cosmonaut 74909b49c3 Redesign image API to be format agnostic (#40)
continuous-integration/drone/push Build is passing Details
2023-04-19 06:42:44 +00:00
cosmonaut 3fc743ce28 Add support for QOI format and reading images from memory (#39)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #39
2023-04-04 00:14:20 +00:00
cosmonaut 153c3c3c60 add missing texture formats to size function
continuous-integration/drone/push Build is passing Details
2023-02-27 09:54:26 -08:00
cosmonaut decddae384 Fix MultipleThreads error on command buffer reset
continuous-integration/drone/push Build is passing Details
2023-02-14 12:26:39 -08:00
TheSpydog 1f2aaeed9f add msaa support for depth textures (#38)
continuous-integration/drone/push Build is passing Details
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: #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)
continuous-integration/drone/push Build is passing Details
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: #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)
continuous-integration/drone/push Build is passing Details
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: #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)
continuous-integration/drone/push Build is passing Details
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: #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)
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