gtk4.git
2 years agofilterlistmodel: emit ::notify::pending after ::items-changed
Zander Brown [Wed, 26 Jul 2023 03:57:48 +0000 (04:57 +0100)]
filterlistmodel: emit ::notify::pending after ::items-changed

2 years agoUpdate Hungarian translation
Balázs Meskó [Tue, 25 Jul 2023 23:43:05 +0000 (23:43 +0000)]
Update Hungarian translation

(cherry picked from commit 7a3a82749b751aacc751b747a547d577622c7083)

2 years agoMerge branch 'fix-file-dialog-assert' into 'main'
Matthias Clasen [Mon, 24 Jul 2023 21:52:57 +0000 (21:52 +0000)]
Merge branch 'fix-file-dialog-assert' into 'main'

filedialog: Don't assert too much

Closes #5975

See merge request GNOME/gtk!6207

2 years agoMerge branch 'pgriffis/fix-no-introspection-build' into 'main'
Matthias Clasen [Mon, 24 Jul 2023 21:11:17 +0000 (21:11 +0000)]
Merge branch 'pgriffis/fix-no-introspection-build' into 'main'

build: Fix building with introspection disabled and testsuite enabled

See merge request GNOME/gtk!6210

2 years agobuild: Fix building with introspection disabled and testsuite enabled
Patrick Griffis [Mon, 24 Jul 2023 00:30:30 +0000 (19:30 -0500)]
build: Fix building with introspection disabled and testsuite enabled

The headless tests are written in Python and need g-i.

2 years agofiledialog: Don't assert too much
Matthias Clasen [Sun, 23 Jul 2023 16:30:38 +0000 (12:30 -0400)]
filedialog: Don't assert too much

The GtkFileDialog code was asserting that
we get exactly one file back. But the function
is nullable anyway, so lets just return NULL
if we don't have a file.

Fixes: #5975
2 years agoMerge branch 'wip/otte/vulkan-for-main' into 'main'
Benjamin Otte [Sat, 22 Jul 2023 21:48:29 +0000 (21:48 +0000)]
Merge branch 'wip/otte/vulkan-for-main' into 'main'

tools: No need for --force when specifying filename

See merge request GNOME/gtk!6205

2 years agoMerge branch 'drop-touchscreen-debug' into 'main'
Matthias Clasen [Sat, 22 Jul 2023 21:48:14 +0000 (21:48 +0000)]
Merge branch 'drop-touchscreen-debug' into 'main'

Drop GTK_DEBUG_TOUCHSCREEN

Closes #5893

See merge request GNOME/gtk!6204

2 years agovulkan: Clean up renderpass/offscreen creation
Benjamin Otte [Fri, 21 Jul 2023 22:54:03 +0000 (00:54 +0200)]
vulkan: Clean up renderpass/offscreen creation

Instead of scale and whatnot, pass:
1. The image size
2. The viewport to map to that image size
and compute everything else from there.

In particular, we set the Vulkan viewport to the image dimensions
instead of the viewport size.

All of this makes things a lot simpler while keeping the required
functionality.

2 years agovulkan: Plug a memleak
Benjamin Otte [Sat, 22 Jul 2023 21:26:44 +0000 (23:26 +0200)]
vulkan: Plug a memleak

This one was introduced in 4d9e7d30b00.

2 years agovulkan: Plug a memleak
Benjamin Otte [Sat, 22 Jul 2023 21:25:33 +0000 (23:25 +0200)]
vulkan: Plug a memleak

This one was introduced in cd84f5a56ef.

2 years agotools: No need for --force when specifying filename
Benjamin Otte [Sat, 22 Jul 2023 03:21:30 +0000 (05:21 +0200)]
tools: No need for --force when specifying filename

If people specify the filename, they should know what they're doing.

If they don't, abort if the guessed filename already exists and insist
on the user explicitly giving it.

2 years agoDrop GTK_DEBUG_TOUCHSCREEN
Matthias Clasen [Sat, 22 Jul 2023 20:41:39 +0000 (16:41 -0400)]
Drop GTK_DEBUG_TOUCHSCREEN

