01:33mangodev[d]: is dri3 used for both x11 and wayland, or is it only used for x11, with egl being just for wayland?
01:35mangodev[d]: trying to run an x11 session, it's just a black screen, no logs either ðŸ«
01:35mangodev[d]: any good x11 window managers for testing behavior differences?
01:40mangodev[d]: https://cdn.discordapp.com/attachments/1034184951790305330/1406090247401504768/image.png?ex=68a13316&is=689fe196&hm=599e749e424dc888db228faac5f0363fd7c23bf8a46056f51d48df308c7a3ece&
01:40mangodev[d]: welp
01:40mangodev[d]: that might be part of the issue :|
01:41mangodev[d]: if dri2 is a deleted code path… then how is egl basing itself off dri2?
01:51x512[m]: A lot of places where "dri2" name is used are actually dri3.
01:52mangodev[d]: funky
01:52x512[m]: And whole DRI thing is basically X11-specific thing.
01:53mangodev[d]: i'm still trying to find out why the cursor jitters on shape change, it's driving me insane
01:53mangodev[d]: i don't even know where the root of the issue *is*
01:53mangodev[d]: i can't tell if it's zink, nvk, or even nouveau drm that's the issue
01:54mangodev[d]: radv had a similar issue around 2020 or so, but it was silently resolved by a year later :|
01:54mangodev[d]: it's definitely something to do with the fact that the shape and offset are being set asynchronous of each other
01:54mangodev[d]: but *where*
01:57x512[m]: What DRM ioctl calls are used for cursor shape change in your display server? Does it support atomic modesetting?
01:58mangodev[d]: atomic modesetting doesn't affect it, jitters whether on or off
01:58x512[m]: If so, it can be Nouveau kernel module bug.
01:58mangodev[d]: i'm using kwin wayland right now, kwin x11 session goes to a black screen, although i think that's a configuration issue caused by kde, not by nouveau
01:59mangodev[d]: i presume x11 works many times better due to the presence of dri3 and glx 😢
01:59mangodev[d]: but wayland, despite somehow already being better than proprietary nvidia, feels extremely rough around the edges
02:09mangodev[d]: holy mother of c codebase
02:09mangodev[d]: i forgot old c code is allergic to full words
02:26mangodev[d]: i see why this codebase hasn't been actively maintained in so long ðŸ«
02:29mangodev[d]: this code is written in black magic incantations
02:29mangodev[d]: initialized incantations, that is
02:29mangodev[d]: ```c
02:29mangodev[d]: const struct nvfw_ls_hsbl_bin_hdr *
02:29mangodev[d]: nvfw_ls_hsbl_bin_hdr(struct nvkm_subdev *subdev, const void *data)
02:30mangodev[d]: {
02:30mangodev[d]: const struct nvfw_ls_hsbl_bin_hdr *hdr = data;
02:30mangodev[d]: nvkm_debug(subdev, "lsHsblBinHdr:\n");
02:30mangodev[d]: nvkm_debug(subdev, "\tbinMagic : 0x%08x\n", hdr->bin_magic);
02:30mangodev[d]: nvkm_debug(subdev, "\tbinVer : %d\n", hdr->bin_ver);
02:30mangodev[d]: nvkm_debug(subdev, "\tbinSize : %d\n", hdr->bin_size);
02:30mangodev[d]: nvkm_debug(subdev, "\theaderOffset : 0x%x\n", hdr->header_offset);
02:30mangodev[d]: return hdr;
02:30mangodev[d]: }
02:35mangodev[d]: that's not even the worst
02:35mangodev[d]: ```c
02:35mangodev[d]: static int
02:35mangodev[d]: nvkm_uoutp_mthd_dp_mst_vcpi(struct nvkm_outp *outp, void *argv, u32 argc)
02:35mangodev[d]: {
02:35mangodev[d]: struct nvkm_ior *ior = outp->ior;
02:35mangodev[d]: union nvif_outp_dp_mst_vcpi_args *args = argv;
02:35mangodev[d]: if (argc != sizeof(args->v0) || args->v0.version != 0)
02:35mangodev[d]: return -ENOSYS;
02:35mangodev[d]: if (!ior->func->dp || !ior->func->dp->vcpi || !nvkm_head_find(outp->disp, args->v0.head))
02:35mangodev[d]: return -EINVAL;
02:35mangodev[d]: ior->func->dp->vcpi(ior, args->v0.head, args->v0.start_slot, args->v0.num_slots,
02:35mangodev[d]: args->v0.pbn, args->v0.aligned_pbn);
02:35mangodev[d]: return 0;
02:35mangodev[d]: }
02:35mangodev[d]: ``` so many letters, i have zero idea what they mean
03:46mangodev[d]: i think i'm finally getting to it
03:50mangodev[d]: i think i'm getting far closer
03:50mangodev[d]: ```c
03:50mangodev[d]: static int
03:50mangodev[d]: curs507a_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
03:50mangodev[d]: struct nv50_head_atom *asyh)
03:50mangodev[d]: {
03:50mangodev[d]: struct nouveau_drm *drm = nouveau_drm(wndw->plane.dev);
03:50mangodev[d]: struct nv50_head *head = nv50_head(asyw->state.crtc);
03:50mangodev[d]: struct drm_framebuffer *fb = asyw->state.fb;
03:50mangodev[d]: int ret;
03:50mangodev[d]: ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
03:51mangodev[d]: DRM_PLANE_NO_SCALING,
03:51mangodev[d]: DRM_PLANE_NO_SCALING,
03:51mangodev[d]: true, true);
03:51mangodev[d]: asyh->curs.visible = asyw->state.visible;
03:51mangodev[d]: if (ret || !asyh->curs.visible)
03:51mangodev[d]: return ret;
03:51mangodev[d]: if (asyw->state.crtc_w != asyw->state.crtc_h) {
03:51mangodev[d]: NV_ATOMIC(drm, "Plane width/height must be equal for cursors\n");
03:51mangodev[d]: return -EINVAL;
03:51mangodev[d]: }
03:51mangodev[d]: if (asyw->image.w != asyw->state.crtc_w) {
03:51mangodev[d]: NV_ATOMIC(drm, "Plane width must be equal to fb width for cursors (height can be larger though)\n");
03:51mangodev[d]: return -EINVAL;
03:51mangodev[d]: }
03:51mangodev[d]: if (asyw->state.src_x || asyw->state.src_y) {
03:51mangodev[d]: NV_ATOMIC(drm, "Cursor planes do not support framebuffer offsets\n");
03:51mangodev[d]: return -EINVAL;
03:51mangodev[d]: }
03:51mangodev[d]: if (asyw->image.pitch[0] != asyw->image.w * fb->format->cpp[0]) {
03:51mangodev[d]: NV_ATOMIC(drm,
03:51mangodev[d]: "%s: invalid cursor image pitch: image must be packed (pitch = %d, width = %d)\n",
03:51mangodev[d]: wndw->plane.name, asyw->image.pitch[0], asyw->image.w);
03:51mangodev[d]: return -EINVAL;
03:51mangodev[d]: }
03:51mangodev[d]: ret = head->func->curs_layout(head, asyw, asyh);
03:51mangodev[d]: if (ret) {
03:51mangodev[d]: NV_ATOMIC(drm,
03:51mangodev[d]: "%s: invalid cursor image size: unsupported size %dx%d\n",
03:51mangodev[d]: wndw->plane.name, asyw->image.w, asyw->image.h);
03:51mangodev[d]: return ret;
03:51mangodev[d]: }
03:51mangodev[d]: ret = head->func->curs_format(head, asyw, asyh);
03:51mangodev[d]: if (ret) {
03:51mangodev[d]: NV_ATOMIC(drm,
03:51mangodev[d]: "%s: invalid cursor image format 0x%X\n",
03:51mangodev[d]: wndw->plane.name, fb->format->format);
03:51mangodev[d]: return ret;
03:51mangodev[d]: }
03:51mangodev[d]: return 0;
03:51mangodev[d]: }
03:54mangodev[d]: maybe i could try reaching out to ben when he's available (if he doesn't mind)
16:13kicchou: hey everyone, apologies for the basic question, but i have some pretty small patches i'd like to contribute but i don't know which branch to test them on nor commit to
16:14kicchou: i based them off of the main linus linux but i don't think i should submit them there
16:15kicchou: i fixed some missing entries in the dcb_connector tables and stuff to fix a warning and fix a port being labelled wrong
16:21mhenning[d]: kernel patches should be submitted to the nouveau mailing list
16:22mhenning[d]: drm-misc might be the right branch to test on top of (not 100% sure, maybe one of the kernel devs could chime in) https://cgit.freedesktop.org/drm/drm-misc/log/
16:22mhenning[d]: although tbh for simple stuff you can probably test on top of a recent linus tree and have it work out fine
16:24kicchou: thanks for the tips! i tested on master initially but i just want to make sure i'm not breaching the chain of command
16:30mhenning[d]: yeah, I wouldn't worry too much about that as long as you email your patches to the right place
17:20steel01[d]: Hi divo. I do android support for tegra devices, like the shields and jetsons. Your work on the media engines is of a lot of interest to me as a step towards getting accelerated video in builds using the mainline kernel and oss graphics. Do you have plans to implement the rest of the engines once a implementation style is accepted for nvjpg?
19:42aliciabennet: permutations with replacements is where the order counts. so if quadrant1 that of operand1 is a and quadrant2 of operand2 is c, a takes precedence over c. if another way around , than vice versa c takes precedence over a. hence if your quadrant2 of operand1 is b and quadrant2 of operand2 is d it's or vice versa than b over d or d over b. hence the ordered set. And we found that the
19:42aliciabennet: previous math is probably also very close if not entirely correct. So in another example if quadrant1 is a,x and quadrant2. b y it be axby vice versa would be byxy. In other words we'll be handling conditionals, so if a has offset, so that would indirect access permute things, so at quadrant1 we have offset1 of ax and at quadrant2 we have offset2 of by. hence ax get's different offset and
19:42aliciabennet: is one of 16 possibilities treated as conditional. So if order would not matter in the sum like for add, the conditional would still be there just the second conditional is just padded/filled with same answers.