#Fwog and co.

1 messages ยท Page 17 of 1

shell inlet
#

highlights are out of the equation because those are not uniform obviously

long robin
#

I think it's about human perception/dynamic range

#

e.g., screens appear to become dark in direct sunlight

long robin
shell inlet
#

I have no time to intake that much info currently

#

what is the takeaway?

long robin
#

First half: less ambient light = monitor effectively has more dynamic range
Second half: designing a tonemapper for HDR output (I can't tldr this)

#

I guess it's less of a perceptual thing, and more that all monitors reflect some light

signal widget
#

If you are curious: #1067777224528375858 message

long robin
#

here are some pertinent slides

#

there must be a human element too. I face a window when I'm on my computer and I notice that the dynamic range on my monitor (and other dark areas of the room) is improved if I use my hand to block outside light from reaching my eyes

heavy cipher
#

real gamers exist in total darkness, i don't understand the relevance of this work

shell inlet
#

also I've been telling all this time that aces sucks

#

"The ACES project began its development in 2004 in collaboration with 50 industry technologists."

#

50 industry technologists walk into a bar

#

1 tonemapper please

#

insert punchline here

final cove
#

if you tune your tonemapping to a calibrated monitor but no one else's monitor is calibrated... is your tonemapping really calibrated?

#

I like that it's got richer dark colors... but it's in the negatives? what is that scale

signal widget
long robin
shell inlet
#

even though the LUT maps from reinhard 1/(x+1) so it would make sense to use that same remapping of 0 to inf but maybe it'd be harder to demonstrate on that scale

#

this image shows gradients more clearly so you can see that hue shifts (Abney effect) do not happen

golden schooner
#

hehe that reminds me of an indian colleages from ages ago

#

he had his monitor (CRT back then) dimmed down so much it was on that level that when you go one button click further you wont see anything at all, ie black

daring surge
#

can you calibrate mine

dapper gorge
#

Jaker is suddenly going to pop up at your house, calibrate your monitor, will refuse to elaborate and will just leave

golden schooner
#

and hide in the walls again

shell inlet
#

uncalibrated monitors going extinct in jakers neighbourhood

golden schooner
#

hehe

#

picture him during summer holidays, knocking on all the neighbors doors, as if he wants to mow the lawn ๐Ÿ˜›

long robin
golden schooner
#

you couldnt see anything

#

plus the glas was covered in 29034809493847u9 fatty fingerprints from all the other colleagues

#

looked like PBR metal texture when you looked from the side

long robin
#

Or maybe they had a different standard of "not too badly calibrated"

digital lion
long robin
#

huh, I did do that

#

somehow it's not pushed

digital lion
#

okok

#

I've also noticed that this generates some linker errorhttps://github.com/BoyBaykiller/FidelityFX-FSR2/blob/master/src/ffx-fsr2-api/gl/ffx_fsr2_gl.cpp#L612.
Adding backendContext->glFunctionTable. before fixes it

long robin
#

oh crap

#

thanks for letting me know

#

can you raise an issue so I don't forgor

#

speaking of which, I need to close the other issues KEKW

digital lion
#

Could I also just make an PR now?

long robin
#

inshallah it is merged

golden schooner
#

i saw that ๐Ÿ˜‰

long robin
#

ah I see how I ignored the GenerateSolutions.bat changes this whole time

#

Changes (1096)

digital lion
# long robin

in build/.gitignore there is GL/ so it shouldnt track those

long robin
#

Yeah that was before I pulled

digital lion
#

(they pranked us)

#

next one๐Ÿ™

long robin
#

I guess the bug was fixed too late to be in that release

#

But I can confirm that I tested the fixed driver and it works

digital lion
#

oh you could already test the unreleased driver thats cool

long robin
#

when are you getting a job at AMD

digital lion
#

i dont think I'll be working in an IT-job at all

#

idk

long robin
#

By IT do you mean tech in general

#

Because there are plenty of non-IT jobs at AMD

digital lion
final cove
#

I wonder if you can apply to be a janitor at AMD

oak garden
#

I mean

#

The floors dont clean themselves

daring surge
#

shrimply go fully remote

#

then there are no floors to clean

long robin
#

remote janitor smart

daring surge
#

apply to be an AMD maid

long robin
#

Remote employees get their own catboy maid to clean up after them

golden schooner
#

Intel Open Image Denoiser next?

long robin
#

Doesn't seem like it's for realtime

#

Also I don't see a Vulkan backend, which means it'll take actual effort to port

daring surge
#

real time dedicated denoisers are a bit ResidentSleeper

long robin
#

It only has these
OIDN_DEVICE_TYPE_DEFAULT select the likely fastest device (same as physical device with ID 0)
OIDN_DEVICE_TYPE_CPU CPU device
OIDN_DEVICE_TYPE_SYCL SYCL device (requires a supported Intel GPU)
OIDN_DEVICE_TYPE_CUDA CUDA device (requires a supported NVIDIA GPU)
OIDN_DEVICE_TYPE_HIP HIP device (requires a supported AMD GPU)

daring surge
#

they were the final nail in the coffin for me not doing occlusion with area lights

long robin
daring surge
#

sleepy boy

#

they make me tired

#

and exasperated

long robin
#

just svgf homie

#

then add the 3000 small improvements to it that have been researched over the years

daring surge
long robin
#

honestly svgf isn't that bad once you understand that it's fundamentally a temporal reprojection pass and a blur pass (the variance guiding isn't even useful in all contexts, so it can be ignored)

golden schooner
#

ah, oki ๐Ÿ™‚

heavy cipher
#

or, in colloquial terms, a monad

long robin
#

added a little cmake flag and define to conditionally enable FSR 2

#

so our linux homies can run this example

#

now I can finally merge dis branch

golden schooner
#

let me try sis

#

ah that thing again

#

cmake/vscode isnt picking up the project again

long robin
#

I didn't push yet

#

gimme 2 minutes

golden schooner
#

oh

long robin
#

ok changes are pushed to fsr2-test

#

don't forget that you need to enable FWOG_BUILD_EXAMPLES in cmake to run the exshrimples

#

and FSR 2 is enabled with FWOG_FSR2_ENABLE

golden schooner
#

aye

#

something is fucked

#

vscode isnt pickign up anything

#

let me try clion

#

it wont show its typical cmake status bar with all the build targets and actions

#

cmake's delete & reconficture isnt pulling any deps, with/without deleting 'build' first

long robin
#

hmm lemme try cloning my own repo

golden schooner
#

it only detects fwog and libglad as targets

golden schooner
#

oui

long robin
#

hmm

golden schooner
#

in example/cmakeilsts.txt

#
option(FWOG_FSR2_ENABLE "Enable FSR2 for examples that support it (currently 03_gltf_viewer). Windows only!" TRUE)
option(FWOG_BUILD_EXAMPLES "Build Examples" TRUE)
long robin
#

hmm

golden schooner
#

wait

#

the 2nd option is in fwogs cmakelist already

#

and with fsr2 enabled i still get

CMake Error at cmake-build-debug/_deps/fsr2-src/CMakeLists.txt:69 (message):
  Cannot find MSVC toolset version 142 or greater.  Please make sure Visual
  Studio 2019 or newer installed
long robin
#

that's normal, but I'll see if I can deal with it

#

btw I can run my own thing from a fresh clone

golden schooner
#

ye, im just dumm

long robin
#
# Check MSVC toolset version, Visual Studio 2019 required
if(MSVC_TOOLSET_VERSION VERSION_LESS 142)
    message(FATAL_ERROR "Cannot find MSVC toolset version 142 or greater. Please make sure Visual Studio 2019 or newer installed")
endif()
#

somehow I doubt that this is necessary if you're just building the gl backend

golden schooner
#

same

#

we just use glad

long robin
#

can you try going to the cmakelists.txt in question and removing those lines

golden schooner
#

or do you still handroll glbindings in the fsrisms?

#

japp

long robin
#

the user provides the function loader

golden schooner
#

line 69 ๐Ÿ˜„

#

there is another one in
sr2-src/src/ffx-fsr2-api/CMakeLists.txt:46

#

ah those are also msvc flags it seems, in there

long robin
#

what compiler are you using?

golden schooner
#

gcc

long robin
#

heck

golden schooner
#

i replace it wif set(FSR2_PLATFORM_NAME x64) for now

#

it was able to conf the project

#

wat im getting permission denieds when building ๐Ÿ˜„

#

ah

#

/home/deccer/Private/Code/External/Fwog/build/_deps/fsr2-src/src/ffx-fsr2-api/../../tools/sc/FidelityFX_SC.exe: Permission denied

#

perchance if one could instantiate a wine/proton session and invoke those binaries and redirect their output to some dir outside of wine/proton

#

ideally not wine but the proton installation which comes with steam when you enable proton support : >

golden schooner
#

because the path doesnt exist perhaps.. let me confirm

#

it exists

#

but linux cant just invoke a random windows binary

long robin
#

wait you're on linux?

#

fsr2 only runs on windows

heavy cipher
#

mfw (w is windows)

golden schooner
#

so our linux homies can run this example

#

what kind of bait was this ๐Ÿ™‚

long robin
#

added a little cmake flag and define to conditionally enable FSR 2

#

you have to disable the flag to run it on linux

golden schooner
#

instructions were unclear, patient died

long robin
#

instructions indeed unclear

golden schooner
#

but i can build everything with fsr2 disabled

long robin
#

ye that's the intent

golden schooner
#

ye

long robin
#

fsr2 is windows-only

golden schooner
#

unless someone gets those shader binaries to run under proton

#

well

#

that could have been some leftover

#

and i treated it as such

#

knowing the goofy history ๐Ÿ˜›

long robin
#

I could try that one fsr2 fork that adds linux support

#

but I'm sure it wouldn't immediately work

golden schooner
#

probably a big chungus of pain in the ass

long robin
#

exactlee

long robin
#

tbh it probably wouldn't be that hard to add if I actually had a Linux vm set up

valid oriole
golden schooner
digital lion
#

After I've builded fwog how can I build the examples?
Is is not

cd example
mkdir build
cd build
cmake ..
```?
long robin
#

you need to also enable FWOG_BUILD_EXAMPLES in cmake

#

as a neanderthal I only know how to do it from within visual studio's json editor or cmake-gui

digital lion
#

alright, let me try

long robin
#

further enabling FSR 2 for the gltf example requires enabling FWOG_FSR2_ENABLE

digital lion
#

๐Ÿ‘Œ

long robin
#

re: bad fsr2 gl perf on nvidia
I looked at the spirv that is actually used in the slow pass and it is basically identical to that used in the vulkan backend (save for some extra OpImage instructions in the GL version due to my use of combined samplers)

#

I had to delete all the unique identifiers though because that was making my diffing tool think all the lines were different

#

I am also able to compare the actualโ„ข๏ธ binaries used by the driver, but uh nervous

#

chalking this one up to gl driver magic gone wrong (in the hood)

oak garden
#

lmao

heavy cipher
#

nice try amd employee

long robin
#

If only there were a tool that could let us view shader binaries with readable ISA bleakekw

digital lion
#

i think fsr2 in opengl is a big deal you could make a reddit post or smth

dapper gorge
#

Nice ISA tbh

long robin
#

Maybe release the blog post at the same time, idk

#

The post is mostly an unhinged rant, idk how much value it has to the average user lol

golden schooner
#

doesnt matter

#

its a nice addition to the blog of yours

digital lion
long robin
#

Oh that's the first pass

#

Do you have more info about the crash

digital lion
#

must be something wrong with my bindings I guess. But its all simple blittable structs so idk where to look

dapper gorge
#

Btw Jaker, does Fwog support compressed textures with ktx2

long robin
#

Compressed textures are on my to-do list, but I can expedite support for u

#

As for ktx specifically, I think you'll still have to do some manual work as fwog doesn't deal with that kind of thing

#

I haven't touched ktx though so we'll see

golden schooner
#

its also on me list

long robin
#

why is maxPerStageDescriptorStorageImages 1048576 for NV gpus, but then GL_MAX_IMAGE_UNITS a pathetic 8

golden schooner
#

toomuchvoltage works for nvidia, maybe we task him to find out ๐Ÿ˜›

long robin
#

what do they do there

golden schooner
#

im not exaclty sure but possibly driver dev

long robin
#

that's the first thing everyone assumes when they hear I work at AMD bleakekw

robust bough
#

@long robin I'm looking at this, what about creating a context struct? Instead of keeping a global state? (with Fwog::Initialize and Fwog::Terminate)

#

though maybe that's a bad idea

long robin
#

thought about it and decided it's pointless because you can't reasonably have multiple OpenGL contexts

robust bough
#

yeah

long robin
#

I'd rather have the convenience of global access, just like raw GL, than artificially impose a context that must be passed around

golden schooner
#

thats what jaker told me too back then

#

i had the same question ๐Ÿ˜›

long robin
#

if I were abstracting any other API, I'd happily make a context object

#

but only because those APIs aren't as dumb

long robin
#

time to add s3tc to my glad.h

#

also threw in khr_shader_subgroup because I'm silly

#

where did the name BPTC come from anyways

#

it's just an alias for BC7 and BC6H

golden schooner
#

wait

#

you modified glad yourself?

long robin
#

no

#

I wasn't clear

#

I just generated a new one

long robin
#

kinda annoying that GL_EXT_texture_sRGB was added 5000 years ago in gl 2, but I need it for the srgb dxt formats

golden schooner
#

didnt read the fine print in them GL_*.txt files, hey? ๐Ÿ˜„

long robin
#

eew it adds compressed luminance formats

#

I also find it schtrange that opengl adds the super advanced BC6H and BC7 formats in 4.2 core, but not the BC1, 3, and 5 formats

#

@dapper gorge do you know if it is absolutely necessary to use glCompressedTextureSubImage to update the contents of a compressed texture

#

I see it adds an imageSize parameter, so I guess the answer is yes

#

what a pain in the ass

#

I'm also gonna have to update my scene loader (probably by adding libktx) to actually test these and spot the 3000 incorrect assumptions of Allah

dapper gorge
#

At least if you want mips you need to copy parts of the image (of different sizes ofc) at different offsets

long robin
#

yeah after thinking about it I realized that it's probably necessary since block compressed formats are a thing

shell inlet
#

now that you have fsr2 your downsampling thing that doesn't really work right is redundant

#

that one when you render indirect at quarter res or something I don't recall what it was exactly

long robin
#

huh

#

the quarter res thing is part of the original rsm paper. I don't even use that in the advanced RSM

long robin
#

and yeah it's annoying because it doesn't even modulate albedo properly, so it gets all blurred when you lower the render resolution

shell inlet
long robin
#

oh, that downsampling thing

#

it works perfectly fine if you don't downsample to absurdly low resolutions like that, so I assumed you were talking about the other one ๐Ÿ˜„

#

but yeah fsr2 mostly makes it redundant, so I already disabled it for now

#

I tried making a runtime slider for changing the rsm downscaling ratio, but it was horribly bugged and I couldn't be bothered to fix it

long robin
#

hmm

#

I have a feeling that the imageSize parameter of glCompressedTexSubImage*D can be inferred by the format and dimensions of the data

#

e.g., some bcn format might have 64 bits per 4x4 texels

#

I also find it odd that you need to specify a format when you upload compressed data (it's already specified when you create the image). surely opengl can't automatically convert between compressed formats frog_thinkk

long robin
long robin
#

TIL "POV-Ray SDL" (in ktx-software repo)

oak garden
#

what is that lmao

long robin
#

some haskell ray tracing thing apparently

#

no clue really

#

clicking on the thing brings me to a "no results found" page

#

so it existsn't

golden schooner
#

spaghetti monster lives in people's walls too

long robin
#

looks old af

#

POV-Ray turns 30

rugged notch
long robin
#

I'm guessing some files were marked as "pov-ray sdl" due to some github setting

#

eh

rugged notch
#


#macro Trace(P, D, recLev)
  #local minT = MaxDist;
  #local closest = ObjAmnt;

  // Find closest intersection:
  #local Ind = 0;
  #while(Ind < ObjAmnt)
    #local T = calcRaySphereIntersection(P, D, Ind);
    #if(T>0 & T<minT) 
      #local minT = T;
      #local closest = Ind;
    #end
    #local Ind = Ind+1;
  #end

  // If not found, return background color:
  #if(closest = ObjAmnt)
    #local Pixel = BGColor;
  #else
    // Else calculate the color of the intersection point:
    #local IP = P+minT*D;
    #local R = Coord[closest][1].x;
    #local Normal = (IP-Coord[closest][0])/R;

    #local V = P-IP;
    #local Refl = 2*Normal*(vdot(Normal, V)) - V;

    // Lighting:
    #local Pixel = AmbientLight;
    #local Ind = 0;
    #while(Ind < LightAmnt)
      #local L = LVect[Ind][0];

      // Shadowtest:
      #local Shadowed = false;
      #local Ind2 = 0;
      #while(Ind2 < ObjAmnt)
        #if(Ind2!=closest & calcRaySphereIntersection(IP,L,Ind2)>0)
          #local Shadowed = true;
          #local Ind2 = ObjAmnt;
        #end
        #local Ind2 = Ind2+1;
      #end
      
      #if(!Shadowed)
        // Diffuse:
        #local Factor = vdot(Normal, L);
        #if(Factor > 0)
          #local Pixel=Pixel+LVect[Ind][1]*Coord[closest][2]*Factor;
        #end

        // Specular:
        #local Factor = vdot(vnormalize(Refl), L);
        #if(Factor > 0)
          #local Pixel = 
             Pixel +
             LVect[Ind][1]*pow(Factor, Coord[closest][3].x)*
             Coord[closest][3].y;
        #end
      #end
      #local Ind = Ind+1;
    #end

    // Reflection:
    #if(recLev < MaxRecLev & Coord[closest][1].y > 0)
      #local Pixel = 
    Pixel + Trace(IP, Refl, recLev+1)*Coord[closest][1].y;
    #end
  #end

  Pixel
#end
long robin
#

the "sdl" stands for "Scene Description Language"

rugged notch
#

such a nice programming language

long robin
#

at least it's readable

golden schooner
long robin
#

yeah can't you set it somehow (for the entire project)

#

so it doesn't think .fs files are F# if they're really fragment shaders

golden schooner
#

yeah

#

you might be able to coerce it via .gitattributes but meh

#

just name your shaders foo.2letterstage.glsl ๐Ÿ˜„

#

makes syntaxhighlighting in any editor shrimpler as well

long robin
#

yeah that do be what I do

#

as of a while ago, I got annoyed at having to change settings on everything ๐Ÿ˜„

golden schooner
#

.ps if you do hlsl is usually postscript files not pixelshaders ๐Ÿ™‚

long robin
#

I read some legal thing on a gltf document and learned something

OpenGLยฎ is a registered trademark and the OpenGL ESโ„ข and OpenGL SCโ„ข logos are trademarks of Hewlett Packard Enterprise used under license by Khronos.

#

I didn't know HP had anything to do with any of this

fiery sorrel
#

it sits next to the screenshot where u taught me that log2 can tell u how many times u can cut an image into two

#

which in hindsight is kinda embarassing because... yea its in the definition of what a log is i just forgor to connect it

long robin
#

damn, I can't even load gltfs that have basisu texture compression in blender

#

I should've foreseen that when I saw that you can't export those

long robin
#

I'm afraid tinygltf cannot do ktx ๐Ÿ˜ฆ

#

wait

#

I think this is just enough info to load a ktx texture (bufferView + mimeType)

#

mashallah I thought I was gonna have to rewrite a ton of my scene loading code

digital lion
long robin
#

how did I not see this

#

hmm I didn't even get an email ๐Ÿค”

digital lion
#

perhaps because you are not watching the repo

long robin
#

maybe

#

yeah I wasn't watching it frog_dum

#

will have to break my oath and finish implementing this ktx stuff to my loader tomorrow

fiery sorrel
#

I headcanon that jakar is unironically muslim

long robin
#

what gives you that idea habibi

final cove
#

though its not like it loads the ktx for you either

long robin
#

I did search ktx in the issues on tinygltf, only to find an issue that Sean commented on KEKW

#

The author of tinygltf made some basic support for ktx literally 400 commits ago

final cove
#

what I've grown to dislike about tinygltf is that for any extension it basically just gives you the JSON and says "you're on your own buddy"

long robin
#

But it doesn't matter, I am gonna use libktx to load it anyways

final cove
#

but fastgltf actually makes an effort to treat extensions like they're actually part of the spec

long robin
#

yeah tinygltf should do something for the common ones

#

ktx isn't an issue though. It still gets the mimetype, which is all I need

#

but the extensions that add more stuff are probably a huge pain

final cove
#

I remember adding the specular ext was annoying enough and that was just a few extra fields on materials

#

just a big chunk of ugly JSON DOM walking to do stuff the parser should

#

especially since the specular ext adds a few texture fields and you completely lose all of tinygltf's image handling convenience there

#

basically, use fastgltf

long robin
#

I might, if I encounter more severe annoyances

#

But for now I'm going to continue not changing everything

rugged notch
fiery sorrel
#

I live in a city where there are non arab muslims (they mostly malay)

#

Its interesting becos growing up thatd be my default impression and i still dont connect arab n muslim

#

anyways jakar based islam is the second most gp religion anyways

#

Muslims all worship around a hello world cube its amazing

shell inlet
#

opengllah

golden schooner
#

allahu akbar

rugged notch
#

Welcome to the opengl madrassah

long robin
oak garden
#

jaker has found the way of allah

digital lion
#

@long robin New FSR 2 patch version๐Ÿ””

long robin
#

as if I don't have a stream of secret fsr info being pumped into my bloodstream at all times

digital lion
#

then update fork already๐Ÿ˜ญ

long robin
#

soon

#

I made an issue so I don't forget

#

btw, have you integrated fsr 2 in your engine yet

digital lion
#

no. It keeps crashing on those two dispatches

long robin
#

fook

#

do you have any leads on the cause

#

my only guess is that somehow certain gl function pointers aren't being loaded

digital lion
#

no and I dont really know where to look. At this point I am very much certain its not the actual interop code. But I also know the the fsr gl backend should be working (although the one missing depth format made me a bit suspicious)

long robin
#

the missing depth format was because I copied the ones used in the vulkan backend

long robin
digital lion
#

maybe. I dont have any experience with that kind of stuff though. Too lazy to set that up

long robin
#

aren't you using vs

#

you can use its native code debugger

digital lion
#

oh you mean that. ye I can

long robin
#

do you have a stacktrace of where it crashed

#

I'm trying to recall that one pic you sent (I can't find it in discord search)

digital lion
#

I dont have a stacktrace or much info at all really

#

I need to look deeper into it

long robin
#

oh I see

#

a normal debugger wouldn't catch that kind of crash

#

must be API misuse on my part somehow, because UB in CPU code normally doesn't result in that

#

well, your C# bindings add another element of uncertainty

#

the gl backend runs fine on my AMD card

digital lion
#

Yep. I keep jumping between the fsr2 libary and my bindings thinking "This must work why I am looking here"

long robin
#

are you bindings on github somewhere

#

I could take a kwik look (not a C# expert, but I might spot something)

digital lion
#

thats nice I'll make a repo tomorrow and then share link here

golden schooner
#

hmm didnt want to let me take a look, noted : )

long robin
#

I kinda wish there was a unique_ptr that has a size member

#

I wanna manage these pointers from C APis better

#

oh well, I guess I have to delete the data() of a span since there is no stl template that satisfies my needs bleakekw

rugged notch
#

Wait wot

#

unique_ptr<T[]> don't cut it?

long robin
#

that doesn't explicitly store the size

#

I'd have to do something terribly laborious like make a pair<unique_ptr<T[]>, size_t> to get what I want

#

not worth

heavy cipher
#

i believe the stl calls this type ๐Ÿ…ฑ๏ธector

long robin
#

I'm getting a pointer from a C lib

heavy cipher
#

my condolences

long robin
#

don't wanna copy it to a ๐Ÿ…ฑ๏ธector, as that would be inefishent

rugged notch
long robin
#

why is there no move assignment for std::unique_ptr

#

nvm I'm shrimply blind bleakekw

heavy cipher
#

today is "not knowing unique_ptr day"

digital lion
long robin
heavy cipher
#

unique_ptr<T>(T*)?

long robin
#

Or rather, when I want to assign a raw pointer to a unique ptr

#

Then the compiler complains and says there is no conversion from T* to unique_ptr<T>

#

I cry everytim

heavy cipher
#

i'd cry too if i'd be riddled with cancer

long robin
#

oh mfw my issue is just another one of reading comprehension bleakekw

#

the ctor I want is explicit, but I got baited by some implicit ctors that take an extra deleter arg

valid oriole
#

a case for RRA

dapper gorge
viral spear
#

you could also use reset

long robin
#

yeah

dapper gorge
#

@long robin I know it's 4am but do you mind reading my ramblings in #1090390868449558618 to see if they make sense

long robin
#

Uh can I save it for tomorrow

dapper gorge
#

Sure thing lol

long robin
#

I have mind frog atm, as you can clearly tell

dapper gorge
#

I'm all out of brainpower as well for now, gotta recharge

digital lion
#

btw did you find anything suspicious in my fsr2 bindings yet

long robin
#

I'm looking at em now (somehow didn't see them earlier)

#

what does Pack = 8 mean in these unsafe structs

digital lion
#

8 byte alignmend. I've found that what the cpp compiler does too

long robin
#

the whole struct or each member?

digital lion
#

each member

long robin
#

that doesn't seem right

#

only 8-byte types get that alignment in c++

#

I don't know what you should put to get the same alignment

dapper gorge
#

Just spam alignas 8 on each member

long robin
#

but members aren't aligned like that on most c++ compilers frog_thinkk

heavy cipher
#

:misalignment:

digital lion
dapper gorge
#

I am not sure, I think that aligns the whole struct to 8 bytes, not necessarily all its subobjects

#

I may very likely be wrong

long robin
#

I just checked and it doesn't align them all to 8 bytes

digital lion
#

It seems to be on every struct member so should be the same as Pack

Specifies the packing alignment for structure, union, and class members.
And I am using #pragma pack(push, 8)

long robin
#

okay

digital lion
long robin
#

so hopefully this isn't the issue then

long robin
#

sizeof(joe) is 16, which means there is no extra padding after members of this struct

digital lion
#

thats consisent with c# Pack behaviour

dapper gorge
#

I reckon if you alignas(8) before int a,b,c,d you'll get sizeof 32

long robin
#

I tried that and got the same result

#

I think you can't overpad

#

overalign

dapper gorge
#

Hmm interesting

#

I never understood C++'s alignment/padding rules bleakekw

long robin
#

I must be tripping fr

heavy cipher
#

pack for both of these cases (C++, C#) can only lower alignment

#

8 would increase the alignment of those ints, so it doesn't do anything

long robin
#

isn't the whole point of alignas to overalign though

heavy cipher
#

alignas isn't pack tho

long robin
#

o

long robin
#

I did int alignas(8) a;, but putting the alignas literally anywhere else would have caused it to work

dapper gorge
#

How does that even compile

long robin
#

idk but at least gcc warns

dapper gorge
#

mfw C++ grammar is literally: idk lmao

long robin
#

@digital lion do you have a test program using C# fsr I can run

digital lion
#

yes, project or executable?

long robin
#

project so I can debug pls

digital lion
long robin
digital lion
#

nint should be size_t. And ref byte comes down to void*.
Actually nuint is size_t

long robin
golden schooner
#

there is a cute racoon outside : >

long robin
#

do I need to do something to enable fsr2?

#

I see you have TAA already, but I'm guessing it's not fsr2

digital lion
#

if you are on amd it likely crashs on nvidia I was just getting weird output

long robin
#

I'm on the latest commit btw

long robin
digital lion
long robin
#

because fsr 2 needs aliased input

digital lion
#

yes comment RunTAAResolve

long robin
#

well that can come later

#

anyways, I get a crash when it calls GetScratchMemory because the dll is missing

#

oh

#

the dll path is hardcoded ๐Ÿ˜„

digital lion
#

try the older commit

long robin
#

which one

#

you can just give me the hash too

digital lion
#

wait real quick how did you even got it working on the newest commit. I removed fsr2

long robin
#

I was actually confused

#

I was on "start work on fsr2" commit

digital lion
#

try 4e29d30e0f18e737395b621f60abbd876335f14e (update dlls)

#

should fix the hardcoded dll path

long robin
#

yep

#

now I see this

digital lion
#

uh

long robin
#

(on rtx 3070)

digital lion
#

hm never test on that specific card but works on rtx 3050 ti laptop (and a bunch of others)

#

this is without RunFSR2 right

long robin
#

oh I uncommented the fsr2 line

#

so it is WITH fsr2

#

looks fine without fsr2

#

I think these results are to be expected

#

hmm I can't step into fsr2.contextdispatch

#

maybe I can give it symbols

#

ah, but you compiled fsr2 with #pragma pack, right?

digital lion
#

the dlls in that specific commit I think dont have it

long robin
#

I need symboools

digital lion
#

the .pdb you mean?

long robin
#

I might be able to provide it with my own symbols

digital lion
long robin
#

because I won't be able to just slip in my own dll with symbols already

digital lion
#

ah ok

#

one sec ill make a new branch containing the symbols

#

done

git pull
git checkout fsr2-test
long robin
#

Nice, I'll try it out in a minute

digital lion
#

oh, gitignore filtered out the files hehe. Fixed

long robin
#

Lol

#

ok I pulled

#

do I need to pull again

digital lion
#

the newest

#

lol

#

yes pull

long robin
#

hmm it's already up to date

#

(on fsr2-test branch)

#

this is as far into the call stack as I can get

#

ah wait

digital lion
#

oh ok. I dont know what to do. The symbols are there and build in debug

long robin
#

aha

#

I needed to enable native code debugging

#

now it's at least giving me this when I step into the pinvoke

digital lion
#

oh. I never did that stuff

long robin
#

it's trying to use a location on your computer since that's where the source code is

#

but I can just give it my own

digital lion
#

ok tell me when I should upload more stuff to the branch or fix something

#

it do be getting kinda late though. Need to see the ๐Ÿ›๏ธ

long robin
#

did you modify the fsr2 source at all

digital lion
#

yes

long robin
#

hm

#

might mess up the source mappings for me

#

looks like it's just one line off, presumably from your pragma packs

digital lion
#

yes the pragma and two print statements in ffx_assert.cpp

#

should I update the repo dlls to cotain non edited fsr2 source files?

long robin
#

nah it's okay right now

#

I can step through the fsr2 source from your code nice

#

being off by 1 line is still usable

#

I'm mainly looking to see if the arguments are horribly corrupted

digital lion
#

yep good idea. Can you send a screenshot of the native code debugging your are doing. Just for my understanding because I never did that before. How it looks

long robin
digital lion
#

yo that is cool

#

i gotta go sleep now I can already hear the birds chirping. Thanks for taking the time

#

(i expect it to be fixed when I wake up)

long robin
#

gn

#

well so far I haven't found any issues

#

all the parameter structs seem fine

#

the gl backend struct seems fine

digital lion
#

good to have confirmation from the pros

long robin
#

oh jeez I can't renderdoc this because it requires bindless textures

#

rip, nsight also crashes

#

"unknown assertion" epic

#

issue was wrong working directory, but now I can't capture a frame for some reason

#

at least I could generate a useful trace with apitrace

long robin
#

kinda hard to debug since there are either no frame markers or apitrace doesn't show them

daring surge
#

nsight is really weird for me

#

multiple independent programs i've written have not worked with it

long robin
#

ye it usually doesn't give an obvious reason for why it failed (which I guess makes sense if nsight itself crashed lol)

golden schooner
#

heh

#

on loonix i have to tell nsight to use glfinish as the separator, it wont pick up glxswapbuffers

long robin
#

for some reason, tinygltf is not giving me correct indices for ktx textures froge_sad

#

ah fuck

#

this is why

#

source is normally a property of the texture itself, not the extension

#

krill me

#

time to do a little json parsing bleakekw

#

oh, tinygltf is kind enough to store unknown extensions in an extension map

#

mashallah

golden schooner
#

good froge

long robin
#

oh jeez, tinygltf uses std::map unironically

golden schooner
#

why not ๐Ÿ™‚

long robin
#

unnecessary ordering guarantee (for most cases)

golden schooner
#

when is this actually a problem?

heavy cipher
#

btw i remembered the thing

#

std::map acquiring a global lock when iterator debugging == 2 in MSVC

long robin
#

epic bleakekw

#

I mean, good for debugging, but dat ๐Ÿ…ฑ๏ธerf ๐Ÿ“‰

golden schooner
#

is it really this bad when you add a few things to that specific map?

#

in case of tinywtf

heavy cipher
#

global lock my deccy

golden schooner
#

yes

long robin
#

oh, it's global? ๐Ÿ’€

heavy cipher
#

means you can multi๐Ÿž tinygltf but it serializes nicely under iterator debugging

long robin
#

why is it global

#

I have separate maps, why must gates punish me

heavy cipher
#

unspecified transgressions of the opengl kind

golden schooner
#

thats why everyone uses unordered_map instead?

#

eh nevermind, i feel like getting slapped in the next 5s for asking ๐Ÿ™‚

dapper gorge
#

Truth is all maps are garbage in C++ KEKW

long robin
#

btw this is the chain I need to go through to access the texture source index in tinygltf now bleakekw

dapper gorge
#

std::map is just especially bad

long robin
#

      int textureSource = texture.source;
      if (auto it = texture.extensions.find("KHR_texture_basisu"); it != texture.extensions.end())
      {
        struct Hack : tinygltf::Value
        {
          Hack(const tinygltf::Value& basisuExtension)
            : Value(basisuExtension) {}

          int GetTextureSource() const
          {
            return this->object_value_.at("source").GetNumberAsInt();
          }
        };
        textureSource = Hack {it->second}.GetTextureSource();
        //printf("source: %d\n", textureSource);
      }
      const auto& image = images[textureSource];

I want 2 die

#

I have to use a struct because the value I want is a protected member of tinygltf::Value bleakekw

golden schooner
#

; (

long robin
#

I just wanna load compressed textures

heavy cipher
#

its just something unexpected

long robin
#

perhaps the real reason is that the standard mandates that it do be kwite slow (regardless of this)

golden schooner
#

i wouldnt know, and expect map to be a dictionary like structure for when i need a dictionary and assume its well implemented, given its part of a standarlib

long robin
#

it's an ordered map

#

idk if dicts have ordering normally

golden schooner
#

perhaps sorteddicts ๐Ÿ™‚

#

not assorted dicks

final cove
#

not to be too harsh on the tinygltf guy but a lot of its code strikes me like C++ isn't his first/main language

long robin
#

he writes so many C++ libs though

final cove
#

it sorta looks like he's generally used to something else but kinda knows about the fundamentals and STL containers to make a lib, but not how to really leverage C++

long robin
#

yeah seems like it

final cove
#

I sentence him to 100 hours of cppcon talks

long robin
#

yeah I'll probably use a different lib next time I need to load gltfs

dapper gorge
#

I have been using cgltf and can't complain

long robin
#

a billion failed asserts later

dapper gorge
#

s t r e t c h

golden schooner
#

that looks krispy

long robin
#

the textures are surprisingly correct, so I guess uvs are fooked (damn mesh quantization)

oak garden
dapper gorge
#

I think you need -noq -vpf

long robin
#

I can't even remember what this does, but I had to uncomment the GL_BYTE case to make it work

auto AddElementsNorm = [&]<typename Vec>()
{
  for (size_t i = 0; i < accessor.count; i++)
  {
    // this doesn't actually work exactly for signed types
    attributeBuffer[i] = Fvec(*reinterpret_cast<const Vec*>(buffer.data.data() + totalByteOffset + i * stride)) / Fvec(static_cast<float>(std::numeric_limits<typename Vec::value_type>::max()));
  }
};

switch (accessor.componentType)
{
//case GL_BYTE:           AddElementsNorm.template operator()<Bvec>(); break;
case GL_UNSIGNED_BYTE:  AddElementsNorm.template operator()<UBvec>(); break;
//case GL_SHORT:          AddElementsNorm.template operator()<Svec>(); break;
case GL_UNSIGNED_SHORT: AddElementsNorm.template operator()<USvec>(); break;
case GL_UNSIGNED_INT:   AddElementsNorm.template operator()<UIvec>(); break;
//case GL_FLOAT:          AddElementsNorm.template operator()<Fvec>(); break;
default: FWOG_UNREACHABLE;
}
#

otherwise it hit the unreachable path

long robin
#

ikr KEKW

oak garden
long robin
#

it's my code for converting gltf vertices to my runtime vertex format

#

now I remember that snorm requires a more complex integer->float calculation, so I didn't do it

golden schooner
#

i like the roof color contribution at the top of the scene

long robin
#

good eye

golden schooner
#

(idk if you know james bond: golden eye)

long robin
#

made the glb a third larger though ๐Ÿ’€

dapper gorge
long robin
#

I made a function for loading snorm attributes, but it still didn't work, so I tried those flags

#

try not to cringe challenge (impossible)

auto AddElementsSnorm = [&]<typename Vec>()
{
  for (size_t i = 0; i < accessor.count; i++)
  {
    // max(c / (2^(b-1) - 1), -1.0)
    // The second -1 is implicit due to truncation after division
    attributeBuffer[i] = glm::max(Fvec(*reinterpret_cast<const Vec*>(buffer.data.data() + totalByteOffset + i * stride)) /
                         Fvec(static_cast<float>(std::numeric_limits<typename Vec::value_type>::max() / 2)), Fvec(-1));
  }
};
#

oh wait that's wrong KEKW

golden schooner
#

that looks neat

long robin
#

this is the "correct", "readable" version of it, but the mesh still renders incorrectly without lvstri's flags, so meh

#

oh wow this function isn't even my issue

#

uvs are unsigned shorts, no I've no clue why they're turning into doodoo

#

blender can load the quantized mesh fine

long robin
#

multiplying all unorm attributes by 128 somehow makes it look almost correct

dapper gorge
#

Perhaps you need meshopt_decodeVertexBuffer?

long robin
#

I'm not even using meshopt

#

is that my problem

dapper gorge
#

I'm not sure, I was looking at docs for gltfpack

dapper gorge
#

Ah wait no, that's not right

#

Yeah it's just KHR_mesh_quantization

long robin
#

For TEXCOORD attribute, the transform can be specified using the offset/scale supplied by KHR_texture_transform extension. Note that this requires merging existing offset/scale values, if present, with the dequantization transform.

#

oh boy, struct Hack2 : tinygltf::Value let's go

dapper gorge
#

Hack was so good they made Hack2

long robin
#

btw I ctrl+f'd "hack" and found this line in my loader
texcoords.resize(positions.size()); // TEMP HACK

#

quite amazing

#

I think that's for meshes with no texcoords

dapper gorge
#

Hack 3? :pog:

long robin
golden schooner
long robin
#

why is the texture transform a property of the texture

#

hmm, I guess it helps keep your mesh quantized in a small range

golden schooner
#

heh

#

time to rest your heavy ass

#

#nasheed #dua #prayer #islamicmusic #uae #ahmedbukhatir

ู„ููŠู€ูƒูู€ู† ูŠูˆู…ูู€ูƒูŽ ู„ู„ู€ุดู‘ู€ุนู€ุจ ูˆูุฏุงุฏุงู‹ ู„ููŠู€ูƒูู€ู€ู† ุญูู€ู€ุจูู‘ู€ู€ูƒ ู„ู€ู„ุฃุฑุถู ู…ูู€ู€ุฏุงุฏ

ู‚ู€ู„ู€ู…ูŒ ุฃู†ู€ุช ูู€ูƒู€ู… ุนุจู€ุฑุช ุนู†ู‘ู€ู€ุง ูˆ ุจู€ู†ู€ูŠู€ุชูŽ ุงู„ู…ุฌู€ุฏูŽ ุฃุทูˆุงุฏู‹ุง ุดูู€ุฏุงุฏ

ุฃู†ุชูŽ ูŠู€ู€ุง ู…ูู„ู‡ู… ุดุนุจู ุฃู† ูŠุจู€ุฑูู‘ูˆุง ุนูุดุชูŽ ูƒู€ู… ุญู‚ู‘ู€ู‚ู€ุชูŽ ู„ู„ุดู‘ุนุจ ู…ูู€ุฑุงุฏ

ุฒุงูŠู€ุฏู ุงู„ุฎูŠู€ู€ุฑุงุช ุณูŽู„ ุนู†ู‡ ูุดู…ู€ุงู„ุง ูˆ ุฌู€ู†ู€ูˆุจู€ู€ุงู‹ ูˆู†ูู€ุฌู€ู€ูˆุฏุงู‹ ูˆ ูˆูู‡ู€ู€ุงุฏุง

ุฌุงู…ูุนู ุงู„ุฃุดุช...

โ–ถ Play video
long robin
#

a lullaby to put me to sleep, nice

final cove
#

you could've just used fastgltf

fiery sorrel
#

its not ramadan why would he need to fastgltf

golden schooner
#

that was a good one ๐Ÿ™‚

#

anyway, belated ูƒู„ ุนุงู… ูˆ ุฃู†ุชู… ุจุฎูŠุฑ

shell inlet
#

jaker lore

long robin
#

I don't get how KHR_texture_transform can be a "used extension" but not a required one

#

what is the line that separates required extensions from "unnecessary" ones?

#

like, KHR_texture_basisu is required because you can't properly load textures if you ignore it

#

but ignoring KHR_texture_transform will screw up your UVs horribly if you ignore it

shell inlet
#

it might be an oopsie from the exporter

long robin
#

perhap

#

the spec only says this

All glTF extensions required to load and/or render an asset MUST be listed in the top-level extensionsRequired array

#

it's a pretty weak specification

#

they even use KHR_materials_sheen in the example of a non-required extension, and I'm pretty sure you'd need to support that to render the asset properly lmao

daring surge
#

uhhhh

#

that seems smart to me

#

required vs non required is like... should an engine reject this asset entirely if it doesn't support this extension

#

yeah?

long robin
#

and how should that be determined?

daring surge
#

subjectively

long robin
#

that is evidently how they decided this

daring surge
#

i think texture transform can be optional in some cases

#

like if you're using it for detail textures, you don't necessarily need support for it

#

and because you need to favor optional usecases over failing use cases, it fits into that category

long robin
#

pretty much everything can be optional in some circumstances with that reasoning

#

I guess gltfpack doesn't use any logic to determine whether texture transform is "actually needed"

daring surge
#

personally i'd just assert out on any that i don't expect

long robin
#

yeah I'm doing that now heh

#

I'll just ignore requiredExtensions

long robin
#

all four newsponza models now fit in under 4gb of vram nice

long robin
daring surge
#

this server needs a frogchamp emote

shell inlet
#

can barely see any bleeding

long robin
#

yeah newsponza curtains have a big gap in the middle which means more multicolored light from the wall can hit the floor

shell inlet
#

I just realized that it actually makes sense

#

most of the DI covers bland gray walls not colorful curtains

#

so indirect is largely gray too

long robin
#

yeah, this is the best I can focus the light on the curtain

shell inlet
#

k I see the blue thing now

daring surge
#

i feel like the discrete curtains colors were a big part of sponza, you could see the colored bounces so clearly

shell inlet
#

and orange too below

#

have you tried any fun scenes besides sponza and miguel san?

#

though maybe you need more bounces to truly bring out the color bleeding

long robin
#

don't look too closely

#

multi-curtain drifting

long robin
#

when I attempt to load textures as BC3

#

lol just realized that I named my compressed formats incorrectly

#

I just did DXTn -> BCn when converting from my API enums to opengl

#

turns out DXT3 = BC2

#

then opengl randomly calls BC4 and BC5 "RGTC"

#

my bad, it's not BC4 and BC5. It just happens to share an identical encoding with this extension bleakekw

long robin
#

ye no more corruption now

heavy cipher
#

i love compressed formats, you fiddle with them for hours but then its so obvious when you look at the result

long robin
#

khronos should put the entire format encoding spec in the compressed format enumerators so we don't forget

#

the parkour between different naming conventions hurts

#

anywhomst, fwog now supports the full spectrum of BC formats

#

though I still don't know what is supposed to happen when you copy or download compressed images nervous

heavy cipher
#

instant defenestration

dapper gorge
#
BC1 = S3TC_DXT1
BC2 = S3TC_DXT3
BC3 = S3TC_DXT5
BC4 = RGTC1
#

OpenGLโ„ข๏ธ

long robin
#

also notice how all the dxt ones come from an extension

#

well actually, I have to use yet another extension to get the sRGB versions of the DXT formats

golden schooner
#

that looks neat

long robin
#

btw @digital lion I updated my fsr2 fork with the latest upstream changes (2.2.1) and also changed the interface slightly (removed unused parameters in the ffx_gl header)

#

so I'm afraid you'll have to update your bindings if you want the latest fsr ๐Ÿ˜ณ

digital lion
#

wunderbar

long robin
#

secured myself one of them newfangled usernames

snow sun
#

oh dang

#

gpgpu is strong

long robin
#

there are a surprising amount of four letter usernames left, like fvec, bsdf, and vec5 (random ones I tried)

dapper gorge
#

Your account is now worth 5 billion dollars

#

@long robin did you figure out quantization in the end

long robin
#

KHR_mesh_quantization and KHR_texture_transform?

dapper gorge
#

Just the first one

long robin
#

somehow I didn't have a problem with that ext specifically (I think), even though I want using the quantization transforms

#

though, I'm thinking about upgrading to fastgltf now that I looked at how clean the code is in #1019965526434394173

#

and it supports all these extensions (and more)

dapper gorge
#

I'm pretty content with cgltf, I don't think I understand how strides work

long robin
#

what are you conchfused about

dapper gorge
#

I have quantized positions in uh

#

one sec

#

Ah yes, quantized for 14 bits, I forgor

#

2^14 is 16384 and it shows as maximum in the accessor, all is good

long robin
#

hmm

dapper gorge
#

Except the accessor tells me that the component type is vec3

#

so is the stride sizeof(uint16) * 3?

long robin
#

Note that to comply with alignment rules for accessors, "VEC3" accessors need to be aligned to 4-byte boundaries; for example, a BYTE normal is expected to have a stride of 4, not 3.

#

btw fastgltf would automatically handle this (I think)

#

||let the shilling begin||

dapper gorge
#

jk KEKW

#

I may or may not use fastgltf for the vulkan thing

#

I don't feel like rewriting model loading in GL

long robin
#

I wonder how to make gltfpack export a gltf with mesh quantization but not texture transform

#

I don't want to have to change my shaders

dapper gorge
#
-v -tc -kn -km -kam -ke -ac -vpi -vp 14 -vt 12 -vn 8 -vc 8 -tj 24 -tq 10```
#

ya welcome

#

Ah one of these flags is an impostor

long robin
#

which one turns off texture transform optimization

dapper gorge
#

It's a custom flag I coded myself into gltfpack, it avoids nodes merging

dapper gorge
long robin
dapper gorge
#

Occlusion culling dies (frustum too)

long robin
#

rip in pepino

dapper gorge
#

Alright if everything works well

#

I should've compressed vertices from 64 bytes to 20

#

Now if this doesn't make SM throughput the TOP sol I'll go to NVIDIA's HQ for, uh, talking yes, just talking

#

Just for talking

golden schooner
#

its ackchually quite impressive what you do already my spaghetti dude

long robin
#

I don't see how smaller vertices would increase occupancy

dapper gorge
long robin
#

Ah I hallucinated what you said

golden schooner
#

concinve jaker to have him ship one of them workstation 48gb cards to you

long robin
#

Yeah it should help with vram, probably not worth registers though

dapper gorge
long robin
#

We only use consumer cards

golden schooner
#

hehe

#

and/or you lustri you should write about it

#

and share it

#

gloat that your shit is better than GL_NV_mesh_shader

#

the peeps in the industry might see it

dapper gorge
#

Mesh Shaders have a huge advantage though

golden schooner
#

its a smol world

dapper gorge
#

Which is not mesh shaders KEKW

#

It's task shaders, they can basically dispatch work onto the GPU

#

So the GPU basically dispatches work to itself, which is huge

long robin
#

mdic is the same thing ๐Ÿคฐ

dapper gorge
#

You can do culling and unpacking there, dispatch mesh shaders and render only what's visibile

dapper gorge
digital lion
#

show vertex struct please

dapper gorge
#
struct meshlet_vertex_format_t {
    alignas(4) glm::u16vec3 position = {};
    alignas(4) glm::u8vec3 normal = {};
    alignas(4) glm::u16vec2 uv = {};
    alignas(4) glm::u8vec4 tangent = {};
};```
long robin
#

struct { char data[20]; };

dapper gorge
#

It's smol, doesn't have a lot of attributes

long robin
#

normal could be u8vec2 if you use oct encoding

#

and I think you can get away with u16 (or even nothing) for tangent if you go full tryhard

dapper gorge
#

I will be going full tryhard

#

This vertex struct shall occupy only 1 bit

#

Until then I won't stop

long robin
#

like if you apply lz4 on your vertex data and it happens to repeat a lot, but then you have to decompress in the vertex shader which is ๐Ÿ’€

dapper gorge
#

I like to imagine at one point the vertex shader becomes somewhere you do literally anything except transforming vertices to clip space KEKW

final cove
#

it would probably run pretty poorly but that's definitely worth being able to brag you have 0.5 bits per vertex

long robin
#

There is gdeflate, which you could use to decompress data on the GPU

heavy cipher
#

i have yet to see any other use of engines than rendering the sponz, so this seems like a very applicable compression scheme

dapper gorge
#

Jaker, could you peek at my issue in me thread

long robin
#

I'm tempted to try that, but I'm guessing the shader just won't compile

#

I looked, but

dapper gorge
#

Hmm, I'll try with the trusty default blender cubeโ„ข๏ธ

dapper gorge
#

@long robin is Fwog texture compression up on GitHub?

long robin
#

Yes

long robin
dapper gorge
long robin
#

btw there is a todo on that page. I am accepting memes to put there

#

there also should be no editing mistakes in there because I used ms word to check

oak garden
#

Todo: insert hilarious meme here

#

Good read

stray warren
#

GP slang leaking

hexed bay
stray warren
#

I actually nearly spat out my coffee KEKW

long robin
#

lol

#

I nearly removed the "ass", but now I'm glad I kept it

long robin
#

man wtf is this KEKW

golden schooner
#

i watched it, and then i read on, and i have the same question

#

"i would come in your dream"

long robin
#

is that why I wake up "sweaty" every night

golden schooner
#

๐Ÿ˜„

stray warren
#

Really liked the article :) Also, TIL about GL_EXT_shader_explicit_arithmetic_types

digital lion
#

it seems like when feeding opengl with spirv you get access to all these typically vulkan-glsl extensions like this one?
Because as far as I know nvidia doesnt support it when using raw-ass glsl

long robin
#

yeah it's kinda sus

#

I don't think they're "intentionally" supported

#

but there is also no way to query supported shader extensions, so meh

#

I guess they added that one feature to query spirv extensions, but there are barely exts to query

#

definitely fewer than what exists in reality

stray warren
#

Side note I like how hyper specific the froge meme is

long robin
#

I stole it from #frogshed-๐“†

digital lion
#

yeah the spirv situtation is weird

digital lion
long robin
#

I also experienced some bugs on RDNA 2 (or maybe it was Pascal) after uploading all the shaders in my voxel engine as spir-v, so I just undid that change

#

the fsr2 shaders seem to work on both vendors as spir-v, albeit nvidia pessimizing two of the passes severely

stray warren
digital lion
#

wait jaker do you have read access to the internal bug ticks from the opengl driver team

long robin
#

yes, and write access even

heavy cipher
#

reddit username reveal ๐Ÿ˜ณ

long robin
#

Nah, that's just some guy who copied me

heavy cipher
long robin
#

Yes

#

Textures have built-in sampler state, but you can make separate sampler objects that you can bind to override that

heavy cipher
#

til

#

nice job

fiery sorrel
#

yes ik its silly and trivial asf but well just my way of showing I still care about the fwog ๐Ÿ˜…

long robin
#

mmm yeah I need to put an assert for that in more places, thx for the reminder

fiery sorrel
#

๐Ÿ˜…

#

I remembered that idea of making a Fwog version of CMake-Template

#

then I realized after forking that it shouldn't be a fork persay

long robin
fiery sorrel
#

because why not lol plus it'd be a good way to start new Fwog projects for ppl with a template

#

since the examples aren't really a template (I did use them as such naively my first time)

#

originally made it as a Fork then I realized 'wait, but its not intended to ever be merged into the original thats not what a Fork is supposed to be'

long robin
#

I didn't even know about the virtual assistant

fiery sorrel
#

yea same.

long robin
#

why can't you just detach your fork with a button

#

what a weird thing

fiery sorrel
#

I only found it from here.

long robin
#

interesting

golden schooner
#

@fiery sorrel describe in your own words wth you are actually trying to do

fiery sorrel
#

A cmake template based off yours but with a Fwog scene inside already

#

So ppl can use it to code something with fwog straight away in new projects

#

I can choose not to make it public if you prefer it not existing

#

So Deccer Cmake Template + Fwog

golden schooner
fiery sorrel
#

It is Deccer's CMake Template but Fwog version.

long robin
#

nice

#

btw the link to the pic in the readme is broken

fiery sorrel
#

why ๐Ÿ˜ข

long robin
#

it dieded

fiery sorrel
#

ok i try and fix

long robin
#

epic

fiery sorrel
#

some stuff kinda messy in da code but its fine so far. I'll improve it later

#

I see cube. It has example of using samplers and texture. honestly just needs a skybox example and itd be a good 'starter scene' for anyone ig

robust bough
#

I think Deccer cubes would be good

fiery sorrel
#

prob should go with a less harsh shade of green for the screenshot

long robin
#

[0, 1, 0] is a nice, pleasing color

golden schooner
#

0.1, 0.2, 0.3

fiery sorrel
#

so why did I make this? Just felt like it because as said no actual template for Fwog but turns out it was a decent way to refactor some Plane Game code indirectly

#

there we go

#

(yea I flipped the 0.2 and 0.3 because i figured fwog should be green)

#

oh yea and this template is public so if @long robin or @robust bough (who hates the globalist) wanna refactor the example to have better practices I'd accept the PRs

#

i can use the feedback too.

#

I tried to, unlike the example with the triangle in Fwog examples, use these scary things called... classes...

#

oh they ended up being structs nvm

golden schooner
#

only thing left is have fwog use fetchcontent for glad

fiery sorrel
#

So urm

#

Templates dont have an Issues board

#

oh no they do

#

i just need to enable them somehow?

#

there we go

golden schooner
#

theres one more flaw in the current fwog template

#

the ui is with srgb on

fiery sorrel
#

oh

#

how do I turn that off

golden schooner
#

check fwog's exshrimples

fiery sorrel
#

ok

#

Found it

golden schooner
#

hmm 2 spaces indent looks weird

#

is that fwog or your template?

golden schooner
#

you can post links without embed with < > arond the link

golden schooner
fiery sorrel
#

but forgot for the first haha

long robin
fiery sorrel
#

I keep forgetting if I am setting up my 'local indent/spacing' style stuff properly

#

so that when I can push and stuff it can be to some standard which dont look nice on my screen but is standardized

#

then on my IDE or editor I can do whatever I want

long robin
#

actually idc about the width as long as it's 2 or 4 spaces, I just don't like tabs because it makes consistently formatting stuff across devices harder

fiery sorrel
#

isn't there a way for my visual studios and visual code to auto convert my tabs to two spaces

#

that way i can use my pinky but still be in the space lifestyle

long robin
#

yeah it should show at the bottom of the text editor which mode it's in

#

or use a .clang-format file

fiery sorrel
#

oh sweet didn't know that

#

that means ive been living a space lifestyle without realizing it

#

This must be what those kids whose parents fed them brownies that had spanish baked in them felt like

#

And now in a weird cycle of life, I can go back and put Fwog Template stuff inside Alberquerque's codebase as a project, even tho its based off refactoring Alberquerque's Plane Game code ๐Ÿ˜…

golden schooner
#

yep, tab is a nono, tabs as spaces should be a setting set in any editor of yours, be it the editor itself or something like .editorconfig/.clang-format etc

#

vs defaults to tabs as spaces aka "smart tabs"

long robin
#

I use 2-space indents because that's what my first programming professor forced us to use (our assignments would be checked for formatting and would insta-fail if we didn't adhere to conventions lol)

golden schooner
long robin
#

we were given a tool to check formatting so it was 100% our fault if it wasn't up to par

#

tons of people STILL managed to submit code without checking formatting and failed assignments as a result

golden schooner
#

ye ๐Ÿ˜ฆ

#

but there is also .clang-format AND .editorconfig and resharper has its projectName.DotSettings (but also supports .editorconfig)

long robin
#

we were also given a driver program to use to test our assignment and people wouldn't run it and just submit a wrong assignment instead

golden schooner
#

oh man

long robin
#

people are lazy/dumb

#

the prof was strict, but 100% fair

golden schooner
#

his way of weeding out the dum dums

long robin
#

a bunch of people got caught cheating on the early assignments too

#

which were trivial things like fibonacci or sieve of eratosthenes

fiery sorrel
#

oh we had to do sieve of eratosthenes in x86_64 assembly for an assigment once

#

oh wait no it was finding square roots of an input nvm ๐Ÿ™ƒ

long robin
#

just use fsqrt smart

fiery sorrel
#

heh didnt know that was a thing. ofc the point was to just use only mov, add and stuff. had to keep track of a stack for the parameter

long robin
#

the trick I used was googling x86 sqrt

fiery sorrel
#

Any preferences for the skybox? Else I'd just make it numbered and draw my own crudely.

long robin
#

"numbered"?

fiery sorrel
#

Labelled*

#

Front, Back, Top, Down in the file

#

and in the image

#

but if u have an actual skybox u wanna use and have license for i can put it as example

long robin
#

ah

#

I don't mind the green, personally

fiery sorrel
#

ok. I'll keep the 'green' but have an example 'skybox' thats just labelled 'front' and stuff on a transparent png

#

and then its basically 'done'

#

I just wanted to have a skybox example as Fwog doesn't have any and it'd be cool to have one as making skyboxes in fwog is easy

golden schooner
#

๐Ÿ˜„

long robin
#

Let me help

fiery sorrel
#

Peffecto. I can include both and allow user to switch in the dear imgui.

#

Gonna let Jaker decide tho since its still representing his framework at end of the day

golden schooner
#

i have miramar ready as well

#

or the red sky without the letters

long robin
#

Here you go

golden schooner
#

๐Ÿ˜„

long robin
#

Make it organic instead of something that I have my grubby fingers deeply embedded within

fiery sorrel
#

u got the one without the letters too

#

then i can make it so the letters are a toggle

golden schooner
#

perhaps its not green-ey

#

rye field sunset