This flag was never doing much, and is only raising
the wrong expectations. Remove it.

Fixes: #5893
2 years agoMerge branch 'textview-keynav-backspace' into 'main'
Matthias Clasen [Sat, 22 Jul 2023 15:45:42 +0000 (15:45 +0000)]
Merge branch 'textview-keynav-backspace' into 'main'

textview: Match entry behavior for backspace

Closes #3417

See merge request GNOME/gtk!6203

2 years agoMerge branch 'fix-issue-5965' into 'main'
Matthias Clasen [Sat, 22 Jul 2023 13:51:32 +0000 (13:51 +0000)]
Merge branch 'fix-issue-5965' into 'main'

gtktextview: return early when resetting gesture / event controller

Closes #5965

See merge request GNOME/gtk!6200

2 years agotextview: Match entry behavior for backspace
Matthias Clasen [Sat, 22 Jul 2023 13:40:17 +0000 (09:40 -0400)]
textview: Match entry behavior for backspace

As pointed out in #3417, there is a long-standing
difference in how GtkEntry and GtkTextView treat
Ctrl-Shift-Backspace (and other variations): GtkEntry
always operates on the selection first, if it exists.
GtkTextView only handled plain Backspace that way, and
ignores the selection for other variations.

There is no good reason for this difference, so just
remove it and make GtkTextView behave the same as
GtkEntry.

Fixes: #3417
2 years agoUpdate Georgian translation
Ekaterine Papava [Sat, 22 Jul 2023 13:24:50 +0000 (13:24 +0000)]
Update Georgian translation

2 years agoUpdate Vietnamese translation
Ngọc Quân Trần [Sat, 22 Jul 2023 08:54:03 +0000 (08:54 +0000)]
Update Vietnamese translation

2 years agoMerge branch 'dboles/PopoverMenu-png' into 'main'
Daniel Boles [Sat, 22 Jul 2023 08:43:25 +0000 (08:43 +0000)]
Merge branch 'dboles/PopoverMenu-png' into 'main'

Fix broken image menu.png in Gtk.PopoverMenu intro

See merge request GNOME/gtk!6187

2 years agoMerge branch 'dboles/for-main' into 'main'
Daniel Boles [Sat, 22 Jul 2023 08:43:06 +0000 (08:43 +0000)]
Merge branch 'dboles/for-main' into 'main'

tools: Replace references to GTK+ with GTK no plus

See merge request GNOME/gtk!6199

2 years agoUpdate Vietnamese translation
Ngọc Quân Trần [Sat, 22 Jul 2023 08:16:20 +0000 (08:16 +0000)]
Update Vietnamese translation

(cherry picked from commit e944cd89166aa35c290b508057d2269859b27591)

2 years agoMerge branch 'wip/otte/vulkan-for-main' into 'main'
Benjamin Otte [Sat, 22 Jul 2023 02:43:11 +0000 (02:43 +0000)]
Merge branch 'wip/otte/vulkan-for-main' into 'main'

gsk: Add gskrectprivate.h

See merge request GNOME/gtk!6201

2 years agogdk: Add function to query alpha format for depth
Benjamin Otte [Fri, 21 Jul 2023 23:11:19 +0000 (01:11 +0200)]
gdk: Add function to query alpha format for depth

It's meant to be used in renderers.

2 years agogdk: Make A8 and A16 formats premultiplied
Benjamin Otte [Fri, 21 Jul 2023 23:29:24 +0000 (01:29 +0200)]
gdk: Make A8 and A16 formats premultiplied

The relevant question here is about details, because we have to choose
if we declare alpha-only formats as having their (nonexistant) color
channels premultiplied or not, so that the code paths using them can do
the right thing.

Because we are premultiplied by default, it makes sense to treat alpha
like that, because then the alpha-only code doesn't need to do
workarounds for straight alpha.

Where this is relevant of course is when expanding the alpha channel
into color channels, where we want to end up with white.
So make sure we do color = alpha there instead of color = 1 like we did
before.

