#:frog_gone: martty's mesa misadventures

1 messages · Page 3 of 1

midnight shore
#

@wanton carbon btw do you know if s_halt is the same as umr stopping the waev?

wanton carbon
#

i am fairly confident it is not

#

i think with the wave state manip working it might be possible to unhalt s_halt-ed waves

#

but there was some footnote in rocm that that puts the queue into some error state

#

i don't know where that error state is

wanton carbon
#

@raven vortex moving it here not to disrupt pixelduck's thread

#

i am dumping the CS of the windows driver

raven vortex
#

oh

#

sqtt contains all the register writes if that's the data you want

wanton carbon
#

i just mutilated umr until it worked 🙂

raven vortex
#

it can work on... windows?

wanton carbon
#

well parsing a pm4 stream from a file, yes

dark vortex
#

oh my god stop before someone files issues about radv on windows not working

wanton carbon
#

too late

#

i am now reasonably confident this can work

dark vortex
#

oh dear

wanton carbon
dark vortex
#

to be clear to any future windows user i will not waste my time booting up windows to debug shit

#

unrelated but I wonder if the windows driver supports GWS (I think not?)

wanton carbon
#

dear god

#

these questions shan't be asketh

dark vortex
#

lol

#

I'd guess it doesn't because the only user on linux is hip stuff which doesn't work on windooze

wanton carbon
#

i have no knowledge of the amd kmd on windows

#

but i'd hazard that indeed it doesn't have any code to make it work

dark vortex
#

still want me to use GWS in radv? :frog_demon:

wanton carbon
#

ye boii

#

doesn't mean it can't have that code in the future 🙂

dark vortex
#

that's ambitious

wanton carbon
#

tf windoze

floral viper
#

I can't believe Windows would do this

fallen nest
#

windows has some weird ass sync primitives if you dig for it

wanton carbon
#

@dark vortex apologies sire, did you have a windows build guide for mesa or am i misremembering

dark vortex
#

I have one for lavapipe

#

I never found a way that didn't involve building llvm sadly

wanton carbon
#

lovely

#

thank you

dark vortex
#

my perception of time is absolutely trashed

wanton carbon
#

acceleration structures accelerate time

wanton carbon
#

windows build kinda scuffed :unsurprised-electric-beast:

#

ye boii

#

was better than expected tbqh

#

@dark vortex nb i didn't need to build llvm

dark vortex
#

huh

#

no shader disasm for you then but ok

wanton carbon
#

i'm gucci 🙂

dark vortex
#

heh

wanton carbon
#

-Dllvm=disabled i passed this

#

then i didn't need llvm

dark vortex
#

ye for radv that works ig

wanton carbon
#

i imagine you need llvm for lavapipe tho KEKW

dark vortex
#

for llvm-based software rasterizers building without llvm isn’t that optimal

wanton carbon
#

probably very fast tho

#

but not great fidelity in output

dark vortex
#

but there is deterministic worst case performance and memory requirements

wanton carbon
#

ssshh

#

i don't wanna attract him

#

also the driver is not being found

#

THOMAS

#

INFO | DRIVER: Located json file "C:\mesa\share\vulkan\icd.d\radeon_icd.x86_64.json" from registry "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers"
INFO | DRIVER: Driver C:\mesa\share\vulkan\icd.d\radeon_icd.x86_64.json is not recognized as a known driver. It will be assumed to be active
DRIVER: Found ICD manifest file C:\WINDOWS\System32\DriverStore\FileRepository\u0389188.inf_amd64_cd9701bcd4981eb7\B389045\amd-vulkan64.json, version "1.0.0"
DEBUG: Searching for ICD drivers named .\amdvlk64.dll
DRIVER: Found ICD manifest file C:\mesa\share\vulkan\icd.d\radeon_icd.x86_64.json, version "1.0.0"
DEBUG: Searching for ICD drivers named C:\mesa\bin\vulkan_radeon.dll

dark vortex
#

oh wait can you try running vkvia

#

I remember this

#

or more accurately, the ptsd is back

#

vkvia might report some random windows error code when you try to load the DLL

#

I’m not sure exactly what field it was but there was some metadata inside the DLL that was missing and memedows returned the error code then

autumn notch
#

Whats up with drivers and three letter acronyms

dark vortex
#

my memory of the 2022 dll loading incident is sparse, the brain tends to suppress memories of traumatic events

dark vortex
#

Hm ok then that’s something different I think

#

but the file is there isn’t it? 🐸

wanton carbon
#

has the exports

dark vortex
#

bruh

#

what happens if you try to load it yourself

wanton carbon
#

lets see

#

ok, i figured it out

#

for some reason radv is compiling a second dll, z.dll

#

that does not get found and then module loading fails

#

any meson whisperers in chat

dark vortex
#

oh

#

that’s zlib

#

for zipping that shader cache afaik

wanton carbon
#

ye i got that

#

but can i ask meson to pretty please static link that shit in

dark vortex
#

--prefer-static

#

maybe?

#

at configure time that is

wanton carbon
#

