Commit Graph

4750 Commits

Author SHA1 Message Date
niki 7415cb2d02 vulkan: fix incorrect render pass hashing 2023-02-11 20:25:54 +01:00
niki b04ba7ecb4 vulkan: fix incorrect loadOp 2023-02-11 20:20:49 +01:00
niki d06926eae9 Merge branch '12.0-development' of https://github.com/nikeinikei/love into 12.0-development 2023-02-11 20:06:22 +01:00
niki 094d6e39d1 vulkan: improve render pass performance
Before this patch some common patterns would lead to very suboptimal
render passes.
Consider the following code:
```lua
local canvas = love.graphics.newCanvas(...)

function love.draw()
    love.graphics.setCanvas(canvas)
    love.graphics.clear(...)
    love.graphics.draw(...)
    love.graphics.setCanvas()

    love.graphics.draw(canvas)
end
```
This would lead to the following rendering:
1) render pass on main window with loadOp=load, followed by an immediate
    call to vkCmdClearAttachments
2) render pass on canvas with loadOp=load, followed by an immediate call
    to vkCmdClearAttachments
3) render pass on main window with loadOp=load

This patch changes the behaviour to the more performant
(and equivalent) version:
1) render pass on canvas with loadOp=clear
2) render pass on main window with loadOp=clear

This is especially helpful on mobile devices, where creating render
passes is an expensive operation.
2023-02-11 20:06:19 +01:00
nikeinikei edeab5e4e8 Merge branch 'love2d:12.0-development' into 12.0-development 2023-02-06 12:19:19 +01:00
Sasha Szpakowski 6ac7c09d90 shaders: default to std430 layout for storage buffers. 2023-02-05 22:16:28 -04:00
Sasha Szpakowski 2178b634c8 Add functions for indirect draws and compute dispatches.
Resolves #1879.

- Add an 'indirectdraw' boolean field to the graphics feature support table returned by love.graphics.getSupported. This is almost always supported when compute shaders are supported, except on a few older phones.

- Add an 'indirectarguments' boolean field to the settings table in love.graphics.newBuffer.

- Add love.graphics.dispatchIndirect(shader, argumentsbuffer [, argumentsindex = 1]).
    The compute dispatch's threadgroup width, height, and depth values are fetched from the buffer (as 3 uints) instead of coming from function parameters.

- Add love.graphics.drawIndirect(mesh, argumentsbuffer, argumentsindex, x, y, ....).
    Vertex or index count, instance count, and other related parameters for drawing the mesh are fetched from the buffer (as 4 or 5 uints depending on whether the mesh has an index buffer) instead of coming from function parameters. It's usually a good idea to keep parameters other than the instance count in sync with what the mesh should be using.

- Add love.graphics.drawFromShaderIndirect(drawmode, argumentsbuffer [, argumentsindex = 1] [, maintexture = nil]) and drawFromShaderIndirect(indexbuffer, argumentsbuffer [, argumentsindex] [, maintexture = nil]).
    Vertex or index count, instance count, and other related parameters are fetched from the buffer as 4 or 5 uints, as above.

For the dispatch indirect arguments buffer, it has to have 3 uint32 elements: { uint threadgroupsX, uint threadgroupsY, uint threadgroupsZ }.

For non-indexed draws, the arguments buffer has to have 4 uint32 elements: { uint vertexCount, uint instanceCount, uint baseVertex, uint baseInstance }. Note that baseInstance should always be set to 0 as many drivers don't support non-zero values.

For draws which use an index buffer, the arguments buffer has to have 5 uint32 elements: { uint indexCount, uint instanceCount, uint firstIndex, uint baseVertex, uint baseInstance }. As above, the baseInstance value should always be 0.

A buffer can be created to have an array of those structures, which can be used with the argumentsindex parameter of the Indirect dispatch/draw functions.
2023-02-05 15:55:19 -04:00
Sasha Szpakowski d3747cebb1 Rename love.graphics.drawShaderVertices to drawFromShader. 2023-02-05 15:16:10 -04:00
Sasha Szpakowski e13b0078a2 shaders: ignore code in comments when parsing entry point functions.
Fixes #1581.
2023-02-04 10:25:13 -04:00
niki 9f452474c7 vulkan: remove unnecessary getDevice() calls 2023-01-31 01:07:02 +01:00
Sasha Szpakowski defe811f62 Allow creating a mipmapped texture with less than the full mip range.
When creating a texture with user-specified mipmaps, it no longer errors if all mipmaps down to 1x1 aren't present.

Added a 'mipmapcount' field to the settings table in newImage and friends (only used when mipmaps are enabled for the texture.) If it's set, only mipmap levels up to the specified count will be created instead of always creating the full range.