2 years agomemoryformat: Copy idea from tiff code
Benjamin Otte [Fri, 21 Jul 2023 01:05:40 +0000 (03:05 +0200)]
memoryformat: Copy idea from tiff code

The static assertion makes sure that newer formats get added.

2 years agogdk: Add A16_FLOAT and A32_FLOAT formats
Benjamin Otte [Fri, 21 Jul 2023 01:02:33 +0000 (03:02 +0200)]
gdk: Add A16_FLOAT and A32_FLOAT formats

We need them for mask-only textures.

For tiffs, we convert the formats to RGBA (the idea that tiff can save
everything needs to be buried I guess) as tiffs can't do alpha-only.

2 years agovulkan: Remove unused struct
Benjamin Otte [Thu, 20 Jul 2023 23:34:19 +0000 (01:34 +0200)]
vulkan: Remove unused struct

2 years agogsk: Add gskrectprivate.h
Benjamin Otte [Thu, 20 Jul 2023 20:25:20 +0000 (22:25 +0200)]
gsk: Add gskrectprivate.h

Add a bunch of inline functions for graphene_rectangle_t.

We use those quite extensively in tight loops so making them as fast as
possible via inlining has massive benefits.

The current render-heavy benchmark I am playing (th paris-30k in node-editor)
went from 49fps to 85fps on my AMD.

2 years agovulkan: Add new error code
Benjamin Otte [Thu, 20 Jul 2023 01:10:28 +0000 (03:10 +0200)]
vulkan: Add new error code

2 years agoUpdate Greek translation
Efstathios Iosifidis [Fri, 21 Jul 2023 22:29:43 +0000 (22:29 +0000)]
Update Greek translation

(cherry picked from commit 9d633773b0952ecd7cf53a54a71feb4c7706f6d4)

2 years agogtktextview: return early when resetting gesture / event controller
Luca Bacci [Fri, 21 Jul 2023 13:33:45 +0000 (15:33 +0200)]
gtktextview: return early when resetting gesture / event controller

Fixes #5965

2 years agotools: Replace references to GTK+ with GTK no plus
Daniel Boles [Fri, 21 Jul 2023 11:05:25 +0000 (12:05 +0100)]
tools: Replace references to GTK+ with GTK no plus

2 years agoMerge branch 'render-tool' into 'main'
Matthias Clasen [Fri, 21 Jul 2023 10:56:14 +0000 (10:56 +0000)]
Merge branch 'render-tool' into 'main'

Add gtk4-render-tool

See merge request GNOME/gtk!6197

2 years agoAdd a gtk4-rendernode-tool
Matthias Clasen [Thu, 20 Jul 2023 19:09:27 +0000 (15:09 -0400)]
Add a gtk4-rendernode-tool

This is meant to work with serialized render nodes.

2 years agoMerge branch 'dboles/for-main' into 'main'
Daniel Boles [Fri, 21 Jul 2023 09:35:30 +0000 (09:35 +0000)]
Merge branch 'dboles/for-main' into 'main'

ShortcutController: Add links to docs, fix heading

See merge request GNOME/gtk!6198

2 years agoShortcutController: Add links to docs, fix heading
Daniel Boles [Fri, 21 Jul 2023 09:01:56 +0000 (10:01 +0100)]
ShortcutController: Add links to docs, fix heading

to be "as GtkBuildable", not "as a GtkBuildable", as no other file uses
the latter.

2 years agoMerge branch 'wip/kabus/calendar-select-signal' into 'main'
Matthias Clasen [Fri, 21 Jul 2023 03:38:58 +0000 (03:38 +0000)]
Merge branch 'wip/kabus/calendar-select-signal' into 'main'

gtk/calendar: Avoid emision of day-selected signal from nav buttons

Closes #5769

See merge request GNOME/gtk!6196

2 years agogtk/calendar: Avoid emision of day-selected signal from nav buttons
Khalid Abu Shawarib [Fri, 21 Jul 2023 03:38:58 +0000 (03:38 +0000)]
gtk/calendar: Avoid emision of day-selected signal from nav buttons

