Commit Graph

72 Commits

Author SHA1 Message Date
niki 7185d7356f vulkan: fix enabling extensions 2022-08-31 19:50:03 +02:00
niki a0ee9f7b9b vulkan: implement compute shaders
A lot of stuff probably isn't implemented yet, however the
following code already works:

```lua
local shader = love.graphics.newComputeShader [[
    layout (local_size_x = 1, local_size_y = 1) in;

    layout(r32f) uniform highp image2D out_tex;

    uniform float time;

    void computemain() {
        imageStore(out_tex, ivec2(love_GlobalThreadID.xy), vec4(time, 1.0, 1.0, 1.0));
    }
]]

local tex = love.graphics.newTexture(64, 64, {computewrite = true,format = "r32f"})

function love.draw()
    shader:send("out_tex", tex)
    shader:send("time", love.timer.getTime() % 1)
    love.graphics.dispatchThreadgroups(shader, 64, 64, 1)

    love.graphics.print("compute shader test")
    love.graphics.draw(tex, 25, 25)
end
```
2022-08-31 02:07:46 +02:00
niki e409770be1 vulkan: fix some validation warnings 2022-08-30 20:28:18 +02:00
niki ec5a3a50f9 vulkan: implement graphics readback 2022-08-30 17:11:59 +02:00
niki a69d4a38dd vulkan: optionally use extended dynamic state
This should cut down on the number of pipeline permutations
needed when this extension is available.
2022-08-30 03:20:33 +02:00
niki d123021e26 vulkan: fix canvas rendering (on android)
Before this patch, sometimes rendering a texture
on an android device would result in random things
appearing in the canvas, apart from the stuff
that has been drawn properly.
With these changes this does not seem to appear anymore.
2022-08-29 17:43:54 +02:00
niki c5a2e47714 vulkan: implement multi canvas rendering 2022-08-28 03:35:06 +02:00
niki 18221beb25 vulkan: fix canvas rendering on android 2022-08-27 20:58:17 +02:00
niki 77f75648e8 vulkan: default renderpass and framebuffers
Since these objects basically get used every frame
we shouldn't store them in a hashmap with potentially
worse performance.
Instead storing them in member variables should be better.
2022-08-25 18:15:18 +02:00
niki a577be8a6d vulkan: fix a few bugs in Shader 2022-08-23 01:38:47 +02:00
niki a08395e12d vulkan: implement msaa 2022-08-22 23:09:21 +02:00
niki 62148790a8 vulkan: fix scissor on android 2022-08-22 17:40:27 +02:00
niki 7cc6ed40be vulkan: implement depth and stencil 2022-08-21 17:42:39 +02:00
niki 665614b9b9 vulkan: fix crash when recreating swapchain 2022-08-20 21:33:09 +02:00
niki 5f2fdc0dd0 vulkan: android: fix display orientation 2022-08-20 21:03:49 +02:00
niki 23666b1fde vulkan: fix android build
It compiles now, but it's not working correctly yet
2022-08-20 19:38:59 +02:00
niki 3e762c9772 vulkan: remove dynamic rendering (part 2) 2022-08-20 16:38:13 +02:00
niki 4660466887 vulkan: don't use dynamic rendering 2022-08-20 15:49:09 +02:00
niki be8778b4eb vulkan: remove dep on VK_KHR_push_descriptor
It's not sure if this extension is supported everywhere
This commit uses normal descriptor pools, sets and writes,
which are all availabel in base vulkan.
2022-08-19 16:44:59 +02:00
niki fbb64a07af vulkan: partially implement mipmaps
There is no real effect yet when rendering, however debugging the
application with renderdoc reveals that the mipmap generation is
already correct. There's probably something weird going on with the
sampling. I'll have to look into that next.
2022-08-09 00:57:07 +02:00
niki c51b12a177 vulkan: make api design more senseful 2022-08-08 21:36:43 +02:00
niki 1647f6c9c2 vulkan: remove unnecessary quadindex code 2022-08-01 19:30:08 +02:00
niki dcea056fcb vulkan: properly implement samplers 2022-08-01 18:51:09 +02:00
niki 7bbc2888e2 vulkan: remove unnecessary recreation on resize 2022-08-01 17:38:23 +02:00
niki 98ebdd7871 vulkan: fix wireframe validation error 2022-08-01 16:07:37 +02:00
niki 29dcf3e8c0 vulkan: use hashing to determine pipeline
Until now we did a linear search in a vector to find the cashed
pipeline given a certain configuration. This is of course not a very
efficient way. This commit now uses a hashmap which should still be
fast even when there are a lot of pipelines already created.
2022-07-31 01:42:48 +02:00
niki 7bbc042fce vulkan: remove redundant tabs
this makes reading the source files easier
and is more in line with the rest of the löve codebase
2022-07-30 01:16:56 +02:00
niki 94c58e1599 vulkan: fix video rendering 2022-07-30 00:26:49 +02:00
niki 1096b76054 vulkan: fix clean up
We now don't do any more greedy waiting when destroying vulkan objects.
2022-07-29 22:59:15 +02:00
niki 524e011133 vulkan: make Texture::uploadByteData async
Before this commit we would greedily wait for the upload to be complete
before exiting the function. This is of course not correct, since
we might be changing data that is still being used in a render in
flight. Of course we also need to cleanup the resources asynchronously
after the frame has been rendered fully.
2022-07-29 22:35:35 +02:00
niki 7a3e9ed71e vulkan: fix uniform buffer descriptor
There was a bug where the count of used builtin uniform buffer objects
was not advanced. This caused another problem since vulkan requires
a certain alignment for the buffer. This commit fixes both of those
things.
2022-07-29 21:04:35 +02:00
niki fb6457f57d vulkan: move descriptor set logic into Shader
Using the extension VK_KHR_push_descriptor makes the code a lot easier.
Using it makes us able to set set descriptor sets dynamically.
2022-07-19 02:36:02 +02:00
niki 6916182a79 vulkan: implement getAPIStats 2022-07-16 23:46:03 +02:00
niki 913aab0226 vulkan: implement setActive 2022-07-16 23:27:54 +02:00
niki 9b7cfef5ef vulkan: implement setScissor 2022-07-16 23:19:24 +02:00
niki 974c50c751 vulkan: partially implement clear
Only works for color attachments for now.
2022-07-16 21:45:27 +02:00
niki ac9d8ec2a0 vulkan: fix canvas rendering
Sometimes canvas commands wouldn't get executed.
This was because when the window gets resized,
the command buffers would get recreated, and would thus
lose the recorded commands.
2022-07-16 15:55:48 +02:00
niki 95952c691d vulkan: implement setRenderTargetsInternal
basic usage of canvases now works.
Colors probably aren't correct yet.
2022-07-15 01:44:07 +02:00
niki 0ae81091d1 vulkan: use dynamic rendering
This vulkan 1.3 feature will make the code simpler when dealing
with off screen render targets (i.e. löve canvases)
2022-07-14 18:01:46 +02:00
niki 38f15ae97d vulkan: implement cull and winding 2022-07-13 17:27:11 +02:00
niki c6d79ae87e vulkan: implement setColorMask 2022-07-13 16:50:28 +02:00
niki a591b2b99e vulkan: implement setBlendState 2022-07-13 16:37:16 +02:00
niki 04fb789649 vulkan: implement setPointSize 2022-07-13 16:05:12 +02:00
niki 4190807a20 vulkan: implement setWireframe 2022-07-13 15:55:14 +02:00
niki 0834408b90 vulkan: implement draw(DrawCommand)
Now love.graphics.point and love.graphics.line works
2022-07-13 13:56:00 +02:00
niki 14b8abeef5 vulkan: implement setColor 2022-07-11 17:17:32 +02:00
niki c5327bfc4f vulkan: fix some more memory leaks 2022-07-11 01:47:34 +02:00
niki 0759e8d513 vulkan: fix some memory leaks 2022-07-11 01:13:50 +02:00
niki 7fe2a2d821 vulkan: fix vertex format 2022-07-10 22:52:03 +02:00
niki ef08282f0d vulkan: implement getRendererInfo 2022-07-10 19:13:10 +02:00