Commit Graph

97 Commits

Author SHA1 Message Date
Sasha Szpakowski 52f33041a5 Fix Shader:send with storage buffers. 2024-03-08 17:52:48 -04:00
Sasha Szpakowski 2079f657e7 graphics: most uniform reflection is handled at a higher level instead of backend code.
Fixes boolean uniforms when Metal is used.
2024-03-07 21:24:11 -04:00
Sasha Szpakowski 42812ad521 Add texture views. Fixes #2022.
Add love.graphics.newTextureView(basetexture, viewsettings). Requires GLSL4 support.
Add 'viewformats' boolean setting to texture setting tables.
Add Texture:hasViewFormats.

The viewsettings table has the following fields:
  format = nil, -- set this to a pixel format to override the base format. It must have the same number of bytes per pixel as the original, and the 'viewformats' setting on the original texture must be true for this to work. Cannot be used for compressed or depth/stencil textures.
  type = nil, -- set this to a texture type to override the base texture type. 2d base textures can make [2d, array] views. [array, cube] base textures can make [2d, array, cube] views.
  mipmapstart = nil, -- set to a number to use a less detailed mipmap level as a base.
  mipmapcount = nil, -- set to a number to override the number of mipmaps in the texture view.
  layerstart = nil, -- set to a number to use a specific layer or cube face as a base.
  layers = nil, -- set to a number to override the number of layers in an array texture view.
2024-02-24 15:45:43 -04:00
Sasha Szpakowski 64a30f177f Merge branch 'main' into 12.0-development 2024-02-10 12:24:48 -04:00
Sasha Szpakowski 94d5864144 update year for copyright notice 2024-02-10 12:13:22 -04:00
Sasha Szpakowski dbcdbc47d5 Add debugname field to shader options table. 2023-12-29 16:51:24 +01:00
niki 88272c6855 vulkan: correctly identify boolean uniforms 2023-10-09 20:07:32 +02:00
Sasha Szpakowski 6ac7c09d90 shaders: default to std430 layout for storage buffers. 2023-02-05 22:16:28 -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
Sasha Szpakowski f6cdbdc868 Merge branch 'main' into 12.0-development 2022-12-31 22:46:34 -04:00
Sasha Szpakowski c823dbca96 Update copyright year for 2023 2022-12-31 22:25:49 -04:00
Sasha Szpakowski 6599697835 opengl: Fix love_PixelCoord and love_ScreenSize in shaders.
Fixes #1866.
2022-11-25 23:27:04 -04:00
slime 99ad576668 metal: implement storage texture support for shaders.
Fixes #1783
2022-10-10 13:47:17 -03:00
niki f4c38eb00a Revert "vulkan: use push constants for builtin uniforms"
This reverts commit 47e3fc85d2.
2022-09-15 15:55:47 +02:00
niki 47e3fc85d2 vulkan: use push constants for builtin uniforms
when available
2022-09-15 15:17:06 +02:00
niki a93d153792 vulkan: adjust code styling 2022-09-10 17:40:46 +02:00
niki 4047cc9d3a Merge remote-tracking branch 'origin/12.0-development' into vulkan 2022-08-28 03:43:08 +02:00
niki 18221beb25 vulkan: fix canvas rendering on android 2022-08-27 20:58:17 +02:00
slime db1bf4707c Workaround for built-in shaders on some ES2 devices which don't support highp in pixel shaders. 2022-08-25 19:25:01 -03:00
slime 96820749ad Potential optimization for built-in uniform access in shader code.
Assigning to and accessing extra shader variables can increase VGPR / wave-variant register usage in shaders, which is often a limiting factor for performance in non-trivial shaders. Accessing the uniforms directly should bypass that.
2022-08-25 18:17:31 -03:00
niki 00974b5820 vulkan: move shader compilation into Shader 2022-07-18 22:28:41 +02:00
niki 2bf7c35220 use constant color for VertexColor 2022-06-14 23:30:51 +02:00
niki 1111aa3f42 (almost) integrate default löve shaders for vulkan 2022-06-14 18:18:23 +02:00
niki c996860602 Use löve's uniform data object for vulkan shader 2022-06-13 16:50:12 +02:00
niki acf0474cc8 Implement drawing very basic textures
With this commit you can draw very simple textures.
The following code will showcase it:

```lua
function love.run()
    local data = love.image.newImageData(40, 40)
    for i = 0,39 do
        for j=0,39 do
            if i <= 20 then
                if j <= 20 then
                    data:setPixel(i, j, 1, 0, 0, 1)
                else
                    data:setPixel(i, j, 0, 1, 0, 1)
                end
            else
                if j <= 20 then
                    data:setPixel(i, j, 0, 0, 1, 1)
                else
                    data:setPixel(i, j, 1, 1, 1, 1)
                end
            end
        end
    end

    local texture
    texture = love.graphics.newTexture(data)

    return function()
        love.event.pump()
        for name, a,b,c,d,e,f in love.event.poll() do
            if name == "quit" then
                if not love.quit or not love.quit() then
                    return a or 0
                end
            end
            love.handlers[name](a,b,c,d,e,f)
        end

        love.graphics.origin()
        love.graphics.clear()

        love.graphics.draw(texture, 50, 500)

        love.graphics.present()
    end
end
```
2022-06-11 20:33:44 +02:00
niki c16c07780f use default texture when rendering primitives 2022-05-08 22:44:32 +02:00
niki 75a6bc9b5d Merge remote-tracking branch 'origin/12.0-development' into vulkan 2022-05-06 16:46:55 +02:00
niki 158052c52c implement basic per frame uniform variables 2022-03-22 14:31:50 +01:00
niki 157c8f8a20 include custom vulkan shader in love source 2022-03-21 15:26:27 +01:00
Alex Szpakowski 0fa00e0bdc love.graphics.newShader: add a compile options table parameter.
The only field currently read from the table is 'defines', which can contain either an array of define names, or name-value pairs.
For example: newShader(file, {defines={"MYFEATURE_ENABLED", MYSETTING=1}})

Fixes #1577
2022-02-20 12:23:41 -04:00
niki 197dfb9738 start implementing vulkan Shader type 2022-02-06 22:56:24 +01:00
Alex Szpakowski d51e012812 Merge branch '12.0-development' into metal 2022-01-05 21:12:22 -04:00
Alex Szpakowski 7f3538d2ba Merge branch 'main' into 12.0-development 2022-01-05 21:10:27 -04:00
Alex Szpakowski 91cb845f31 #pragma language glsl4 in shaders maps to GLES 3.2 instead of 3.1. 2022-01-02 14:02:55 -04:00
Alex Szpakowski f88eecf482 Allow texel buffers in OpenGL ES, when supported by the system. 2022-01-01 18:06:50 -04:00
Alex Szpakowski e602f08c24 metal: support constant initializer values for local uniforms. 2022-01-01 15:28:42 -04:00
Alex Szpakowski 8e7fd10b6f Update copyright year for 2022 2021-12-31 18:33:40 -04:00
Alex Szpakowski 7a910484c3 Fix compilation 2021-12-24 16:45:23 -04:00
Alex Szpakowski 3d8117ccbb Merge branch '12.0-development' into metal 2021-12-24 15:35:18 -04:00
Alex Szpakowski e63025b74f Merge branch '12.0-development' into metal 2021-12-24 15:34:05 -04:00
Alex Szpakowski fb77e64f61 Allow plain arrays of a base type as shader buffer block declarations. 2021-11-06 16:42:41 -03:00
Alex Szpakowski 63e3bd1823 use 'thread' and 'threadgroup' terminology in compute shader code.
Also fix compute shaders including some rendering-specific code.
2021-08-14 20:42:46 -03:00
Alex Szpakowski a551fcd492 Initial support for writing to textures in compute shaders. 2021-08-13 14:43:03 -03:00
Alex Szpakowski cffd485976 Allow rendering to integer textures. 2021-08-12 17:43:33 -03:00
Alex Szpakowski 48b3a4e860 Initial support for integer format textures.
They can't be rendered to and ImageData can't use the formats, for now.
2021-08-12 16:38:54 -03:00
Alex Szpakowski 4caeb27047 Slightly less heavy-handed compute memory barrier implementation.
Also validate whether there are any unbound writable resources when dispatching compute shader work.
2021-08-11 18:41:38 -03:00
Alex Szpakowski 92d0d1d60f love.graphics.validateShader no longer errors if the system doesn't support the shader 2021-07-18 14:09:28 -03:00
Alex Szpakowski 00494ec3b5 Error if image load/store is used since it's not supported yet. 2021-07-18 13:38:10 -03:00
Alex Szpakowski b644d00bf7 Add a more specific error message when compute shaders aren't supported
It already correctly errored, but the message was generic enough (GLSL 4 support) that it might be confusing.
2021-07-18 13:18:43 -03:00
Alex Szpakowski 80f051b97d Merge pull request #1715 from bjornbytes/compute-shaders
Compute Shaders
2021-07-18 13:09:48 -03:00