2 years agogdk: Drop unnecessary conditionals
Matthias Clasen [Thu, 20 Jul 2023 17:11:44 +0000 (13:11 -0400)]
gdk: Drop unnecessary conditionals

We require GLib 2.76 now.

2 years agotools: Use #pragma once
Matthias Clasen [Thu, 20 Jul 2023 17:15:53 +0000 (13:15 -0400)]
tools: Use #pragma once

We are trying to be consistent about this.

2 years agotools: Drop unnecessary conditionals
Matthias Clasen [Thu, 20 Jul 2023 17:10:53 +0000 (13:10 -0400)]
tools: Drop unnecessary conditionals

We require GLib 2.76 now.

2 years agoMerge branch 'gtk-fix-issue-4990' into 'main'
Matthias Clasen [Thu, 20 Jul 2023 17:39:06 +0000 (17:39 +0000)]
Merge branch 'gtk-fix-issue-4990' into 'main'

Add check for large compose files

Closes #4990

See merge request GNOME/gtk!6195

2 years agoMake the new compose table test work
Matthias Clasen [Thu, 20 Jul 2023 15:48:13 +0000 (11:48 -0400)]
Make the new compose table test work

This just copies what we do already for other
tests that check parser failures.

2 years agoMerge branch 'wip/otte/vulkan-for-main' into 'main'
Benjamin Otte [Wed, 19 Jul 2023 19:51:57 +0000 (19:51 +0000)]
Merge branch 'wip/otte/vulkan-for-main' into 'main'

vulkan: Various smallish things

See merge request GNOME/gtk!6193

2 years agovulkan: Be more careful with supported images
Benjamin Otte [Wed, 19 Jul 2023 05:38:51 +0000 (07:38 +0200)]
vulkan: Be more careful with supported images

Now that we can upload all these fancy formats, we need to make sure
that we actually can.

2 years agomemoryformat: fast-path copies of the same format
Benjamin Otte [Wed, 19 Jul 2023 04:45:00 +0000 (06:45 +0200)]
memoryformat: fast-path copies of the same format

Basically, memcpy() asap if possible.

This happens a lot in Vulkan, where we gdk_memory_conert() image
data from memory textures straight into the VulkanBuffer.

And usually we support the format.

2 years agovulkan: Add premultiply step to texture upload
Benjamin Otte [Wed, 19 Jul 2023 04:14:55 +0000 (06:14 +0200)]
vulkan: Add premultiply step to texture upload

When a GdkMemoryFormat is not supported natively and there's
postprocessing required, add a way to mark a VulkanImage as such via the
new postprocess flags.

Also allow texting such iamges only with new_for_upload() and detect
when that is the case and then run a postprocessing step that converts
that image to a suitable format.
This is done with a new "convert" shader/op.

This now supports all formats natively, no conversions happen on the CPU
anymore (unless the GPU is old).

2 years agovulkan: Change fallback formats
Benjamin Otte [Wed, 19 Jul 2023 04:13:28 +0000 (06:13 +0200)]
vulkan: Change fallback formats

Always fall back to a format that isn't swizzled.

That way it can be used as a target format for rendering.

2 years agovulkan: Split renderpass op into 2
Benjamin Otte [Tue, 18 Jul 2023 22:31:48 +0000 (00:31 +0200)]
vulkan: Split renderpass op into 2

Add an explicit begin() and an end() op. For now, this looks like
overkill, but it allows doing renderpasses with custom ops that are not
meant to render a rendernode.

Examples for this are pre/postprocessing passes or 2-pass blur.

2 years agovulkan: Don't store the renderpass
Benjamin Otte [Tue, 18 Jul 2023 22:15:29 +0000 (00:15 +0200)]
vulkan: Don't store the renderpass

It's only used when parsing.

2 years agovulkan: Pass rectangles where no regions are used
Benjamin Otte [Tue, 18 Jul 2023 22:08:56 +0000 (00:08 +0200)]
vulkan: Pass rectangles where no regions are used

The API was using regions because it always had. But all the code ever
did was get the extents of the region.

