Search
Monday, 22nd of July 2019, 3:03:13 UTC
9:16:15
Shinmera
|3b|: any advice on how to use glsl-packing? For some reason pack-structs returns NIL for me. https://plaster.tymoon.eu/view/1460#1460
9:16:16
Colleen
plaster.tymoon.eu/view/1460... Website (XHTML), Title: - Plaster
9:16:22
Shinmera
trying to use it to verify my own packer
9:16:56
|3b|
let me look at it for a bit
9:18:22
Shinmera
do the vec member types need to be (:float 32) instead of :float?
9:19:40
|3b|
looks like it might want a name for struct, so ((:packing :std140) ("struct1" (:struct () ...)))
9:20:00
|3b|
and also bit sizes for float types
9:20:41
Shinmera
Even with those changes I still get NIL
9:21:16
|3b|
does it have the packing-test* files in the repo?
9:22:21
|3b|
load packing-test2.lisp, then run (packing-test2::gen-structs) to see some example struct defs
9:23:25
Shinmera
that errors with "package glsl-packing-io does not exist"
9:24:24
Shinmera
(and loading that file gives another warning)
9:25:08
|3b|
ah, just C-c C-c the forms up to gen-structs (or wait a bit while i copy example output into a "write a readme" issue)
9:25:33
Shinmera
Yeah I got it. Looking at the example output, this should work: https://plaster.tymoon.eu/view/1460#1461
9:25:33
Colleen
plaster.tymoon.eu/view/1460... Website (XHTML), Title: - Plaster
9:25:41
Shinmera
but I still get NIL
9:28:38
|3b|
ah, i think you also need a block
9:29:02
|3b|
since matrix order is per block state or something like that
9:29:27
|3b|
though then it complains about not being able to store anonymous structs in an array :/
9:30:07
Shinmera
Right, so I guess I need to unroll the inner struct?
9:30:23
|3b|
is that something valid to do in glsl?
9:30:50
Shinmera
you mean nesting the struct def?
9:31:39
Shinmera
alright, this flushes. https://plaster.tymoon.eu/view/1460#1462
9:31:39
Colleen
plaster.tymoon.eu/view/1460... Website (XHTML), Title: - Plaster
9:32:07
Shinmera
do you know an easy way to unroll all the uniform fields from there including their absolute offset?
9:33:11
Shinmera
Something like https://filebox.tymoon.eu//file/TVRjMU9RPT0=
9:33:11
Colleen
filebox.tymoon.eu//file/TVR... Image (PNG)
9:34:28
Shinmera
(the above is what I'm trying to verify)
9:40:16
Shinmera
your struct packer seems to not upgrade vec3s to vec4s like the spec says
9:41:22
Shinmera
though the next field is offset by 16
9:41:32
Shinmera
curse the GL spec for making this shit so confusing
9:42:40
|3b|
"int" field looks like wrong offset though
9:42:42
Shinmera
Okey, the first actual difference I see is that the vec3 after the int is offset to 16 rather than 4.
9:43:13
Shinmera
But I don't know which one is right
9:43:18
|3b|
yeah, it might be getting the align backwards?
9:43:24
|3b|
ACTION doesn't remember this stuff
9:43:55
|3b|
you are comparing to values you calculated?
9:44:30
|3b|
might also consider comparing against drivers or ref glsl compiler (that's what my -test and -test2 do)
9:44:56
Shinmera
I have no idea how to get their data
9:45:01
|3b|
is that stuff in glsl spec or gl spec?
9:45:22
Shinmera
https://www.khronos.org/registry/OpenGL/specs/gl/glspec45.core.pdf#page=159
9:45:22
Colleen
www.khronos.org/registry/Op... Application (PDF)
9:47:19
Shinmera
So if I'm reading this correctly the vec3 needs to be aligned to 4N, meaning... 16 bytes?
9:47:32
Shinmera
meaning your implementation is correct
9:48:23
Shinmera
the confusing part to me is that I'm running off of my code and most fields /do/ work
9:49:31
|3b|
https://github.com/3b/3bgl-misc/blob/master/shader-helper/program-interface-query.lisp for getting it from drivers, though don't remember if that gives output in format you want (and probably assumes some of my other libs, but should give general idea)
9:49:32
Colleen
github.com/3b/3bgl-misc/blo... Website (HTML), Title: 3bgl-misc/program-interface-query.lisp at master · 3b/3bgl-misc · GitHub
9:49:45
Shinmera
Ah- right, I forgot completely
9:50:01
Shinmera
My system used to use that entirely before I rewrote it
9:50:12
Shinmera
(as in, it didn't pre-calculate anything)
9:50:36
|3b|
and packing-test2 does the reference compiler thing
9:51:16
|3b|
which is admittedly pretty ugly, though possibly just looking at the output by hand would be good enough if you aren't fuzz-testing it
9:53:00
Shinmera
I'll have a look at the GL query output, thanks
9:55:22
Shinmera
Okey, your implementation is correct (as I thought)
9:56:26
Shinmera
One of those "how did anything ever work" moments
9:56:31
|3b|
ACTION hoped i hadn't broken it since the fuzz-testing :)
9:58:46
|3b|
pretty sure i found bugs in everything i compared against though :/
9:58:56
|3b|
https://github.com/KhronosGroup/glslang/issues/723 for example
9:58:57
Colleen
github.com/KhronosGroup/gls... Website (HTML), Title: glslangValidator assertion failed from vec3(mat2(x)) · Issue #723 · KhronosGroup/glslang · GitHub
10:01:25
Shinmera
I'm sure there's some bugs lingering in glsl-toolkit too
10:05:26
|3b|
yeah, fuzz-testing is good for something with that many permutations
10:05:37
Shinmera
I think there's two compounding issues here
10:05:47
Shinmera
the printing is wrong in my impl
10:08:16
|3b|
(and reading spec, the values from glsl-packing for that struct look right again :)
10:08:35
Shinmera
Okey yep, got it. Printing was one problem.
10:08:50
Shinmera
But the final field in my struct is misaligned.
10:08:52
|3b|
vec3 only takes up 16 bytes in an array
10:17:25
Shinmera
So these are the offsets GL tells me:
10:17:30
Shinmera
("Lights.lights[0].type" . 16)
10:17:31
Shinmera
("Lights.lights[0].location" . 32)
10:17:33
Shinmera
("Lights.lights[0].dimensions" . 48)
10:17:35
Shinmera
("Lights.lights[0].color" . 64)
10:17:37
Shinmera
("Lights.lights[0].intensity" . 76)
10:18:01
Shinmera
why is intensity, which follows a vec3 (so 16 bytes) offset by 12?
10:18:17
|3b|
because the vec3 is only 12 bytes
10:18:32
|3b|
it must be aligned to 16, but only takes up 12
10:18:53
|3b|
and int after that is only aligned to 4 bytes, which fits in 12
10:20:11
|3b|
vec3 takes up 16 in an array of vec3, because each element has to be aligned to 16
10:20:19
Shinmera
yeah, I got it now, thank you
10:20:36
Shinmera
just need to remember how all this crap worked in my engine now :2
10:30:55
|3b|
yeah, that part is always hard :/
10:31:38
Shinmera
Okey, now it all matches!
10:32:20
|3b|
ACTION thinks it is time for me to take a break from code and go do something physical for a while
10:32:40
Shinmera
I think I'll go read a book soon
10:33:17
|3b|
yeah, that would be good too if i had something to read, or play a game if it wasn't same sitting posture as coding :p
10:33:49
Shinmera
If you have a switch you can at least play on a nice laying chair outside
10:34:19
|3b|
ACTION is trying to get in habit of getting up and moving around for a bit every 20-30 min or so, but missed last gr or 2 of breaks :/
10:34:48
Shinmera
No better time than now, then!
10:35:00
|3b|
yeah, need some extended movement to make up for it
10:35:17
Shinmera
ACTION is off to make lunch and read some books
10:35:36
|3b|
ACTION is off to tape & float some drywall :p
10:36:10
|3b|
(well, 'tape' part is done, just 'float' left, and skim coat after that)
Monday, 22nd of July 2019, 15:03:13 UTC