00:20 karolherbst: imirkin_: no abs with iadd :/
00:21 karolherbst: if you think about it, abs on integers is more complicated than any of the other things we got there
00:22 HdkR: Nobody needs integer abs anyway right? :P
00:23 karolherbst: well, it's painful to implement
00:23 imirkin: karolherbst: really? annoying.
00:23 imirkin: karolherbst: what about ICMP or some shit like that
00:23 imirkin: [not worth it]
00:23 karolherbst: nope
00:23 karolherbst: there is no easy way to lower iabs
00:24 imirkin: well, in theory, maybe ICMP x, -x
00:24 imirkin: dunno
00:24 karolherbst: mhhh
00:24 imirkin: er, ICMP, x, x, -x
00:24 imirkin: although i think that's just == 0 and != 0
00:24 imirkin: there's no < 0
00:25 karolherbst: let me ask nvidia :D
00:26 karolherbst: I2I.S32.S32
00:26 imirkin: ;)
00:27 HdkR: lol
00:30 karolherbst: mhh
00:30 karolherbst: we have emitCond3 on ICMP
00:30 karolherbst: so there is >0
00:30 karolherbst: but
00:30 karolherbst: no neg modifier?
00:30 karolherbst: :/
00:31 karolherbst: yeah... I see no way to do an iabs in one op except i2i
00:34 karolherbst: imirkin: also, what did you mean by "Similar question for OP_NEG."?
00:34 karolherbst: ohh
00:34 karolherbst: got it
00:34 karolherbst: neg(abs(a)) wouldn't be possible as well :)
01:32 Lyude: (if anyone could let in the emails I just sent on nouveau's ML that'd be appreciated)
01:33 imirkin:has no clue who list admins are
01:35 Lyude: yeah same
02:04 imirkin: Lyude: i know this is a dumb question before i even ask it ... but with fermi -- no way to get 2 screens to show different content hanging off a single DP port, right?
02:08 HdkR: Get an ultrawide display ;)
02:08 imirkin: HdkR: too tall.
02:09 imirkin: neck starts to hurt from all the looking up-and-down
02:09 HdkR: Don't rotate it that way then
02:09 HdkR: :)
02:09 imirkin: but then ... too short.
02:09 imirkin: the rotated 24" is about the perfect height
02:10 HdkR: 1440p is too short for me usually as well
02:10 Lyude: imirkin: no such thing as a dumb question! But, yeah unfortunately if it doesn't have MST it can't do daisy chains
02:10 imirkin: HdkR: 1920 ftw!
02:10 HdkR: 4k life :D
02:10 imirkin: although it's not really about the number of pixels
02:10 imirkin: but the number of inches.
02:11 HdkR: 13" 4k woo?
02:11 imirkin: Lyude: =/ the combination of GPUs i have is not ideal. might be time to get a proper one.
02:11 imirkin: the GTX960 is borrowed ... only other DP board i have is a GF108
02:12 imirkin: GP108 has HDMI + DVI.
02:12 imirkin: nothing will do 3 screens =/
02:13 imirkin: HdkR: i've never tried this before, but i might end up with 3x rotated 24" screens... should be interesting.
02:13 imirkin: no way to do it without a giant seam unfortunate
02:14 imirkin: maybe right move is to leave one unrotated.
02:14 HdkR: Hm, 3x rotated 4k displays sounds interesting
02:14 Lyude: imirkin: not even with pll sharing?
02:15 imirkin: Lyude: hm?
02:16 imirkin: oh, i see - maybe in theory. i don't think nouveau lets you do that. and i don't know that nvidia hw supports it.
02:16 Lyude: imirkin: on my AMD R9 380 I'm able to do triple displays since they're all identical modes
02:16 Lyude: huh
02:16 imirkin: yeah, no -- pre-kepler boards only have 2 CRTC's
02:16 Lyude: darn
02:16 imirkin: kepler+ boards have 4
02:16 imirkin: but that only helps if you have the connectors to hook it up...
02:17 Lyude: true
02:17 imirkin: GP108 has HDMI + DVI... what does GM107 have? hm
02:17 karolherbst: Lyude: I was setting up 4 FHD screens on a low end AMD card once ;)
02:17 Lyude: karolherbst: oh?
02:17 imirkin: ah of course. GM107 has DVI, HDMI, and ...
02:17 imirkin: VGA.
02:18 imirkin: i guess my 3rd monitor does have a VGA input, but ... not sure i want that.
02:18 Lyude: Can't do multiple cards at once?
02:18 karolherbst: Lyude: was 4 times DP though
02:18 Lyude: karolherbst: ahhhh
02:18 imirkin: Lyude: sure
02:19 imirkin:was hoping to avoid it
02:19 imirkin: also while my gpu supply is apparently infinite
02:19 imirkin: my cable supply is much more restricted
02:22 imirkin: really i should get a primary non-nvidia board
02:22 imirkin: so i can more easily hack on nouveau
02:25 imirkin: hm. RX 550 for $80 new.
06:03 imirkin: huh. what's fermi missing for ES 3.2? i would have assumed it would have gone along for the ride...
06:21 imirkin: oh duh! blend_equation_advanced
06:39 HdkR: imirkin: Time to implement dumb blending
06:39 imirkin: HdkR: the bit i'm having trouble with is fetching the fb data
06:40 imirkin: [i think]
07:06 imirkin: mwk: any clue how to access the "TIC2" bindings on fermi?
07:07 imirkin: mwk: and separately, what's the "cl" flag? is that a clamp on a texfetch?
11:15 mwk: imirkin: TIC2? not really no
21:09 pmoreau: karolherbst: Thanks!
21:14 karolherbst: pmoreau: didn't runtime test, something might break :/
21:15 pmoreau: I’ll ping you if that happens ;-D
21:16 karolherbst: pmoreau: I am sure it is less broken than my old branch though :D
21:16 pmoreau: Could be :-D
21:16 karolherbst: basically all memory operations should be fixed
21:16 pmoreau: That sounds good
21:16 karolherbst: pmoreau: even passing structs by value into the kernel should just work now
21:17 pmoreau: I’ll give it a try once I’m out of the meeting
21:17 pmoreau: 👍
21:18 karolherbst: mhh packed memory operations are still broken though :/ *sigh*
21:18 karolherbst: really should look into jekstrands alignment stuff
21:18 karolherbst: but that's for next year :p
21:18 karolherbst: pmoreau: what GPU do you have?
21:19 pmoreau: Quite a few Tesla, a couple Fermi and Kepler, one Maxwell v2 and one Pascal.
21:19 karolherbst: mhh, for the pascal one, you could use my "secboot_fixes" branch to enable hmm
21:20 karolherbst: the nouveau one
21:20 karolherbst: it's 4.18 based though
21:20 pmoreau: And some Volta and Turing at work obviously, but those are not for Nouveau. :-/
21:20 karolherbst:was too lazy to rebase his nouveau tree for quite a long time
21:20 karolherbst: probably do it the next time I reboot
21:20 pmoreau: Okay, I’ll try to try that branch before going back home for Christmas.
21:23 karolherbst: wondering what kind of totally useless optimization I could work on next... iadd3? :D
21:24 pmoreau: :-D
21:24 karolherbst: mhh, iadd3 isn't _that_ useless though
21:24 karolherbst: you can use iadd3 for iadd neg a neg b
21:24 pmoreau: Ah, need to pick something else then
21:25 pmoreau: Who wants useful stuff
21:25 karolherbst: but I have a WIP branch for it, so maybe I just finish it
21:25 pmoreau: If you want useless things to work on, I think the current LED driver is monochromatic only at the moment IIRC. ;-)
21:26 karolherbst: :D
21:26 karolherbst: that's not useless
21:27 karolherbst: pmoreau: thing about it, if everything would be more or less equal to nvidia, but with nouveau you are able to do more crazy LED stuff, some people would use nouveau then :p
21:27 pmoreau: Well… :-D
21:28 pmoreau: Call me back when everything else is more or less equal to NVIDIA! :-p
21:29 pmoreau: I guess it depends on how large you are with “more or less”.
21:31 karolherbst: performance obviously
21:32 pmoreau: Hierarchical Z could be nice
21:33 karolherbst: I think we do the basics, just not the fast zcull stuff
21:33 karolherbst: ohhh, I found something good
21:34 HdkR: Something perfectly useless? :)
21:35 karolherbst: not quite
21:35 karolherbst: I have some slcts optimizations not merged
21:35 karolherbst: -0.4% instructions in avg
21:49 karolherbst: mhh "total instructions in shared programs : 7614782 -> 7545812 (-0.91%)"
21:49 karolherbst: nice
21:49 karolherbst: ohh, more shaders from games ported by feral were added
23:02 karolherbst: HdkR: just found a patch to remove the most questionable optimization: mul(a, 2) to add(a, a)
23:03 HdkR: hah
23:03 imirkin_: why is that questionable?
23:03 karolherbst: or is add faster on any hw?
23:03 imirkin_: no, but a is a register
23:03 imirkin_: while 2 is an immediate
23:03 karolherbst: imirkin_: mul(c[], 2) -> add(c[], c[]) won't work
23:03 imirkin_: add a,a can be encoded as 4 bytes on tesla
23:04 karolherbst: or neg a
23:04 imirkin_: but if there's an imm, that adds 4 bytes to the encoding
23:04 karolherbst: mhh
23:04 karolherbst: well neg a would actually work
23:04 karolherbst: imirkin_: mhhhhhh
23:04 karolherbst: imirkin_: same with shl?
23:05 imirkin_: vs what?
23:05 karolherbst: we could prefer doing a shl(a, 1) vs add(a, a)
23:05 RSpliet: shl wouldn't work on floats?
23:05 karolherbst: yeah, it wouldn't
23:05 imirkin_: hm, dunno. would have to check the encoding rules.
23:05 imirkin_: (no shl on floats)
23:05 karolherbst: anyway, the actual benefits on shader-db are way too small
23:06 RSpliet: on Kepler the q is also which is easier to dual-issue... a mul with sth else, or an add with sth else
23:07 karolherbst: on kepler that doesn't matter as all of those are alu ops
23:07 karolherbst: mhh
23:07 karolherbst: are shifts special?
23:07 imirkin_: they could be
23:08 imirkin_: since they only take like 5 bits of immediate
23:08 imirkin_: so they could have a diff encoding
23:08 imirkin_: not sure
23:08 karolherbst: no, I was more wondering in regards to dual issueing for kepler
23:08 karolherbst: as we don't dual issue two shifts
23:09 karolherbst: I remember adding an exception for min/max back then, no idea why I was never thinking abotu shifts
23:09 imirkin_: oh yeah, dunno
23:13 karolherbst: btw, sent out my slct opts again, they have quite an impact on those games ported by feral
23:27 imirkin_: ok cool
23:27 imirkin_: will have a look
23:28 karolherbst: -1.7% instructions and -0.3% gprs if only checking those
23:28 imirkin_: nice
23:36 HdkR: karolherbst: Does your RA make any tradeoffs for occupancy?
23:36 karolherbst: not afaik
23:38 HdkR: ah
23:39 karolherbst: I don't even know if we have any kind of priority when spilling as well
23:40 karolherbst: smart thing to do would be to spill values you basically never use ;) but I doubt we check on that as we would have to keep loops in mind as well
23:42 HdkR: I can't say I've had the pleasure of correctly handling either case :P
23:42 HdkR: Usually ends up being a dumb heuristic of "What is something that its next use case is farthest away"
23:44 HdkR: So definitely not solved the perfect RA/Spill/Occupancy ratio problem :P
23:45 karolherbst: mhh you could backtrack from all returns
23:45 karolherbst: and just pick any you are comfortable with :D
23:45 karolherbst: but yeah, having some kind of loop analysis is more or less required
23:48 joepublic: does a gtx 1050 need non-free firmware to work? asking for a friend
23:48 karolherbst: yes
23:49 karolherbst: well
23:49 RSpliet: HdkR: depending on how you treat a program, that could easily be an incredibly involved heuristic. You'd want to find the longest path in a dependency graph or sth like that...
23:49 karolherbst: depends on your definition of work
23:49 karolherbst: modesetting works without firmware
23:49 karolherbst: but you won't get any hw acceleration
23:49 karolherbst: RSpliet: the longest patch isn't directly the best one
23:49 HdkR: RSpliet: Yes, and it still ends up being a heuristic in the best case. There is no "perfect" version
23:50 joepublic: i must be reading the feature matrix page wrong, in that i thought that situation would say extfw. thanks for explaining.
23:51 RSpliet: karolherbst: oh I agree it's unlikely to be the best heuristic, but the longest path from gen to use (eh... how would that even work with multiple use) gives you the best approximation of instruction distance.
23:52 karolherbst: RSpliet: just that instruction distance is a bad metric here in the first place
23:52 RSpliet: Yep
23:52 karolherbst: the only thing you really care is amoung of read/writes
23:53 RSpliet: if you want to minimise number of spills, you'd have to look at all the instructions' liveness, and find the smallest set such that removing them from liveness reduces the size of live vars enough to satisfy your register allocation
23:53 RSpliet: "smallest set of operands"
23:54 karolherbst: which in the end is still amounf of read/writes you want to minimize
23:54 RSpliet: By which you mean the number of spill/retreive ops?
23:55 karolherbst: well sure
23:57 RSpliet: Yep. If you do this post-instruction scheduling that means identifying the minimal number of operands to push/pop using all livesets with more operands than available registers in the arch
23:57 karolherbst: if ops was operands, then that's not the correct thing to do
23:57 karolherbst: keep loops in mind
23:58 karolherbst: spilling 5 values might be cheaper if the alternative would mean to spill one value used in a nested loop
23:59 RSpliet: Because inside that nested loop you'd be spilling one*x*y values. Yes, you'd have to compensate for repetition due to loop bounds