So simplify everything by using rectangles everywhere.

2 years agovulkan: Stop keeping the context around
Benjamin Otte [Tue, 18 Jul 2023 22:00:34 +0000 (00:00 +0200)]
vulkan: Stop keeping the context around

These days, we can query it with gsk_vulkan_render_get_context().

Makes quite a few functions require one less argument.
And it also makes the GskVulkanRenderPass empty. Gotta figure out what
to do with it.

2 years agovulkan: Remove unused stuff fom renderpass
Benjamin Otte [Tue, 18 Jul 2023 21:15:22 +0000 (23:15 +0200)]
vulkan: Remove unused stuff fom renderpass

... and move it to the one place where it is used.

2 years agovulkan: Free storage buffer when disposing render object
Benjamin Otte [Mon, 17 Jul 2023 19:03:13 +0000 (21:03 +0200)]
vulkan: Free storage buffer when disposing render object

This caused a lot of leaked memory on the GPU when rendering textures.
(Read: inside node-editor)

2 years agovulkan: Fix leaks with pipeline cache
Benjamin Otte [Mon, 17 Jul 2023 19:02:33 +0000 (21:02 +0200)]
vulkan: Fix leaks with pipeline cache

In particular, we were leaking the actual cache and then created a new
one.

2 years agobuild: Move the glslc check into the top meson file
Benjamin Otte [Wed, 19 Jul 2023 13:36:55 +0000 (15:36 +0200)]
build: Move the glslc check into the top meson file

Put it with the other Vulkan checks, so it's easy to find.

2 years agovulkan: Remove the pre-compiled shaders
Benjamin Otte [Wed, 19 Jul 2023 12:15:57 +0000 (14:15 +0200)]
vulkan: Remove the pre-compiled shaders

Instead, build-depnd on glslc to build them.

glslc is available in all important distros for a while:
  Fedora >= 28
  Ubuntu >= 23.04
  Debian >= 12
  Arch
  Opensuse >= 15.2
  msys2
are the ones I checked.

So we can depend on it and avoid having to deal with keeping spirv files
up-to-date in all commits.

It's also 700kB of data, and not updating it helps.

2 years agoci: Include glslc for Vulkan builds
Benjamin Otte [Wed, 19 Jul 2023 12:55:07 +0000 (14:55 +0200)]
ci: Include glslc for Vulkan builds

2 years agoAdd test for large compose file
Luca Bacci [Wed, 19 Jul 2023 15:40:52 +0000 (17:40 +0200)]
Add test for large compose file

See #4990

2 years agoAdd check for large compose files
Luca Bacci [Wed, 19 Jul 2023 14:19:28 +0000 (16:19 +0200)]
Add check for large compose files

Fixes #4990

2 years agoMerge branch 'dboles/theme-no-backdrop-list-view-text' into 'main'
Daniel Boles [Wed, 19 Jul 2023 13:02:28 +0000 (13:02 +0000)]
Merge branch 'dboles/theme-no-backdrop-list-view-text' into 'main'

theme: Don't dim text in backdropped list/listview

See merge request GNOME/gtk!6175

2 years agoMerge branch 'wip/otte/vulkan-for-main' into 'main'
Benjamin Otte [Sun, 16 Jul 2023 12:22:35 +0000 (12:22 +0000)]
Merge branch 'wip/otte/vulkan-for-main' into 'main'

vulkan: Make RenderOps into proper structs

See merge request GNOME/gtk!6188

2 years agovulkan: Rebuild the shaders
Benjamin Otte [Sun, 16 Jul 2023 11:52:15 +0000 (13:52 +0200)]
vulkan: Rebuild the shaders

Just to be sure I didn't forget rebuilding some shader at some point.

2 years agovulkan: Redo barriers
Benjamin Otte [Sat, 15 Jul 2023 20:19:20 +0000 (22:19 +0200)]
vulkan: Redo barriers

We now store all the relevant state of the image inside the VulkanImage
struct, so we can delay barriers for as long as possible.