that does not help because it tries to static link all manner garbanzo from windows (which can't be done)

#

but

#
dep_zlib = dependency('zlib', version : '>= 1.2.3',
                      fallback : ['zlib', 'zlib_dep'],
                      required : get_option('zlib'), static : true)
#

this worky

#

gah

#

vkvia still reports the same

dark vortex
#

might be the metadata issue now?

wanton carbon
#

any recollection of what that was?

dark vortex
#

#questions message

#

just found that

wanton carbon
#

nice

dark vortex
#

the metadata req was vkvia-only then

#

so not sure how much applies

#

if all else fails, dot’s suggestion about windows loader snaps might help 🐸

#

I remember needing to use windbg and foraging through a lot of logspam tho

wanton carbon
#

fug

#

vulkaninfo doesn't work either

#

so i guess i have to solve this

#

no pastduck meson files hanging around that solve this?

dark vortex
#

no

#

iirc I didn’t modify the meson files at all

#

no idea if anything changed (and if so, what)

#

haven’t seriously used windows for almost a year I think

wanton carbon
#

:cat_pain:

dark vortex
#

you did kind of ask for it

wanton carbon
#

i asked for different pain KEKW

#

bangin!

dark vortex
#

nice

#

what was it

wanton carbon
#

that

#

adding version

#

i think its a matter of making an rc file to compile with the dll

dark vortex
#

welp

#

btw how do you intend to even make a windows winsys

#

given the kmd api is proprietary and unstable?

wanton carbon
#

it not be

dark vortex
#

wut

wanton carbon
#

windows has the wddm, which comes with a libdrm equivalent thing

#

which is a stable interface against the kmd

#

you don't talk to the kmd, just the same as linux

#

its in fact more encapsulated

dark vortex
#

yeah I did know about wddm

wanton carbon
#

well you do talk more or less directly to kmd in linux after the initial bit

#

but in the wddm model you don't

dark vortex
#

didn’t know it had a libdrm thing that allows for custom submit etc

wanton carbon
#

wdym?

dark vortex
#

well to submit your stuff you need to have a way to give the kmd a pointer to a cmdbuf that contains the pkt3 at least

#

and probably other vendor specific stuff as well?

wanton carbon
#

yeah thats basically the api it has

#

give a gpuva to the "commands"

#

if you look at radv, it doesn't talk much to the kmd

#

seems to be the same on windows

dark vortex
#

ye the kmd interface isn’t a lot

#

like 9 functions or so?

wanton carbon
#

yeah

#

maybe its enough to just translate those 9 functions

dark vortex
#

should actually be

wanton carbon
#

and so here we are

dark vortex
#

I’m still not sure how good an idea this but you did manage to capture my interest

wanton carbon
#

you mean

#

in a feasibility way or in a "good idea" way

#

as in opening pandora's box

dark vortex
#

idk it feels kinda weird, I guess you could have a pandora’s box moment

#

but rationally thinking about it I doubt that needs to be a concern rn

wanton carbon
#

do you have sth specific in mind

dark vortex
#

no

wanton carbon
#

alrighty

dark vortex
#

well yes actually

#

[RADV]screen freeze and game crash

unplayable fix immediately
os windows 11
gpu some old ass radeon or smth
<end of issue report>

wanton carbon
#

yeyeye

dark vortex
#

not that it’s a likely thing to occur

wanton carbon
#

on the other hand testing against amd prop

dark vortex
#

hmm also right

#

don’t see this as discouraging you from playing with it btw

wanton carbon
#

if there are multiple icds, does the loader pick the first?

#

i'll switch to asking thomas

#

he loves this shit bleakekw

dark vortex
#

well wdym picking the first

wanton carbon
#

well, how does it work when you have both radv and amdvlk

#

do you have to disable one?

dark vortex
#

no at least not on Linux

#

you get different phys devices for each one

#

(sauce: i have all 3 drivers on my desktop)

wanton carbon
#

pogpilled

#

i guess then why is vulkaninfo not doing that

dark vortex
#

frogstare it should

wanton carbon
#

yeah

#

wait

#

probably not gonna be doing stuff before i make stuff with the winsys now is it 😄

dark vortex
#

oh

#

yeah

wanton carbon
#

null winsys doin its best KEKW

dark vortex
#

radv won’t really report physical devices unless you RADV_FORCE_FAMILY it I think

wanton carbon
#

i guess thats a nice self contained place to start

dark vortex
#

you might have to do some phys device detection plumbing

wanton carbon
#

i actually had a moment when i thought that windoze requires driver signing now

#

but that is only for kernel mode ones

#

thanks for the help, i imagine the next bit will take me a while

dark vortex
#

I’ll go sleep and debug hangs more tomorrow, let’s see who’s done first 🐸

wanton carbon
#

enjoy! gn

wanton carbon
#

apparently only vkvia is so picky

#

for just loading a driver the version is not needed

wanton carbon
#

@dark vortex can I ask for a pair of eyeholes

#

isn't this the wrong way around

dark vortex
#

radv pipeline caching is a bit weird I think, afaik meta shaders are cached a bit separately

#

don’t ask me how tho 🐸

wanton carbon
#

well it was crashing for me until i moved the fallback cache creation before the meat shaders

#

well i mean, it is still crashing, but somewhere else now 😄

#

ye ok I see

#

the meta shaders are separately cached, which are stubbed out on win32

#

so it falls back to the global fallback, which is not created on time

floral viper
#

I'm waiting for the inevitable

wanton carbon
#

all good projects lead to that gif

wanton carbon
#

win32 fence: implemented

#

tune in next time to see it blow up!

#

ngl the common vk code is pretty bonkerific in mesa

wanton carbon
#

owo what is this

floral viper
#

D3D
sus

wanton carbon
#

me stuffing an alarming large amount of seemingly random bytes into the kmd

wanton carbon
#

winsys submit takes a const struct radv_winsys_submit_info *submits but no count

floral viper
#

it's got a null terminator

#

source: trust me bro

#

ok but zig unironically has a generalized concept of "pointer with sentinel terminator" which I find to be very funny because no one does that except with C strings

wanton carbon
#

i guess it can be used

#

it is def not used here doe

#

my guess is le code rott

wanton carbon
#

ok, i figured out the flow for fenced submits

#

now the IB format

wanton carbon
#

TDR is achieve

wanton carbon
#

its great how many names they have misspelled in this single api

wanton carbon
#

hmmmmm, it seems like the device_coherent memories don't differ in creation from the incoherent ones 🤔 how does this work

wanton carbon
#

_D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER

midnight shore
#

statstics

floral viper
#

mfw they took statstics in college

wanton carbon
#

by the power of baba and booey I have done it

#

magnificient driver capable of running a single cmdcopybuffer

#

we will not enter the fact that i wasted hours on accidentally overwriting part of a CS with nop padding into the annals

wanton carbon
#

weekend compute

wanton carbon
midnight shore
#

hololens

wanton carbon
#

el mao

#

enum wraps to 32 bits on msvc C

#

what a classic classic bug

#

@onyx vector moment

#

forgot to put type, still compiled

#

C is the best

onyx vector
wanton carbon
#

jeez const variables are not constant values in C

#

horriblu

midnight shore
#

:shocked:

#

post it in the frog discord

wanton carbon
#

will i get immediate ban

#

also i now know what acquirenextimage and queuepresent do and.. i didn't want to know

#

i somehow thought these happen on the gpu 🐸

#

clearly no mental model whatsoever

dark vortex
#

does rt work tho

wanton carbon
#

i don't see why it wouldn't 😛

#

in fact Tear can finally into "hw"RT

#

well i mean when this is usable

dark vortex
#

#855613452118130729 message inb4 windows deck

wanton carbon
#

🐸

wanton carbon
#

now lets see if the kmd interface is stable over updating the droiver

dark vortex
#

noice

wanton carbon
#

alright, lets get proper gpu side sync up (fortunately all the primitives seem to map to the same thing on the CP, so it shouldn't be that hard) + timeline semas

#

then i can try running vuk examples

wanton carbon
#

if that works somewhat then CTS

wanton carbon
#

i wonder why wouldn't I just implement binary semas and fences on top of timeline semas 😈

wanton carbon
#

our boy RADV pumping them fraaaames

#

staggering 44 FPS

#

(debug build)

wanton carbon
#

@midnight shore can meson tell me what command line was used to make a build?

midnight shore
wanton carbon
#

i mean i have a dir i have configured

#

can i ask meson what commandline i used to make it

midnight shore
#

uhh

#

probably no

wanton carbon
#

ah there is

midnight shore
#

I don't know any options like that and there's nothing in build directory in meson-info or whatever that could be easily translated back to your command

#

oh what is it

wanton carbon
#

meson-log.txt has

#

Build started at 2023-04-08T17:59:15.413712
Main binary: C:\Program Files\Meson\meson.exe
Build Options: -Dgallium-drivers= -Dvulkan-drivers=amd -Dbuildtype=debug -Dllvm=disabled '-Dprefix=C:\mesa' -Dlibdir=lib64
Python system: Windows

midnight shore
#

cool

wanton carbon
#

which is exactly what i needed

#

neato

wanton carbon
#

heheh, this is why the speed is nonexistent

#

ahh probably because its reading from WC memory bleakekw

floral viper
#

goofy ahh wc mem

#

(what's wc mem)

wanton carbon
#

ah maybe not

#

write-combined memory

floral viper
#

ah(h)

wanton carbon
#

yeye, thats the issue

#

maybe time to start honouring memory types

wanton carbon
floral viper
#

it did

#

I also googled it and was surprised to see that there were actual results

wanton carbon
#

bas has two articles on it

floral viper
#

ye I know what wc memory is

#

and in fact I even read that article

#

it's just that I've never seen it abbreviated that way

#

like ESO

wanton carbon
#

must've been jaker 1 who did

floral viper
#

and apparently my compiler's ability to unroll abbreviations is limited

wanton carbon
#

yeah, currently i am using intel's implementation of a software blit for presentation

#

but uhh, thats catastrophically slow if the image is not in host_cached

wanton carbon
#

ok, my sus was correct

#

still not fast, but acceptable i guess

wanton carbon
#

CTS time

floral viper
#

hey, I actually know that one

#

"counter terrorist swin"

wanton carbon
dark vortex
#

rt cts when froge

wanton carbon
#

you tell me mr pixel

dark vortex
#

well they’re there and they should work (mostly)(on loonix that is, you tell me how it is on windows)

wanton carbon
#

lets see soon

#

for now cpu cores going brr

#

btw the cts will def fail as i have not implemented the compoot queue

#

and i have already observed some sparkling corruption when using msaa KEKW

dark vortex
#

well if you don’t expose the compoot queue it should work

#

RADV_DEBUG=nocompute

wanton carbon
#

hmm

#

perhaps

wanton carbon
#

i think this cts test is boooged

#

but its also device groups so eh

wanton carbon
#

i am questioning my life choices

#

CTS is pain

wanton carbon
#

yus sparse binding is optional

#

had to disable all the device group tests, I think they are broken

wanton carbon
#

why is specifically this test failing to allocate memory?
ah right, thats the thing i put off implementing

dark vortex
wanton carbon
#

most conformant driver
All=229684 Crash=1 Fail=56754 NotSupported=160895 Pass=12032 QualityWarning=2

#

managed to render a cut down version of the xml

#

jebus how do people do this

#

probably gonna start running smaller bits

autumn notch
#

christ almighty

midnight shore
wanton carbon
#

where do i pass that?

wanton carbon
#

mfw i ran cts for a good hour yesterday after losing the device around minute 5

wanton carbon
#

test flakes between running fine and DEVICE_LOST

#

the two wolves inside of me

wanton carbon
#

inshallah

#

(its still flaking)

wanton carbon
#

metal 🤘

midnight shore
wanton carbon
#

windbg

wanton carbon
#

:frog_gone: martty's mesa misadventures

midnight shore
#

what does frog_gone mean in this context

wanton carbon
#

device lost

#

i just wanted a cool emoji in the title but discord said no

onyx vector
#

wait

#

radv on windows??

wanton carbon
#

bru

#

but yeah, getting there

onyx vector
#

how though, isn't the kernel interface entirely alien

#

and why

#

and who's paying for it

wanton carbon
#

you

wanton carbon
#

but there are some practical benefits if its starts working nicely

onyx vector
#

the interface to it is designed arround passing data into the shader as-if it was some kind of vararg fn call

#

ideally culminating at some point with unified addressing/memory, but we're not there yet

wanton carbon
#

you misunderstood my comment

onyx vector
#

so the way I pass arguments to my kernels is I just yeet them into push constants (with spilling into an UBO mayhaps later)

#

indeed I did

#

but it seems like radv on windows is significantly more effort

#

i didn't think AMD would provide the relevant documentation, but I guess they do

wanton carbon
#

they did not

#

apart from general knowledge of how amd gpus work

wanton carbon
onyx vector
wanton carbon
floral viper
#

url shortener
frogstare

#

sussy link

wanton carbon
#

don't be a sussy and click it

floral viper
#

good wallet link frogapprove

dark vortex
#

so how is radvindows going along

#

can't wait to tell r2d2 in the vk server that there is oss amd drivers for windows

wanton carbon
#

oh no

dark vortex
#

you're lucky it was a joke

wanton carbon
#

so i wanted to see what the submission looks like from amdvlk

dark vortex
#

radbg implementing this when frog_whip

wanton carbon
#

gfx11
ah yes, the hw i definitely have

dark vortex
#

it's not gfx11 specific

#

should work on gfx10+

wanton carbon
#

but radbg does do single stepping

#

"radbg"

dark vortex
#

this wouldn't require a trap handler at all

#

hm

#

maybe not, you just gotta get the waves to stop once

#

maybe raise an exception in some other way or something

wanton carbon
#

the point of the trap handler is to support breakpoints

#

with the amount of concurrency a gpu has i think the trap handler makes a lot of sense

#

you don't want the host for selection between threads, there are too many

dark vortex
#

fair yeah

wanton carbon
#

the only thing needed is generous grant of time

wanton carbon
#

ayuuh

#

an off-topic thing, but i started writing a tut

#

this is the first half

#

if someone takes a read and sees how it works, let me know

autumn notch
#

Grand Prone Ursine

#

Called Locutus

#

I cackled

#

Good read, a bit familiar since I am knowledgeable about this topic from birth but

floral viper
#

Oh that wasn't supposed to be a joke bleakekw

wanton carbon
floral viper
#

Anyways, nice post so far nice

wanton carbon
#

@midnight shore here

midnight shore
#

at first glance, I really like the diagrams, they really convey what happens, but the analogies are uh

wanton carbon
#

delicious

midnight shore
#

Within a single drawcall, each stage can also finish out-of-order (remember that passing over a work item doesn't mean it is done).
However there is a guarantee that dependent work is correctly ordered: the GPU will not execute a fragment shader which depends on a vertex shader that has not yet been completed.

#

huh?

#

I guess you mean that stages within a draw can overlap in time

#

but that's not what comes to my mind when I read the bit I quoted

#

ok well

#

yeah nevermind

wanton carbon
#

yeah its uh, weird

#

should reword it

midnight shore
#

perhaps you could try not using "finish out of order" in any context at all

#

like just say that draw calls that were started execute concurrently or something

#

and that stages within a single draw call also execute concurrently

wanton carbon
#

yes

wanton carbon
midnight shore
#

yeah I didn't read it at normal pace so maybe it's fine

wanton carbon
#

i can tone it up or down ofc

midnight shore
#

well I said "uh" because I wasn't sure about it

#

I'm not saying it's over the top

#

I'll re-read at normal pace once shrotly

#

We now ramp up the difficulty. We introduce a new draw (#5), but this time, we will have a logical depency between between the vertex shader of this draw and the fragment shader of draw #4.

wanton carbon
#

wy us lot lttrs wh fw lttrs do trk

midnight shore
#

looks good overall I think (I have not yet read at normal pace)

#

what I think you could experiment with

#

if you are willing to spend time and/or force someone else to spend time for you

#

there are lots of diagrams that change relatively little from one to another

#

so I'd explore replacing them with an animated svg/css/js/whatever thing

#

and perhaps instead of queue being just a line with things branching off it, you could also say "vkCmdDraw" at each branch point, changing color of each one as that draw is started

#

and perhaps transpose the entire diagram (so queue flows top to bottom, and stages run left to right) but that's a very minor thing

#

I'd also try to use greater distance between hues in your stage pallette

#

because vs and fs look kinda close

#

in terms of color

#

specifically when you look at barrier/feeder control rules

midnight shore
wanton carbon
#

anyways, good feedback, thanks

midnight shore
#

but I've seen some on wikipedia

wanton carbon
#

not a single big video

#

cause i can see that being nice

midnight shore
#

so that you could explore transitions more easily

#

I think the way you depict diagrams is really good, it's really not overwhelming the reader with details

#

actually

midnight shore
#

as it is now, flowing from left to right is good

#

and to fit labels like vkCmdDraw on top you could just rotate them 60 degrees or smth

wanton carbon
#

yeah that sounds neat

midnight shore
#

err

#

I meant diagrams

#

not analogies

#

like that queue and stages stuff

wanton carbon
#

still great

autumn notch
#

they kinda go hand in hand

wanton carbon
#

i think nano is just a fan of monsieur GPU

autumn notch
#

dango stands for

D
A
N
G
O

midnight shore
#

maybe you could somehow make stages flow to the right too, hmm...

wanton carbon
#

that is intentional i guess

midnight shore
#

no I mean the current one is good

#

it's like

wanton carbon
#

important to not ascribe too much temporality to concurrent things

midnight shore
#

yeah

#

it's at a point where if you add more detail it just becomes cluttered and overwhelming

#

yea nevermind

autumn notch
#

I guess dango stands for "DANG, nObody kekwd"

#

also ye I think the diagrams are really readable rn

midnight shore
#

also imo you should explicitly spell out the technical names for each analogy name you introduce

#

e.g. feeder doesn't have a technical googlable term in the article (I guess you could use "command processor"?)

wanton carbon
#

well, but it isn't really the command processor

#

its a bit like that

midnight shore
#

yeah well I guess as it is, it's fine too

wanton carbon
#

the main queue one is I guess on AMD

#

but it is definitely something that should be elaborated

#

how to map the mental model to API and GPU things

#

but haven't written that yet

#

unfortunately i only have the boring cache model to explain memory deps

autumn notch
#

I'm sure you can come up with a convoluted story about a pirate and a wizard or something

wanton carbon
#

yes, but i don't want to add it if it doesn't help

autumn notch
#

Aye

#

Only thing it would help with is the dwindling attention span of the internet's population

wanton carbon
#

u r right

#

i'll just add a temple run video that scrolls with the page

autumn notch
#

excellent

wanton carbon
#

i wonder if amd pulling the plug on polaris and vega spells radw

dark vortex
#

do it frog_whip

#

actually I just installed windows too 👀

#

perhaps one day where I have too much free time I shall Take A Look™️

wanton carbon
#

cue spongebob time card

#

would be fun to work on it more tho

dark vortex
#

ye

#

since i totally haven't just nerdsniped myself how do you figure out the native kmd interface thingy

wanton carbon
#

well you write a vulkan program

#

then you trace the calls

#

it calls into the kernel via the d3dkmt interface

#

then you can dump the arguments

dark vortex
#

what you do for call tracing would've been my question here

wanton carbon
#

windbg

#

but i kinda wanted to make sth nicer on that front

#

i did the dumping just using vs's debugger

#

but thats not ergonomic

dark vortex
#

ic

#

i've actually become really rusty in doing schtuffs in windows I notice

#

(or maybe I wasn't particularly great in debugging-fu ever before I switched to linux, that's also an option KEKW )

dark vortex
wanton carbon
#

yea

dark vortex
wanton carbon
#

but let me know if you wanna hacc on it together or sumfin

dark vortex
#

sure

#

(i am letting you know)

wanton carbon
#

😳

dark vortex
#

need to set up all the windows toolchain stuffs but I might get to that later this evening

wanton carbon
#

sounds good

#

if you can gompile mesa should be good

dark vortex
#

ye

#

you just disable llvm right? 🐸

wanton carbon
#

ye

dark vortex
#

ok nice

wanton carbon
#

oh best part is

#

you also have the 6700xt

#

therefore 100% coverage with a single effort

dark vortex
#

ok gonna start setting things up
(otherwise I’d need to debug rgp segfaulting on a random capture and I don’t really want to do that right now)

dark vortex
#

i may or may not have fallen off a few tangents

wanton carbon
#

story of me life

dark vortex
#

(i am stuck in a 640x480 windows update screen badly upscaled to 4k)

wanton carbon
#

i am getting an aneurysm from reading #engine-dev

dark vortex
#

splendid

dark vortex
#

hnnnng forgot glslangValidator

#

though installing vulkan sdk will be benefishial in general

#

after that I should have it I think

wanton carbon
#

sweet

dark vortex
#

i installed python 3.12, which removed distutils, which meson still uses

#

what the actual fuck

#

i installed python 3.11 now but when I execute python in cmd it launches a windows store instance with the python page

wanton carbon
#

ah

#

yes

#

that is fun

#

i think the best way is using pyenv

dark vortex
#

yeah nice, that worked

#

ok, meson setup went through this time

#

ah, they messed up the dxheaders dep, splendid

#

well "messed up" lol

#

it needs massaging to build radv on main

#
========== Build: 77 succeeded, 0 failed, 6 up-to-date, 4 skipped ==========
========== Build started at 20:24 and took 16,528 seconds ==========
```splendid
wanton carbon
#

schplendid

#

ye i had to fix some stuff

#

you can use my branch

dark vortex
#

already fetching

#

ok built

wanton carbon
#

like a brick shithouse

#

next is making vulkaninfo pick it up

#

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers

#

put a key in here

#

at least thats what I did

dark vortex
#

oh i just set VK_DRIVER_FILES

#

that worked for me

#

it doesn't seem to find any devices tho

wanton carbon
#

wdym?

dark vortex
#

well vulkaninfo outputs nothing

#

hmm maybe it crashes, isn't it supposed to print an error

wanton carbon
#

with my branch?

dark vortex
#

yes

#

trying to figure out how I can get the vs debugger to launch random exes instead of random project names

wanton carbon
#

you can just drag the exe onto the vs window

dark vortex
#

ah, it needs device->ws->query_value implemented

#

stub incoming

#

btw how do we want to do collaboration stuff (as in merging changes etc)

#

i do merge requests to your branch?

wanton carbon
#

i can give you push rights?

#

we just pinky promise not to force push until its time to clean up

dark vortex
#

also works for me

wanton carbon
#

inviteth

dark vortex
#

thanks

#

ima push the the query_value stub right away

#

it do be fixin vulkaninfo

wanton carbon
#

fixin' for a fix

dark vortex
#

vkcube do be runnin too

wanton carbon
#

on the radw?

dark vortex
#

yes

wanton carbon
#

pogue

#

(as the kids say)

dark vortex
#

heh

wanton carbon
#

so where i got to was

#

cts has a big submit that just loses the device

#

also I think some things don't really work

#

like MSAA

dark vortex
#

hm msaa is a weird one

wanton carbon
#

but i am happy that they didn't muck up the kmd interface

dark vortex
#

don't think you'd depend on lots of kernel stuff there

wanton carbon
#

so

#

there is some part of amdgpu that i kind of just copied out

#

might need a second look if i got it right

#

if i didn't it might explain things

dark vortex
#

might be worth looking into d3dkmt interface dumping on the prop drivers with that test

#

do you have some pointers on how to do the do with dumping call params with windbg

wanton carbon
#

ye, it would be worth

dark vortex
#

been a long time since I used the thing

wanton carbon
#

not sure tbh

wanton carbon
#

i used windbg to trace, not for the dump

#

but i imagine i would do the following

#

which is what i do by hand

#

bp at win32u!...D3DKMT call... -> when bp is hit, put bp on a frame above on the call -> RCX is the pointer to the struct taken by the call

wanton carbon
dark vortex
#

wdym the list? list of all tests?

wanton carbon
#

dEQP-VK.api.command_buffers.record_many_draws

#

found it

#

this has some variants

#

not sure which one was the deadly

dark vortex
#

bleh

#

did you also encounter

CMake Error at C:/Program Files/CMake/share/cmake-3.27/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Python3 (missing: Python3_EXECUTABLE Interpreter)

      Reason given by package:
          Interpreter: Cannot use the interpreter "C:/Users/fried/.pyenv/pyenv-win/shims/python"
#

also i love how windows gives me "fried" as username, thank you windows for letting me choose this would definitely have been my choice

wanton carbon
#

classic deepfried richard

#

uhhh

dark vortex
#

wtf indeed

#

especially if you consider this earlier message
Found PythonInterp: C:/Users/fried/.pyenv/pyenv-win/shims/python3 (Required is at least version "3")

#

great

#

there's about 5 reasons this message can appear

#

there is no way to distinguish between any of these 5 reasons

wanton carbon
#

splendid

dark vortex
#

ah I think it just straight up cannot handle softlinks

#

i'll just try the stupid windows store thing

#

oh my fucking god my parents got a notification because I downloaded something from the windows store

#

jesus fucking christ

floral viper
#

why does your install have parental controls lmao

dark vortex
#

it was never removed since I was 14 lmao

#

oh fuck I think I have 20 minutes left

floral viper
#

I thought you freshly installed windows or something

#

anyways, I mustn't waste your precious time

dark vortex
#

yes but through association with my account (because fresh installs aren't possible without signing in anymore, congratulations for choosing win11) the parental controls demons have been awoken from their slumber once more

floral viper
#

ebic

dark vortex
#

more cts build failures

#

oh stale cmake cache

#

what will happen sooner, cts build finishes or parental controls cut off my access or my dad disables the parental controls

#

funny, didn't want to waste ssd space with windows

#

now spinning rust is the bottleneck on builds

wanton carbon
#

rust ruins the day yet again

dark vortex
#

dEQP-VK.api.command_buffers.record_many_draws_primary_2 repros the issue

wanton carbon
#

nice

#

then we arrive on the same page

dark vortex
#

hmmm

#

trying to break all d3dkmt functions only yields some in gdi32

#

namely D3DKMTOpenAdapterFromHdc and D3DKMTOpenAdapterFromGdiDisplayName

wanton carbon
#

its not called that

#

hold on

#

they look like this

#

d3dkmt is the userland name, but this one is the kernel one or something

#

win32u!NtGdiDdDDISubmitCommand is the submit for ex

dark vortex
#

ah yes

#

those are a few more

#

hackerman voice I'm in

#

right as the music beatdrops hard, this is peak programming

#

g

#

ops

#

this is not the debugger window

wanton carbon
#

i haven't begun to peak myself

dark vortex
#

you said the parameter structs are the same between the D3DKMT and the NtGdiDdDDI functions?

wanton carbon
#

yes

#

so for the submit RCX (in the right frame) is D3DKMT_SUBMITCOMMAND*

dark vortex
#

oh right one frame above

wanton carbon
#

ye

dark vortex
#

just trying to find my way around the very first QueryAdapterInfo call

#

it's the same value in both frames so /shrug

wanton carbon
#

hmm?

#

so what i found that worked was that i moved the bp into the caller, on the call

#

this way rcx is not clobbered

#

it may be that you can find it in the ntgdi* frame too, but i didn't look enough

dark vortex
#

not sure what you mean, I just looked at .frame /r 1 to determine the registers of the caller frame, and shrimply r to determine current frame regs

#

both turn out to the same value, rcx=00000009ca4fdc98

wanton carbon
#

if it works it works

#

and does it seem to be a pointer of expectation

dark vortex
#

might be a special case tho

wanton carbon
#

but also

#

so the rcx is not preserved from the calling frame

#

regs are not like variables when using the debugger

dark vortex
#

I know

wanton carbon
#

i thought you'd know 😛

dark vortex
#

hence I'm still a bit confused what switching frames actually achieves here

wanton carbon
#

so thats not what i did

#

i put a breakpoint on the caller

#

which will be hit next time

#

with a good rcx

dark vortex
#

aaah I see

#

so in the backtrace I choose the RetAddr of frame 0 or of frame 1 thonk

#

as in does the RetAddr of frame 0 belong to the next instruction in frame 1 (in which case I'd probably want to break on the one of frame 0)

wanton carbon
#

uhh

dark vortex
#

(it seems that yes it does)

wanton carbon
#

good

floral viper
#

what is going on here

wanton carbon
#

uhh

#

a milkshake

dark vortex
#

hmm actually

#

I probably don't want to break at the return address of the NtGdi function

#

that gives me absolutely nothing because rcx has already been clobbered (since that is right after the NtGdi function executes)

#

me is very confuse

#

it is definitely not late or anything

wanton carbon
#

me going clobbin' with the boys

dark vortex
#

so, when you say you break at the caller, you probably want to break before the function that ends up calling NtGdi* is called, right

#

(the call conv does not say to preserve rcx or does it)

wanton carbon
#

ye before

#

on the call

dark vortex
#

uuuh do you remember what that was in windbg commands

wanton carbon
#

i mean its a syscall kinda thang

#

just go one frame up and look for the call? break there?

dark vortex
#

righto

wanton carbon
#

sorry, didn't do this bit with windbg

dark vortex
#

what did you do it with, vs debugger?

wanton carbon
#

ye

dark vortex
#

hm

#

still not sure if I got the right data, looks weird

#

am now right at the start of the function that calls NtGdi* stuff

wanton carbon
#

the call will look like this

#

call rdx

dark vortex
#

none of the calls in my stack (up to NtGdiDdDDISubmitCommand) look like that

#

perhaps compiler switcherood some things

#

ah ye I think I see it

#

so I'm supposed to break on exactly that call?

wanton carbon
#

i think things changed

#

amd switched to a dxgi swapchain now

#

well well well

dark vortex
#

oh well

#

hmm, other idea

#

since we can call D3DKMTSubmitCommand ourselves we should be able to obtain the location of that as a module offset (which I presume is some random place in their proprietary kmd shim stuff if I understand the driver stack correctly?)

#

we can break on that too, and then we should always have the actual D3DKMT struct without callstack traversal magic

wanton carbon
#

this is how it looks like in my driver atm

#

this is just one up from the NtGdiDdDDISubmitCommand

#

and i checked now that rcx is the correct ptr

dark vortex
#

one up from NtGdiDdDDISubmitCommand is

00007ffe`56885be7 498b86d0000000  mov     rax,qword ptr [r14+0D0h]
00007ffe`56885bee 4c8ba890d30000  mov     r13,qword ptr [rax+0D390h]
00007ffe`56885bf5 4d8ba5a8090000  mov     r12,qword ptr [r13+9A8h]
00007ffe`56885bfc 498b842458220000 mov     rax,qword ptr [r12+2258h]
00007ffe`56885c04 488d8d20010000  lea     rcx,[rbp+120h]
00007ffe`56885c0b ffd0            call    rax
wanton carbon
#

weird

#

but for me the rcx is correct now in NtGdiDdDDISubmitCommand too

dark vortex
#

yeah i just noticed actually

#

i think the one i have makes a lot of sense too

#

the rcx I had before that was from a NtGdiDdDDISubmitCommand call from inside CreateDevice

wanton carbon
#

ahhh

dark vortex
#

maybe that had some weird stuff in it or something

wanton carbon
#

ye

dark vortex
#

so uh, how do you calculate the driver private data size when submitting stuff

#

or rather what is is based on

wanton carbon
#

private data is the secret bit

dark vortex
#

yeah

wanton carbon
#

you can look at what radw does, but honestly i didn't manage yet to decode what is in there

dark vortex
#

radw does some weird calculations on constants

#

the result is quite drastically different from what the prop driver gives tho

wanton carbon
#

yes

#

it seems like there are sort of chunks passed there

dark vortex
#

ye

wanton carbon
#

so ye, next step: figure out what those are ig

#

maybe with an intermediate step of making a dumper for the privatedata

dark vortex
#

well for today, I'll just try to properly decode the submit struct (and try to reconcile the private data with what you found out) (seems there are multiple chunks frog_detective) and then I think I'll go do the eep

wanton carbon
#

nice

#

i'll do the eep rn

#

lmk if you sleuth out something fun

dark vortex
#

yup

#

yeah if I had to guess it's pretty much just the IBs referenced by that submit, I think the unknown thingy might be some speshul flags thingy

#

bit random but I think tomorrow I'll try getting RADV_DEBUG=hang to work, perhaps it can help figure out where things go wrong

wanton carbon
#

ye that was my reversing as well

floral viper
#

Well explained concept is here

#

What are you guys doing to the kernel

wanton carbon
#

nice try lisa

#

its just to automate dumping d3dkmt calls

floral viper
#

My phone actually wanted to autocorrect "kernel" to "Jensen" agonyfrog

#

Why do you want to dump d3dkmt calls

#

Explain like I have a bachelor's in computer science

wanton carbon
#

graphics drivers have two parts, the user mode driver (umd) and the kernel mode driver (kmd)

#

in a somewhat weird way, even though the kmds are bespoke, they still kind of expose a sort-of-ish unified interface

#

in loonix this is the libdrm

#

on windows this is a bit more complex

#

but there is a direct interface which is the d3dkmt

#

dx12/dxgi goes through a different path

#

but anyways, so what the vulkan amd umd driver does is talk to the kmd, via the d3dkmt interace

#

we have an existing umd, radv

#

it needs to be taught how to talk to the windows kmd

#

(this is called the 'winsys')

#

so we are looking at the amd umd driver comms

#

@floral viper was that good for ELIHABICS?

floral viper
#

It was, ty frogeheart

#

One of u should get a job at AMD so you can look at the code yourself

#

Alternatively, you can try requesting access

wanton carbon
#

but then you can't write the code yourself

#

i believe people have repeatedly asked AMD to document these bits

#

but they did not

#

so

floral viper
#

Welp

#

How many other blockers are there to get radv running on Windows

wanton carbon
#

it is already running for a very limited definition of running

floral viper
#

Let's say uh hello triangle

wanton carbon
floral viper
#

Let's say uh passing the entire Vulkan cts

wanton carbon
#

that went 0-100 very fast

floral viper
#

Where are we right now

#

I saw a spinning cube even

wanton carbon
#

ye

#

current issue is that big submits fail bc we didn't figure out all the bits on the submit (probably)

#

then there will be an issue of having to port some of device stuff from the linux kmd or reversing device init

floral viper
#

How big is big

wanton carbon
#

don't recall, its one of the cts tests

#

then there will be some smaller bits that might require more massaging, like idk sparse and other randos

floral viper
#

sounds good

#

how do I build radv on Windows

#

half joking because I won't be at my PC for a few days (at an ISV visit)

wanton carbon
#

are you at geryu's

floral viper
#

I am farther north

wanton carbon
floral viper
#

What does this fork add? The bits that make it worky on Windows?

wanton carbon
#

yea

#

you can already build mesa on windows

#

and radv, but its not superbly functional

floral viper
#

Me irl

wanton carbon
floral viper
#

*this rad boy

wanton carbon
#

@dark vortex am prepping sth nice

dark vortex
#

noice

#

didn't get around to do a lot today

#

watched some halloween (the series) movies instead

wanton carbon
#

also nice

#

let me put this code up somewhere

#

so you can revel

#

inv sent

#

may weep (in private)

#
NEW CHUNK
0 - 1e0

PKT3_DMA_DATA ENGINE_SEL(1) SRC_CACHE_POLICY(0) DST_SEL(2) DST_CACHE_POLICY(0) SRC_SEL(3) CP_SYNC(0) SRC_ADDR_LO_OR_DATA(580000) SRC_ADDR_HI(3) DST_ADDR_LO(0) DST_ADDR_HI(0) BYTE_COUNT(1e0) DIS_WC(0) SAS(0) DAS(0) SAIC(0) DAIC(0) RAW_WAIT(0)
PKT3_EVENT_WRITE EVENT_TYPE(19) EVENT_INDEX(0)
PKT3_SET_CONTEXT_REG gfx1030.mmDB_RENDER_OVERRIDE(0)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SC_AA_CONFIG(0)
PKT3_SET_CONTEXT_REG gfx1030.mmVGT_TESS_DISTRIBUTION(d8181e0c)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SC_CONSERVATIVE_RASTERIZATION_CNTL(100000)
PKT3_SET_CONTEXT_REG gfx1030.mmVGT_LS_HS_CONFIG(0)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SC_BINNER_CNTL_0(19fc00a3) gfx1030.mmPA_SC_BINNER_CNTL_1(3ff0000)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SC_SCREEN_SCISSOR_TL(0) gfx1030.mmPA_SC_SCREEN_SCISSOR_BR(40004000)
PKT3_SET_CONTEXT_REG gfx1030.mmDB_DFSM_CONTROL(2)
PKT3_WRITE_DATA PFP(1) WR_CONFIRM(1) WR_ONE_ADDR(0) memory async(5) DST_ADDR_LO(1b0010) DST_ADDR_HI(1)
PKT3_SET_CONTEXT_REG gfx1030.mmTA_BC_BASE_ADDR(3002810) gfx1030.mmTA_BC_BASE_ADDR_HI(0)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SU_POINT_SIZE(80008) gfx1030.mmPA_SU_POINT_MINMAX(ffff0000) gfx1030.mmPA_SU_LINE_CNTL(8)
PKT3_SET_CONTEXT_REG gfx1030.mmDB_STENCILREFMASK(1ffff00) gfx1030.mmDB_STENCILREFMASK_BF(1ffff00)
PKT3_SET_CONTEXT_REG gfx1030.mmDB_DEPTH_BOUNDS_MIN(0) gfx1030.mmDB_DEPTH_BOUNDS_MAX(3f800000)
PKT3_SET_CONTEXT_REG gfx1030.mmPA_SC_WINDOW_SCISSOR_TL(80000000) gfx1030.mmPA_SC_WINDOW_SCISSOR_BR(40004000)
#

i set up dumping of IBs

#

and decoding

#

i detoured the d3dkmt stuff so we can bookkeep

#

its p nifty

dark vortex
#

oi nice

wanton carbon
#

gfx1030.mmPA_SU_POINT_MINMAX(ffff0000)

will these be renamed if you change ceo @floral viper

floral viper
#

That naming looks fine

dark vortex
#

alternate timeline: jensen huang, ceo of amd, introduces PA_HUANG_POINT_MINMAX registers

#

ok now with a bit more eep let's take a look with them noice tools

#

did git just sarcastically clone this repo

dark vortex
#

esp with lots of fields I think it's moar readable

wanton carbon
#

nah i just made the shrimpiest thing

#

feel free to improve stuff in any way

dark vortex
#

hrm

#

it can't map the IBs in the actual submit :/

wanton carbon
#

wdym?

#

thats what was i was dumpen above

dark vortex
#

not sure but for me, I get "unmappable", which is probably because the driver already has the stuff mapped so we can't doublemap it

#

setting up detouring of D3DKMTLock calls and intercepting mapped ptrs as we speak

#

also wtf is D3DKMTLock (non-2)

#

ima skip that for now lol

wanton carbon
#

weird

wanton carbon
dark vortex
#

ye but they have some weird ass "array of pages to map" shit in there

wanton carbon
#

ah do you have rebar on

dark vortex
#

suppose I do yea

wanton carbon
#

i don't

#

then ye with rebar it might keep shit mapped

#

alternatively just unmap it lol

#

then map it again

#

fuck you driver

dark vortex
#

lmao

#

I just do another map of handle<->mapped pointer

#

nonintrusive and easy

wanton carbon
#

will work

#

but does it send a message

dark vortex
#

lmao

#

this is really weird tho

#

they have an INDIRECT_BUFFER packet that apparently jumps to 0x30001c000, but none of the cmdbufs in the submit are located there thonk

wanton carbon
#

it doesn't have to be in the submit data, no?

#

i think we just need to follow indirects the same way

#

map and decode

dark vortex
#

yeah, doin' it rn

#

it's a bit annoying because I can't write any locals from the umr decode callbacks

#

right now I just write globals which isn't very clean but it should work ig

wanton carbon
#

it just needs to hold together until we figure it out

dark vortex
#

looks like it werks

#

just some more state setup

#

what I'm not sure about is how all of the IBs are connected

#

if I had to guess they're probably meant to be executed one after the other but it'd be up to the kmd to actually chain them together then

wanton carbon
#

ye

#

it seemed like they are preambles

dark vortex
#

yeah

#

i think imma try ramping up the number of draws and seeing if anything changes

#

even at 100k draws there isn't really a whole lot of difference

dark vortex
#

i looked for this like 5 times now so ima just pin it so I don't have to look 6 times

#

the test falls apart at exactly 16384 draws

#

that number still works but anything above that goes boom

#

the ib size doesn't change when going from 16384->16385 though, so something else is probably going on

#

I'm also not completely sure if the GPU actually hangs?

#

I don't get any device_lost or anything, nor do I see TDR mentioned anywhere in system logs

wanton carbon
#

hum

#

what happens?

dark vortex
#

It Just Fails™️

wanton carbon
#

nice

#

ah i recall now

#

i think the device might be lost, its just never uncovered if you don't run a second test

dark vortex
#

actually the test starts failing at 16385 draws, but the GPU doesn't start hanging there

#

it hangs at some other number I guess

#

tfw installing wsl for grep because windows commandline tools are just that garbage

#

i also noticed the chunk's cmd size member is less than the actual cmdbuf's size probably

#

I record the draw 100k times but there are only 6k packets in the log, and the size is also onlx 0xfc00

#

it seems like the size indeed maxes out at 0xfc00

#

not sure how that is supposed to work thonk

wanton carbon
#

splits ibs at that size or smth?

dark vortex
#

there are no additional ibs in that chunk

wanton carbon
#

humm

dark vortex
#

I am pretty sure the ib continues beyond that size, too

#

I don't think any ib just ends with the nth draw packet, we just stop parsing there

wanton carbon
#

oh

#

maybe don't divide by 4

dark vortex
#

that's not exactly it but ye you might be onto something

#

hehe yup exactly, they do split the IBs

#

huh it was always there in the file

#

ok not questioning it lmao

#

wonder if it's always safe to split into chunks of 0xfc00 dwords with packet sizes and stuff

#

don't think it is because there's packets with arbitrary sizes

#

gonna just put the splitting into radeon_emit logic directly

#

ah nvm the amdgpu winsys has splitting logic too

#

yoink

#

actually can't just yoink

wanton carbon
#

yeet

#

did bas land the winsys refactor?

#

might be worth forwarding to it

dark vortex
#

rebasing on top of half a year of changes frog_sweat

#

i need to rework submission quite a bit anyway

#

since the limit is so laughably low (less than 16KB, wtf?) I'm considering to just always allocate CS BOs with a size of that limit

#

then we just write into the mapped ptr directly and chain more stuff in cs_grow if necessary

#

not sure which winsys refactor you mean btw

wanton carbon
#

the cs munging can be shared with loonix

wanton carbon
dark vortex
#

it mainly is so cluttered because it has to account for queues where we can't chain shit

#

which is video stuff

#

no idea how that is supposed to work with the d3dkmt limits and I don't think it's very useful to worry about it

wanton carbon
#

i have not begun to worry

#

but its code written ig

dark vortex
wanton carbon
#

uh

#

sorry, can't recall

dark vortex
#

hm ok

wanton carbon
#

additional 6 mo of bikeshed has degraded my neural matter

#

but i was trying all manner of random shit :/

dark vortex
#

it's kinda necessary now because we can't just patch this in

#

but it doesn't seem like any commands from the non-preamble cmdbuf go through atm

#

oh we lose the device too lol

#

interesting, this must be hanging the CP

#

so there's no soft recovering out of this one

#

and yet, my session remains completely unharmed

wanton carbon
#

superior os you say

dark vortex
#

2 things

  • messed up size of private data
  • forgor to pad
#

with that I can at least submit the preamble stuff again without things blowing up

wanton carbon
#

neat

#

also remember to upstream so that i may benefit too later

dark vortex
#

I’m trying to get submitting anything but the preamble working rn

dark vortex
#

messed up size once more

#

now I'm hanging the gpu properly

#

:O

#

hmmm

#

ok, so I seem to have figured things out

#

we shouldn't set any flags for the preambles, both should be 0

#

with that, I can get the smoke tests to pass again

wanton carbon
#

humm

#

but it seems like prop is setting flags frog_think

dark vortex
#

on some things

#

perhaps they control some scheduling/sync stuff or w/e

#

prop does sometimes submit 2 IBs with both flags being 0 I think

wanton carbon
#

gib updated dadachum

dark vortex
#

you mean the log i got?

#

i pushed my changes so far too

#

the draw is now executed 200k times, if that's a problem you can just revert the last commit

wanton carbon
#

ok now i see it

#

let me try

dark vortex
#

also uh the 2 ib with both flags 0 is not where I thought it'd be, it's not generated by the main submit at least

#

it works for us tho so ¯_(ツ)_/¯

wanton carbon
#

ngl the takeaway will be that the prop driver does various random stuff out of superstition

dark vortex
#

ooof

#

i see a major problem

wanton carbon
#

yesh