Old OpenGL ES 2 devices don't support loading a mipmapped texture without the full mipmap range, so there's a new 'mipmaprange' boolean field in the table returned by love.graphics.getSupported.
2023-01-29 16:02:39 -04:00
Sasha Szpakowski 8706f0ef6a Rename Texture:isRenderTarget to Texture:isCanvas. 2023-01-29 15:58:31 -04:00
niki 0e1f645538 vulkan: clean up glslang objects properly
By using smart pointers we don't want to worry about
explicitely deleting.
2023-01-29 01:14:06 +01:00
niki f01457a610 vulkan: remove internal Shader::attach call
Shader::attach() should not be called internally
by a graphics backend.
2023-01-27 14:10:19 +01:00
nikeinikei fdc860e6b6 Merge branch 'love2d:12.0-development' into 12.0-development 2023-01-27 13:53:32 +01:00
niki 377d269f4a vulkan: remap bindings to prevent clash
Vulkan does not differentiate between between bindings for textures
and buffers, as opposed to opengl. This can lead to situations, where
different uniforms get assigned the same binding leading to a crash,
when trying to update a descriptor set with the wrong type.
This patch solves this problem, by remapping the bindings when needed.
2023-01-27 02:36:10 +01:00
Miku AuahDark 61352b90a5 Update dr_mp3 to 0.6.34.
Closes #1898
2023-01-24 20:42:21 +08:00
niki a2466a4a1b vulkan: use temporary pipeline cache 2023-01-22 00:17:42 +01:00
Sasha Szpakowski 7e661d2fb1 Merge pull request #1892 from MikuAuahDark/srcindex
Provide PDB with Source Indexing as Artifacts
2023-01-15 15:51:09 -04:00
Miku AuahDark c46423198e Reduce the compiled binary size. 2023-01-15 11:48:04 +08:00
Sasha Szpakowski 9edae19d74 Merge branch 'main' into 12.0-development 2023-01-14 22:40:13 -04:00
Sasha Szpakowski 592c306276 Fix images with mipmaps when ANGLE is used with an AMD gpu. 2023-01-14 22:35:00 -04:00
Sasha Szpakowski 8cac37b811 Fix typo 2023-01-14 12:17:57 -04:00
Sasha Szpakowski 8ae7342875 Improve variable name readability in line rendering code. 2023-01-14 12:13:35 -04:00
Sasha Szpakowski 0acb2f57dc Revert "CI: explicitly set the visual studio version when building for windows"
This reverts commit fed946505f.
2023-01-14 10:58:32 -04:00
Sasha Szpakowski fed946505f CI: explicitly set the visual studio version when building for windows 2023-01-14 10:54:59 -04:00
Miku AuahDark 20ad44cd99 Source index PDB and upload it as artifacts. 2023-01-14 16:10:41 +08:00
Sasha Szpakowski f6b74e9ce7 WheelJoint:getMotorTorque takes a dt param instead of inverse dt.
Matches the change made to RevoluteJoint:getMotorTorque.
2023-01-13 18:10:45 -04:00
Sasha Szpakowski a85858236d error handler: increase font size slightly.
The new default font plus better kerning made the old size too small compared to 11.4.
2023-01-12 19:26:37 -04:00
Sasha Szpakowski 94d05e319b Clear auto-generated temporary depth/stencil buffers in setCanvas.
Previously it would discard them, which needed the user to call love.graphics.clear afterward to get them into a valid state.

The current code has suboptimal performance if the user still calls clear after setCanvas (a common situation), so more optimizations will probably be needed.

Fixes #1843.
2023-01-11 18:17:22 -04:00
Sasha Szpakowski 249d90067e Don't discard the backbuffer depth/stencil in setCanvas.
#1893.
2023-01-11 08:58:12 -04:00
niki 7e7d2884c8 vulkan: fix shader crash 2023-01-09 16:37:12 +01:00
Sasha Szpakowski 8572d4f935 Merge branch 'text-shaping' into 12.0-development 2023-01-08 20:48:48 -04:00
Sasha Szpakowski 52283425ca metal: fix crashes on the iOS Simulator 2023-01-08 20:37:05 -04:00
Sasha Szpakowski c2778587f7 Merge branch '12.0-development' into text-shaping 2023-01-08 20:31:37 -04:00
Sasha Szpakowski 5c9ccd1652 iOS: Add harfbuzz.xcframework to xcode project 2023-01-08 20:25:38 -04:00
Sasha Szpakowski b0f79f78a5 vulkan: don't pass a SDL_Window into GetInstanceExtensions, it's unneeded. 2023-01-08 15:21:26 -04:00
Sasha Szpakowski 6a6ec2eeb6 Merge branch 'main' into 12.0-development 2023-01-06 17:15:29 -04:00
Sasha Szpakowski 52fa5cf8f0 CI: update repository URL for love-appimage-source 2023-01-06 17:12:01 -04:00
Sasha Szpakowski 6a3031f357 Remove very old unused nsis installer file.
CMake is used instead these days.
2023-01-06 17:03:38 -04:00
Sasha Szpakowski 82e516f2fb Untested attempt at linux support for harfbuzz dependency 2023-01-03 21:12:16 -04:00
Sasha Szpakowski b8a0e58fa6 macOS: add harfbuzz.framework reference to xcode project. 2023-01-03 20:36:11 -04:00
Sasha Szpakowski bb82a448be Fix another compile error with some compilers. 2023-01-03 20:35:31 -04:00
Sasha Szpakowski 431c6a110c Merge branch '12.0-development' into text-shaping 2023-01-01 19:32:27 -04:00
Sasha Szpakowski b0ae189d13 mac/iOS: CI uses 12.x branch of love-apple-dependencies 2023-01-01 19:01:43 -04:00
Sasha Szpakowski d980b366da Add TextShaper file references to Xcode project 2023-01-01 18:33:25 -04:00
Sasha Szpakowski de2b986787 Code style fixes 2023-01-01 15:07:37 -04:00
Sasha Szpakowski 616ed0e7f8 Fix compile errors with some compilers. 2023-01-01 12:52:38 -04:00
Sasha Szpakowski 6f14a18da0 Update copyright year in TextShaper files 2023-01-01 12:20:01 -04:00
Sasha Szpakowski d085f44e6a Merge branch '12.0-development' into text-shaping 2023-01-01 12:18:54 -04:00