Whenever we want to use an image, we call the new
gsk_vulkan_image_transition() and it will add a barrier to the desired
state if one is necessary.

2 years agovulkan: Track the current pipeline stage of images
Benjamin Otte [Sat, 15 Jul 2023 14:38:03 +0000 (16:38 +0200)]
vulkan: Track the current pipeline stage of images

This way, we can in theory properly transition images because we know
which stage to transition from.

IN practice this is happening in future commits.

2 years agovulkan: Handle images in the ShaderOp
Benjamin Otte [Sat, 15 Jul 2023 11:28:08 +0000 (13:28 +0200)]
vulkan: Handle images in the ShaderOp

This looks more convoluted in this commit, but future commits will
hopefully make up for it.

2 years agovulkan: Make clip type an enum
Benjamin Otte [Sat, 15 Jul 2023 10:47:35 +0000 (12:47 +0200)]
vulkan: Make clip type an enum

and add gsk_vulkan_shader_op_alloc() that sets it properly.

2 years agovulkan: Introduce GskVulkanShaderOp
Benjamin Otte [Sat, 15 Jul 2023 09:39:18 +0000 (11:39 +0200)]
vulkan: Introduce GskVulkanShaderOp

It's the new base class for shaders now.

We're doing deep inheritance now, woohoo!

Also, port all the shader ops to it.

2 years agovulkan: Remove GskVulkanUploader
Benjamin Otte [Sat, 15 Jul 2023 00:05:24 +0000 (02:05 +0200)]
vulkan: Remove GskVulkanUploader

... and all the remaining functions still using it.

It's all unused and has been replaced by upload and download ops.

With this change, all GPU operations now go via GskVulkanOp.command()
and no more side channels exist.

2 years agovulkan: Add GskVulkanDownloadOp
Benjamin Otte [Fri, 14 Jul 2023 21:22:35 +0000 (23:22 +0200)]
vulkan: Add GskVulkanDownloadOp

This op queues a download of an image. The image will only be available
once the commands finished executing, so it requires waiting for the
render to finish, which makes the API a bit awkward.

Included is also a download_png_op() useful for debugging.

2 years agovulkan: Properly update image layouts
Benjamin Otte [Fri, 14 Jul 2023 21:05:19 +0000 (23:05 +0200)]
vulkan: Properly update image layouts

The render pass ops were not updating the image's layout to the final
layout when a render pass ends.

Fix that.

Also make the layouts explicit arguments to the render pass op.

2 years agovulkan: Simplify render API
Benjamin Otte [Fri, 14 Jul 2023 20:21:09 +0000 (22:21 +0200)]
vulkan: Simplify render API

Merge reset() and draw() into a single render() function.

Also clean up some naming on the way.

2 years agovulkan: Remove the VulkanOp.upload() vfunc
Benjamin Otte [Thu, 13 Jul 2023 19:12:36 +0000 (21:12 +0200)]
vulkan: Remove the VulkanOp.upload() vfunc

It's not used anymore.

2 years agovulkan: Add an UploadGlyphOp
Benjamin Otte [Fri, 14 Jul 2023 18:55:45 +0000 (20:55 +0200)]
vulkan: Add an UploadGlyphOp

Now all the uploads have their own op.

2 years agovulkan: Split out a function
Benjamin Otte [Fri, 14 Jul 2023 18:53:54 +0000 (20:53 +0200)]
vulkan: Split out a function

Split out the function that uploads using a buffer, so that it can be
used with an area to only update parts of the image.

That feature is not used yet, but will be in future commits.

2 years agovulkan: Remove unused functions
Benjamin Otte [Thu, 13 Jul 2023 19:21:46 +0000 (21:21 +0200)]
vulkan: Remove unused functions

2 years agovulkan: Merge the two upload ops
Benjamin Otte [Thu, 13 Jul 2023 18:56:57 +0000 (20:56 +0200)]
vulkan: Merge the two upload ops

Now they both use the same upload code.

2 years agovulkan: Merge te 2 upload ops
Benjamin Otte [Thu, 13 Jul 2023 17:48:50 +0000 (19:48 +0200)]
vulkan: Merge te 2 upload ops

They are about to share a ton of code, sothey should be in the same
source file.

This commit just does the copying, no functional changes.

2 years agovulkan: Fold functions into only caller
Benjamin Otte [Thu, 13 Jul 2023 12:30:16 +0000 (14:30 +0200)]
vulkan: Fold functions into only caller

Now that the VulkanOp does begin/end of render passes, there's no need
to have a renderpass function for it anymore.

2 years agotests: Reduce number of random fonts
Benjamin Otte [Thu, 13 Jul 2023 10:56:17 +0000 (12:56 +0200)]
tests: Reduce number of random fonts

We were clowing through all the Pango caches for no benefit.

It made the test generation stuck in fontconfig loops instead of
quickly generating tests.

So don't do that and limit the different fonts to some reasonable list
of options.

2 years agovulkan: Don't merge too many drawing commands
Benjamin Otte [Thu, 13 Jul 2023 10:30:29 +0000 (12:30 +0200)]
vulkan: Don't merge too many drawing commands

If a command takes too long to execute, Vulkan drivers will think they
are inflooping and abort what they were doing.

For the simple color shader with smallish nodes, this happens around
10M instances, as tested with the output of
  ./tests/rendernode-create-tests 10000000 colors.node

So just limit it to way lower, so that we barely never hit it, ut still
pick a big number so this optimization stays noticable.

2 years agovulkan: Simplify
Benjamin Otte [Thu, 13 Jul 2023 09:23:02 +0000 (11:23 +0200)]
vulkan: Simplify

The renderpassop always has a matching end op, so there is no need to
check for the end of operations and emit one manually.

2 years agovulkan: Merge function into only caller
Benjamin Otte [Thu, 13 Jul 2023 09:17:04 +0000 (11:17 +0200)]
vulkan: Merge function into only caller

The renderpass reshuffling means we can move a bunch of functions now.

This is one of them.

2 years agovulkan: Don't try that hard to use clear
Benjamin Otte [Wed, 12 Jul 2023 09:38:32 +0000 (11:38 +0200)]
vulkan: Don't try that hard to use clear

For small regions, the optimization doesn't matter that much, so we
don't need to do lots of work on the CPU.

In particular, this should catch icons and their backgrounds (32x32),
but I was generous in selecting the number.

Gets my discrete AMD on widget-factory back to the 1900fps it had before
this optimization while making the driver clock the GPU's shader at
1.7GHz instead of the 2.1GHz it used before.

2 years agovulkan: Try really hard to use clear
Benjamin Otte [Wed, 12 Jul 2023 09:04:25 +0000 (11:04 +0200)]
vulkan: Try really hard to use clear

Using clear avoids the shader engine (see last commit), so if we can get
pixels out of it, we should.

So we detect the overlap with the rounded corners of the clip region and
emit shaders for those, but then use Clear() for the rest.

With this in place, widget-factory on my integrated Intel TigerLake gets
a 60% performance boost.

2 years agovulkan: Add a clear op
Benjamin Otte [Wed, 12 Jul 2023 07:26:24 +0000 (09:26 +0200)]
vulkan: Add a clear op

The op emits a vkCmdClearAttachments() with a given color. That can be
used with color nodes that are pixel-aligned and opaque to significantly
speed up rendering when the window background is a solid color.

However, currently this fails a bit outside of fullscreen when rounded
clip rectangles are in use to draw rounded corners.

2 years agovulkan: Adapt a function
Benjamin Otte [Wed, 12 Jul 2023 07:21:07 +0000 (09:21 +0200)]
vulkan: Adapt a function

I want to use it for more operations when we can break those down to
operations on the pixels directly, and this function is what's needed
for that.

2 years agovulkan: Implement direct upload for the cairo op
Benjamin Otte [Tue, 11 Jul 2023 13:14:22 +0000 (15:14 +0200)]
vulkan: Implement direct upload for the cairo op

2 years agovulkan: Upload cairo images "directly"
Benjamin Otte [Tue, 11 Jul 2023 07:35:01 +0000 (09:35 +0200)]
vulkan: Upload cairo images "directly"

Instead of using the upload vfunc and going via the code in
GskVulkanImage, copy/paste the relevant code into the command() vfunc.

This is meant to achieve multiple things:
1. Get rid of GskVulkanUploader and its own command buffer and general
   non-integration with operations.
2. Get rid of GskVulkanOp:upload()
3. Get the upload/download code machinery for GskVulkanImage and put it
   with the actual operations.

The current code can't do direct upload/download, that will follow in a
future commit.

2 years agovulkan: Split out a function
Benjamin Otte [Tue, 11 Jul 2023 06:50:20 +0000 (08:50 +0200)]
vulkan: Split out a function

This is refactoring for future changes.

2 years agovulkan: Emit a renderpass op
Benjamin Otte [Mon, 10 Jul 2023 01:42:55 +0000 (03:42 +0200)]
vulkan: Emit a renderpass op

... instead of doing the equivalent things manually by creating a
RenderPass and calling the relevant functions.

Now all renderpass operations are indeed stored in ops.

Also reshuffle the command emission code, because we no longer need to
emit the ops for the base renderpass.

As a result we only submit a single command buffer containing all the
render passes instead of once per render pass.
We also bind vertex buffers and descriptor sets only once now at the
start instead of once per renderpass.

2 years agovulkan: Sort the ops
Benjamin Otte [Sun, 9 Jul 2023 21:45:20 +0000 (23:45 +0200)]
vulkan: Sort the ops

Use the OpClass.stage to order operations:

1. Put upload ops first
   This way we can ensure they are executed first.
2. Move subpasses for offscreens in front of the pass using them.

2 years agovulkan: Store a pointer to the first op
Benjamin Otte [Sun, 9 Jul 2023 21:44:52 +0000 (23:44 +0200)]
vulkan: Store a pointer to the first op

This is not yet useful, but will be soon.

2 years agovulkan: Indent verbose prints again
Benjamin Otte [Sun, 9 Jul 2023 21:44:02 +0000 (23:44 +0200)]
vulkan: Indent verbose prints again

This feature was lost when refactoring, restore it.

2 years agovulkan: Rename offscreenp to renderpassop
Benjamin Otte [Sun, 9 Jul 2023 20:33:54 +0000 (22:33 +0200)]
vulkan: Rename offscreenp to renderpassop

They should be used for all renderpasses, not just offscreens.

2 years agovulkan: Move the render ops to the Render
Benjamin Otte [Sun, 9 Jul 2023 18:28:12 +0000 (20:28 +0200)]
vulkan: Move the render ops to the Render

This is a massive refactoring because it collects all the renderops
of all renderpasses into one long array in the Render object.

Lots of code in there is still flaky and needs cleanup. That will
follow in further commits.

Other than that it does work fine though.

2 years agovulkan: Batch together multiple draw calls
Benjamin Otte [Sun, 9 Jul 2023 14:50:19 +0000 (16:50 +0200)]
vulkan: Batch together multiple draw calls

If multiple instances of the same op appear in order, we can emit one
vkCmdDraw() for all of them together.

So do that.

2 years agovulkan: Unify some functions
Benjamin Otte [Sun, 9 Jul 2023 14:27:02 +0000 (16:27 +0200)]
vulkan: Unify some functions

All the ops that just execute a shader do pretty much the same stuff, so
put it all in a single function that they all call.

It's basically faking a base class for them.

2 years agovulkan: Make Op->command() return the next op
Benjamin Otte [Sun, 9 Jul 2023 13:56:30 +0000 (15:56 +0200)]
vulkan: Make Op->command() return the next op

This way, ops can batch themselves.

They don't dothat yet, but you know where this is going...

2 years agovulkan: Add a Stage enum
Benjamin Otte [Sun, 9 Jul 2023 13:40:48 +0000 (15:40 +0200)]
vulkan: Add a Stage enum

It's declaring at which stage this command should run. So far nothing is
using it, but that will follow in future commits.