Indigomod - DX11 wrapper by Chiri and elbarterino - Bioshock Infinite
23 / 28
[quote="elbarterino"]In the US they almost always think that Switzerland is Sweden :-)
And yes, we do speak German as our mother tongue[/quote]
Ich war in der schweiz letzte woche. Es war meine erste mal, und es war super wunderschöne. Meine frendin wohnt in Bern. Auch wir habe nach Brig gefahren, weil meine Frau's Bruder da wohnt. Die Alpen sind wichtig toll, und auch die ganze Schweiz seht uber sauber und hübsch aus.
Seriously, for other who have never been... go to Switzerland. Cleanest, most beautiful country I have ever been to, and I have seen a lot of countries. And the crazy fools build house and villages on the side of mountains! Looks insane, and very awesome. The drive into the alps is also extraordinarily stunning.
Elbarterino, have you checked the messages before? I get the feeling there has been some terrible mis-communication going on. It would appear that you guys may have mis-read and totally mis-interpreted Helix. It's good you took down the message on your fund-raiser. The crowd here has been incredibly supportive of your work, and there has been a lot of good will here towards both you guys.
I really suggest you guys open a donation page. Your time need not be in waste. You can still make financial compensation for your time, and be the good guys everyone wants you to be :-)
EDIT: As for the US... lol, doesn't surpise me. When I was 16 I was in Florida with my parents. A shop keeper in a tourist shop asked if I was German (just a coincidence I live here now, no German ancestry and I speak with a thick Surrey (UK) accent). I told them no, that I was from England.
The woman looked at me incredulously. England, is that somewhere in Europe? ;-)
elbarterino said:In the US they almost always think that Switzerland is Sweden :-)
And yes, we do speak German as our mother tongue
Ich war in der schweiz letzte woche. Es war meine erste mal, und es war super wunderschöne. Meine frendin wohnt in Bern. Auch wir habe nach Brig gefahren, weil meine Frau's Bruder da wohnt. Die Alpen sind wichtig toll, und auch die ganze Schweiz seht uber sauber und hübsch aus.
Seriously, for other who have never been... go to Switzerland. Cleanest, most beautiful country I have ever been to, and I have seen a lot of countries. And the crazy fools build house and villages on the side of mountains! Looks insane, and very awesome. The drive into the alps is also extraordinarily stunning.
Elbarterino, have you checked the messages before? I get the feeling there has been some terrible mis-communication going on. It would appear that you guys may have mis-read and totally mis-interpreted Helix. It's good you took down the message on your fund-raiser. The crowd here has been incredibly supportive of your work, and there has been a lot of good will here towards both you guys.
I really suggest you guys open a donation page. Your time need not be in waste. You can still make financial compensation for your time, and be the good guys everyone wants you to be :-)
EDIT: As for the US... lol, doesn't surpise me. When I was 16 I was in Florida with my parents. A shop keeper in a tourist shop asked if I was German (just a coincidence I live here now, no German ancestry and I speak with a thick Surrey (UK) accent). I told them no, that I was from England.
The woman looked at me incredulously. England, is that somewhere in Europe? ;-)
[quote="elbarterino"]In the US they almost always think that Switzerland is Sweden :-)
And yes, we do speak German as our mother tongue[/quote]
Well count me among the smart Americans: I already knew that the Swedish spoke German! The Swiss speak Swiss, obviously.
But again I fear we're getting off topic.
[quote="elbarterino"]In the US they almost always think that Switzerland is Sweden :-)
And yes, we do speak German as our mother tongue[/quote]
Well, they both start with an 'S' :-)
A question about your wrapper: what kind of knowledge/education would I need in order to do some simple stuff? I looked up some DX11 examples on the web and I found something written in C#, which I can read (I'm a java programmer) and in the DX11 Api I found words like ViewPort and WorldView, which I'm not so sure of, because I know virtually nothing about programming shaders, but it's way better than the cryptic things like c(0,0,5) dcl(1,4,5) or whatever things I see in the usual shader dumps.
I also looked at Helix's Lua script for Bioshock Infinite for a minute, and yes, I'm cluesless of WHAT it is doing (I think it's looking for certain values in shaders and replace them with other values, but like I said I only checked it for a minute) but technically it's like any other scripting language.
In other words: what does it take to use your tool, if, by miracle, it would ever see the light of day?
@Arion: LOL!
elbarterino said:In the US they almost always think that Switzerland is Sweden :-)
And yes, we do speak German as our mother tongue
Well, they both start with an 'S' :-)
A question about your wrapper: what kind of knowledge/education would I need in order to do some simple stuff? I looked up some DX11 examples on the web and I found something written in C#, which I can read (I'm a java programmer) and in the DX11 Api I found words like ViewPort and WorldView, which I'm not so sure of, because I know virtually nothing about programming shaders, but it's way better than the cryptic things like c(0,0,5) dcl(1,4,5) or whatever things I see in the usual shader dumps.
I also looked at Helix's Lua script for Bioshock Infinite for a minute, and yes, I'm cluesless of WHAT it is doing (I think it's looking for certain values in shaders and replace them with other values, but like I said I only checked it for a minute) but technically it's like any other scripting language.
In other words: what does it take to use your tool, if, by miracle, it would ever see the light of day?
Ok you may be right that forcing the campaign to reach its goal given chiri & co do not intend to deliver is a bad idea.
but if they were to change their mind and deliver something to the community, i think none of the early donators could complain about this and authors shouldn't feel bad about free alternatives arising..the donations were never subject to any NO ALTERNATIVE AVAILABLE clause..
As helix stated himself, competition is good and healthy.
so at this point chiri if as stated you don't want to go ahead with the campaign please at least give us the opportunity to support your work through an unconditional donation page..it may give you the fuel you need to go forward on this project and allocate needed time...
Ok you may be right that forcing the campaign to reach its goal given chiri & co do not intend to deliver is a bad idea.
but if they were to change their mind and deliver something to the community, i think none of the early donators could complain about this and authors shouldn't feel bad about free alternatives arising..the donations were never subject to any NO ALTERNATIVE AVAILABLE clause..
As helix stated himself, competition is good and healthy.
so at this point chiri if as stated you don't want to go ahead with the campaign please at least give us the opportunity to support your work through an unconditional donation page..it may give you the fuel you need to go forward on this project and allocate needed time...
Yes our country is pretty nice, Danke :-)
Yes I read it, there was some misunderstanding but the result was about the same, but lets not get into this again.
We will think about it
Yes our country is pretty nice, Danke :-)
Yes I read it, there was some misunderstanding but the result was about the same, but lets not get into this again.
We will think about it
While being clearly beyond the abilities of most of us this is not "rocket science". If there's a need surely more than one person/team might take on the task of coming up with something.
As an example, while surfing for "DX9 injectors" there's now at least a handful of different ones that allow you to add/change sharpening, color and other visual effects. "ENB" may (or not) of been the first but now there's "SweetFX" and a few others that do the same sort of things.
While I applaud the efforts of those more capable than I do come up with something(s) to give us S3D users more gaming+viewing options I'm currently enjoying playing BI with the Tridef solution. It may not be 'perfect' but it works for me on my rig. (I just turned up the depth/popout to 50/30 to get a decent effect)
I suppose no one needs to recant the story of a little company with a product called "Netscape"?
While being clearly beyond the abilities of most of us this is not "rocket science". If there's a need surely more than one person/team might take on the task of coming up with something.
As an example, while surfing for "DX9 injectors" there's now at least a handful of different ones that allow you to add/change sharpening, color and other visual effects. "ENB" may (or not) of been the first but now there's "SweetFX" and a few others that do the same sort of things.
While I applaud the efforts of those more capable than I do come up with something(s) to give us S3D users more gaming+viewing options I'm currently enjoying playing BI with the Tridef solution. It may not be 'perfect' but it works for me on my rig. (I just turned up the depth/popout to 50/30 to get a decent effect)
I suppose no one needs to recant the story of a little company with a product called "Netscape"?
Naah we all just speak German here in Sweden boys ;)
Back on OT, lets hope they just release this thing or are they just ashamed that the Helix fix is much better or what!
Naah we all just speak German here in Sweden boys ;)
Back on OT, lets hope they just release this thing or are they just ashamed that the Helix fix is much better or what!
[quote="mbloof"]While being clearly beyond the abilities of most of us this is not "rocket science". If there's a need surely more than one person/team might take on the task of coming up with something.
As an example, while surfing for "DX9 injectors" there's now at least a handful of different ones that allow you to add/change sharpening, color and other visual effects. "ENB" may (or not) of been the first but now there's "SweetFX" and a few others that do the same sort of things.
While I applaud the efforts of those more capable than I do come up with something(s) to give us S3D users more gaming+viewing options I'm currently enjoying playing BI with the Tridef solution. It may not be 'perfect' but it works for me on my rig. (I just turned up the depth/popout to 50/30 to get a decent effect)
I suppose no one needs to recant the story of a little company with a product called "Netscape"?[/quote]
Aaaa Netscape...the good ol'days...
Anyway back on the topic... the problem about creating a wrapper is and is not rocket science. It depends if you know how to do it or not. If you would know how to make rockets than you would say is not "rocket science":))
I for one know how to create an app from scratch using OpenGL (I haven't worked in DirectX) but by comparing the APIs they are very close (the logic is the same only the syntax differs)
The real problem and what I am interested in is actually how to hook the api and DUMP the shaders. These are 2 different things, but most go hand in hand;)) There are alot of apps who are hooking. The most known one is Fraps;)) Dumping is what I am interested in.
And I am going to explain it why:
- A shader program must be loaded, compiled and linked with your OpenGL/DirectX app. So if you are hooking an app that is already running, you have the shaders loaded in the GPU but in machine code. 1).Even so I have no idea how to dump them to a file
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?
3). How is the "swap" of shaders being done? By the virtual address?
I looked around the web for quite some time regarding this yet I couldn't find any article answering these questions... Maybe I just ask it wrong.
@Schmeltzer
ViewPort - is actually a RECT - saying where the RECT starts rendering and where it ends.
In most applications it starts at 0,0 (which can be upper or lower left corner of your screen) and is "resolution width" long and "resolution height" high.
WorldView - This is actually a 4x4 Matrix also called ModelView Matrix. Is a multiplication of two other matrices Model(World) and View Matrix:
- Model is the matrix that is per object and contains information about scaling, position and rotation of the object/mesh you are drawing.
- View Matrix is the one used by your virtual Camera. It is built and holds information like where your camera resides in the virtual world, where it is pointing and so on...
There are alot of tutorials/guides on the web explaining all this math. While it can be quite a pain to use it at some time once you understand it is not hard. So "rocket science" ? or not ;))
mbloof said:While being clearly beyond the abilities of most of us this is not "rocket science". If there's a need surely more than one person/team might take on the task of coming up with something.
As an example, while surfing for "DX9 injectors" there's now at least a handful of different ones that allow you to add/change sharpening, color and other visual effects. "ENB" may (or not) of been the first but now there's "SweetFX" and a few others that do the same sort of things.
While I applaud the efforts of those more capable than I do come up with something(s) to give us S3D users more gaming+viewing options I'm currently enjoying playing BI with the Tridef solution. It may not be 'perfect' but it works for me on my rig. (I just turned up the depth/popout to 50/30 to get a decent effect)
I suppose no one needs to recant the story of a little company with a product called "Netscape"?
Aaaa Netscape...the good ol'days...
Anyway back on the topic... the problem about creating a wrapper is and is not rocket science. It depends if you know how to do it or not. If you would know how to make rockets than you would say is not "rocket science":))
I for one know how to create an app from scratch using OpenGL (I haven't worked in DirectX) but by comparing the APIs they are very close (the logic is the same only the syntax differs)
The real problem and what I am interested in is actually how to hook the api and DUMP the shaders. These are 2 different things, but most go hand in hand;)) There are alot of apps who are hooking. The most known one is Fraps;)) Dumping is what I am interested in.
And I am going to explain it why:
- A shader program must be loaded, compiled and linked with your OpenGL/DirectX app. So if you are hooking an app that is already running, you have the shaders loaded in the GPU but in machine code. 1).Even so I have no idea how to dump them to a file
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?
3). How is the "swap" of shaders being done? By the virtual address?
I looked around the web for quite some time regarding this yet I couldn't find any article answering these questions... Maybe I just ask it wrong.
@Schmeltzer
ViewPort - is actually a RECT - saying where the RECT starts rendering and where it ends.
In most applications it starts at 0,0 (which can be upper or lower left corner of your screen) and is "resolution width" long and "resolution height" high.
WorldView - This is actually a 4x4 Matrix also called ModelView Matrix. Is a multiplication of two other matrices Model(World) and View Matrix:
- Model is the matrix that is per object and contains information about scaling, position and rotation of the object/mesh you are drawing.
- View Matrix is the one used by your virtual Camera. It is built and holds information like where your camera resides in the virtual world, where it is pointing and so on...
There are alot of tutorials/guides on the web explaining all this math. While it can be quite a pain to use it at some time once you understand it is not hard. So "rocket science" ? or not ;))
1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc
To someone like me, it is rocket science. But then again, I would like to see a coder with no music experience playing over the changes of chords using the melodic minor and diminished scale including their various modes in a tasteful fashion.
It's always easy when you know how ;-)
To someone like me, it is rocket science. But then again, I would like to see a coder with no music experience playing over the changes of chords using the melodic minor and diminished scale including their various modes in a tasteful fashion.
Not a best place for this discussion, but ...
[quote="helifax"]1).Even so I have no idea how to dump them to a file[/quote]
For simple shader binary dump all you need is hook :
ID3D11Device::CreateVertexShader
ID3D11Device::CreatePixelShader
Both have buffers in parameters with shader input.
And to get asm code you can use D3DDisassemble, but I would not recommend to use it for dx11.
Because there is no asm compiler for dx11 and its implementation is s**t. It can be used only for debug.
For example it won't disasm _z flag of discard command and some more.
for me the first task was writing normal shader disassembler.
[quote="helifax"]
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?[/quote]
You can build a code tree based on asm (for syntax analyzing better to look at regular expressions) and from that tree build binary or even restore sources (code won't be 100% the same).
At least that how i did(Atm only compiling shader to binary and binary to asm).
Shader code is the same even for cg(i mean main program parts, code blob), but shader binary of coz different(DX shader is more complicated, smth like PE format.).
[quote="helifax"]
3). How is the "swap" of shaders being done? By the virtual address?
[/quote]
For simple you can just use global list and fill them when shader created, later check it when render set shader.
But this is a very bad solution, today everywhere uses multi-thread rendering and this lead to crashes or critical sections(both are bad solutions :) ).
I prefer swap with my own classes inherited from interfaces, of coz in this case you should check if application try to set your shader or original(if you pass pointer of your class to DX functions it will crash).
But every class has its own set of fields which makes all this thread-safe (but of coz more complicated to handle all this).
helifax said:1).Even so I have no idea how to dump them to a file
For simple shader binary dump all you need is hook :
ID3D11Device::CreateVertexShader
ID3D11Device::CreatePixelShader
Both have buffers in parameters with shader input.
And to get asm code you can use D3DDisassemble, but I would not recommend to use it for dx11.
Because there is no asm compiler for dx11 and its implementation is s**t. It can be used only for debug.
For example it won't disasm _z flag of discard command and some more.
for me the first task was writing normal shader disassembler.
helifax said:
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?
You can build a code tree based on asm (for syntax analyzing better to look at regular expressions) and from that tree build binary or even restore sources (code won't be 100% the same).
At least that how i did(Atm only compiling shader to binary and binary to asm).
Shader code is the same even for cg(i mean main program parts, code blob), but shader binary of coz different(DX shader is more complicated, smth like PE format.).
helifax said:
3). How is the "swap" of shaders being done? By the virtual address?
For simple you can just use global list and fill them when shader created, later check it when render set shader.
But this is a very bad solution, today everywhere uses multi-thread rendering and this lead to crashes or critical sections(both are bad solutions :) ).
I prefer swap with my own classes inherited from interfaces, of coz in this case you should check if application try to set your shader or original(if you pass pointer of your class to DX functions it will crash).
But every class has its own set of fields which makes all this thread-safe (but of coz more complicated to handle all this).
[quote="-=HeliX=-"]Not a best place for this discussion, but ...
[quote="helifax"]1).Even so I have no idea how to dump them to a file[/quote]
For simple shader binary dump all you need is hook :
ID3D11Device::CreateVertexShader
ID3D11Device::CreatePixelShader
Both have buffers in parameters with shader input.
And to get asm code you can use D3DDisassemble, but I would not recommend to use it for dx11.
Because there is no asm compiler for dx11 and its implementation is s**t. It can be used only for debug.
For example it won't disasm _z flag of discard command and some more.
for me the first task was writing normal shader disassembler.
[quote="helifax"]
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?[/quote]
You can build a code tree based on asm (for syntax analyzing better to look at regular expressions) and from that tree build binary or even restore sources (code won't be 100% the same).
At least that how i did(Atm only compiling shader to binary and binary to asm).
Shader code is the same even for cg(i mean main program parts, code blob), but shader binary of coz different(DX shader is more complicated, smth like PE format.).
[quote="helifax"]
3). How is the "swap" of shaders being done? By the virtual address?
[/quote]
For simple you can just use global list and fill them when shader created, later check it when render set shader.
But this is a very bad solution, today everywhere uses multi-thread rendering and this lead to crashes or critical sections(both are bad solutions :) ).
I prefer swap with my own classes inherited from interfaces, of coz in this case you should check if application try to set your shader or original(if you pass pointer of your class to DX functions it will crash).
But every class has its own set of fields which makes all this thread-safe (but of coz more complicated to handle all this).[/quote]
NOW THIS!!! THIS IS PRICELESS!!! It explains some really interesting things and definitely something they don't teach you in Uni. ( I asked a couple of guys at the Uni and they were like "err..No real idea" LOL)
Big thanks for the info!
-=HeliX=- said:Not a best place for this discussion, but ...
helifax said:1).Even so I have no idea how to dump them to a file
For simple shader binary dump all you need is hook :
ID3D11Device::CreateVertexShader
ID3D11Device::CreatePixelShader
Both have buffers in parameters with shader input.
And to get asm code you can use D3DDisassemble, but I would not recommend to use it for dx11.
Because there is no asm compiler for dx11 and its implementation is s**t. It can be used only for debug.
For example it won't disasm _z flag of discard command and some more.
for me the first task was writing normal shader disassembler.
helifax said:
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?
You can build a code tree based on asm (for syntax analyzing better to look at regular expressions) and from that tree build binary or even restore sources (code won't be 100% the same).
At least that how i did(Atm only compiling shader to binary and binary to asm).
Shader code is the same even for cg(i mean main program parts, code blob), but shader binary of coz different(DX shader is more complicated, smth like PE format.).
helifax said:
3). How is the "swap" of shaders being done? By the virtual address?
For simple you can just use global list and fill them when shader created, later check it when render set shader.
But this is a very bad solution, today everywhere uses multi-thread rendering and this lead to crashes or critical sections(both are bad solutions :) ).
I prefer swap with my own classes inherited from interfaces, of coz in this case you should check if application try to set your shader or original(if you pass pointer of your class to DX functions it will crash).
But every class has its own set of fields which makes all this thread-safe (but of coz more complicated to handle all this).
NOW THIS!!! THIS IS PRICELESS!!! It explains some really interesting things and definitely something they don't teach you in Uni. ( I asked a couple of guys at the Uni and they were like "err..No real idea" LOL)
Big thanks for the info!
1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc
wow, what a thread, two coffees later....LOL...one thing that is surely identifiable within this thread is passion for 3D gaming and 3D's survival. The fixes that have come out from the community is nothing short of remarkable. An important aspect of any hobby or escapism from the real world is the freedom from obligation. Rock on!
wow, what a thread, two coffees later....LOL...one thing that is surely identifiable within this thread is passion for 3D gaming and 3D's survival. The fixes that have come out from the community is nothing short of remarkable. An important aspect of any hobby or escapism from the real world is the freedom from obligation. Rock on!
Ok, so if this is not the best place for discussions like this, let's create one!
@Helifax, thanks!
edit: today I don't care 2 much about being off-topic :-) so, do you thing it's possible to fix Bioshock 2 for Surround. More specific, is it possible to place the mission arrow back on the centre monitor? I'm really bad at directions, so I really need it, as in: without it I can be hours stuck looking where to go. It's the only thing that keeps me from replaying Bioshock 2.
Ok, so if this is not the best place for discussions like this, let's create one!
@Helifax, thanks!
edit: today I don't care 2 much about being off-topic :-) so, do you thing it's possible to fix Bioshock 2 for Surround. More specific, is it possible to place the mission arrow back on the centre monitor? I'm really bad at directions, so I really need it, as in: without it I can be hours stuck looking where to go. It's the only thing that keeps me from replaying Bioshock 2.
Ich war in der schweiz letzte woche. Es war meine erste mal, und es war super wunderschöne. Meine frendin wohnt in Bern. Auch wir habe nach Brig gefahren, weil meine Frau's Bruder da wohnt. Die Alpen sind wichtig toll, und auch die ganze Schweiz seht uber sauber und hübsch aus.
Seriously, for other who have never been... go to Switzerland. Cleanest, most beautiful country I have ever been to, and I have seen a lot of countries. And the crazy fools build house and villages on the side of mountains! Looks insane, and very awesome. The drive into the alps is also extraordinarily stunning.
Elbarterino, have you checked the messages before? I get the feeling there has been some terrible mis-communication going on. It would appear that you guys may have mis-read and totally mis-interpreted Helix. It's good you took down the message on your fund-raiser. The crowd here has been incredibly supportive of your work, and there has been a lot of good will here towards both you guys.
I really suggest you guys open a donation page. Your time need not be in waste. You can still make financial compensation for your time, and be the good guys everyone wants you to be :-)
EDIT: As for the US... lol, doesn't surpise me. When I was 16 I was in Florida with my parents. A shop keeper in a tourist shop asked if I was German (just a coincidence I live here now, no German ancestry and I speak with a thick Surrey (UK) accent). I told them no, that I was from England.
The woman looked at me incredulously. England, is that somewhere in Europe? ;-)
OS: Win 8 CPU: I7 4770k 3.5GZ GPU: GTX 780ti
Well count me among the smart Americans: I already knew that the Swedish spoke German! The Swiss speak Swiss, obviously.
But again I fear we're getting off topic.
OS: Win 8 CPU: I7 4770k 3.5GZ GPU: GTX 780ti
Well, they both start with an 'S' :-)
A question about your wrapper: what kind of knowledge/education would I need in order to do some simple stuff? I looked up some DX11 examples on the web and I found something written in C#, which I can read (I'm a java programmer) and in the DX11 Api I found words like ViewPort and WorldView, which I'm not so sure of, because I know virtually nothing about programming shaders, but it's way better than the cryptic things like c(0,0,5) dcl(1,4,5) or whatever things I see in the usual shader dumps.
I also looked at Helix's Lua script for Bioshock Infinite for a minute, and yes, I'm cluesless of WHAT it is doing (I think it's looking for certain values in shaders and replace them with other values, but like I said I only checked it for a minute) but technically it's like any other scripting language.
In other words: what does it take to use your tool, if, by miracle, it would ever see the light of day?
@Arion: LOL!
but if they were to change their mind and deliver something to the community, i think none of the early donators could complain about this and authors shouldn't feel bad about free alternatives arising..the donations were never subject to any NO ALTERNATIVE AVAILABLE clause..
As helix stated himself, competition is good and healthy.
so at this point chiri if as stated you don't want to go ahead with the campaign please at least give us the opportunity to support your work through an unconditional donation page..it may give you the fuel you need to go forward on this project and allocate needed time...
DX58SO2 Intel Board | i7-970 | SLI 2x Gigabyte GTX 970 4GB stock OC @ 1033/1111 Mhz | 12GB Mem | Windows 10 64bit driver 368.22 | 3D Vision | PJ6221 Viewsonic Projector
Yes I read it, there was some misunderstanding but the result was about the same, but lets not get into this again.
We will think about it
As an example, while surfing for "DX9 injectors" there's now at least a handful of different ones that allow you to add/change sharpening, color and other visual effects. "ENB" may (or not) of been the first but now there's "SweetFX" and a few others that do the same sort of things.
While I applaud the efforts of those more capable than I do come up with something(s) to give us S3D users more gaming+viewing options I'm currently enjoying playing BI with the Tridef solution. It may not be 'perfect' but it works for me on my rig. (I just turned up the depth/popout to 50/30 to get a decent effect)
I suppose no one needs to recant the story of a little company with a product called "Netscape"?
i7-2600K-4.5Ghz/Corsair H100i/8GB/GTX780SC-SLI/Win7-64/1200W-PSU/Samsung 840-500GB SSD/Coolermaster-Tower/Benq 1080ST @ 100"
Back on OT, lets hope they just release this thing or are they just ashamed that the Helix fix is much better or what!
Aaaa Netscape...the good ol'days...
Anyway back on the topic... the problem about creating a wrapper is and is not rocket science. It depends if you know how to do it or not. If you would know how to make rockets than you would say is not "rocket science":))
I for one know how to create an app from scratch using OpenGL (I haven't worked in DirectX) but by comparing the APIs they are very close (the logic is the same only the syntax differs)
The real problem and what I am interested in is actually how to hook the api and DUMP the shaders. These are 2 different things, but most go hand in hand;)) There are alot of apps who are hooking. The most known one is Fraps;)) Dumping is what I am interested in.
And I am going to explain it why:
- A shader program must be loaded, compiled and linked with your OpenGL/DirectX app. So if you are hooking an app that is already running, you have the shaders loaded in the GPU but in machine code. 1).Even so I have no idea how to dump them to a file
2). The second part (that I saw Chiri talking about) is disassemble the shaders back in C code which is an awesome idea. Again I have no idea how. Can GC compiler also disassemble?
3). How is the "swap" of shaders being done? By the virtual address?
I looked around the web for quite some time regarding this yet I couldn't find any article answering these questions... Maybe I just ask it wrong.
@Schmeltzer
ViewPort - is actually a RECT - saying where the RECT starts rendering and where it ends.
In most applications it starts at 0,0 (which can be upper or lower left corner of your screen) and is "resolution width" long and "resolution height" high.
WorldView - This is actually a 4x4 Matrix also called ModelView Matrix. Is a multiplication of two other matrices Model(World) and View Matrix:
- Model is the matrix that is per object and contains information about scaling, position and rotation of the object/mesh you are drawing.
- View Matrix is the one used by your virtual Camera. It is built and holds information like where your camera resides in the virtual world, where it is pointing and so on...
There are alot of tutorials/guides on the web explaining all this math. While it can be quite a pain to use it at some time once you understand it is not hard. So "rocket science" ? or not ;))
1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc
My website with my fixes and OpenGL to 3D Vision wrapper:
http://3dsurroundgaming.com
(If you like some of the stuff that I've done and want to donate something, you can do it with PayPal at tavyhome@gmail.com)
It's always easy when you know how ;-)
OS: Win 8 CPU: I7 4770k 3.5GZ GPU: GTX 780ti
For simple shader binary dump all you need is hook :
ID3D11Device::CreateVertexShader
ID3D11Device::CreatePixelShader
Both have buffers in parameters with shader input.
And to get asm code you can use D3DDisassemble, but I would not recommend to use it for dx11.
Because there is no asm compiler for dx11 and its implementation is s**t. It can be used only for debug.
For example it won't disasm _z flag of discard command and some more.
for me the first task was writing normal shader disassembler.
You can build a code tree based on asm (for syntax analyzing better to look at regular expressions) and from that tree build binary or even restore sources (code won't be 100% the same).
At least that how i did(Atm only compiling shader to binary and binary to asm).
Shader code is the same even for cg(i mean main program parts, code blob), but shader binary of coz different(DX shader is more complicated, smth like PE format.).
For simple you can just use global list and fill them when shader created, later check it when render set shader.
But this is a very bad solution, today everywhere uses multi-thread rendering and this lead to crashes or critical sections(both are bad solutions :) ).
I prefer swap with my own classes inherited from interfaces, of coz in this case you should check if application try to set your shader or original(if you pass pointer of your class to DX functions it will crash).
But every class has its own set of fields which makes all this thread-safe (but of coz more complicated to handle all this).
NOW THIS!!! THIS IS PRICELESS!!! It explains some really interesting things and definitely something they don't teach you in Uni. ( I asked a couple of guys at the Uni and they were like "err..No real idea" LOL)
Big thanks for the info!
1x Palit RTX 2080Ti Pro Gaming OC(watercooled and overclocked to hell)
3x 3D Vision Ready Asus VG278HE monitors (5760x1080).
Intel i9 9900K (overclocked to 5.3 and watercooled ofc).
Asus Maximus XI Hero Mobo.
16 GB Team Group T-Force Dark Pro DDR4 @ 3600.
Lots of Disks:
- Raid 0 - 256GB Sandisk Extreme SSD.
- Raid 0 - WD Black - 2TB.
- SanDisk SSD PLUS 480 GB.
- Intel 760p 256GB M.2 PCIe NVMe SSD.
Creative Sound Blaster Z.
Windows 10 x64 Pro.
etc
My website with my fixes and OpenGL to 3D Vision wrapper:
http://3dsurroundgaming.com
(If you like some of the stuff that I've done and want to donate something, you can do it with PayPal at tavyhome@gmail.com)
@Helifax, thanks!
edit: today I don't care 2 much about being off-topic :-) so, do you thing it's possible to fix Bioshock 2 for Surround. More specific, is it possible to place the mission arrow back on the centre monitor? I'm really bad at directions, so I really need it, as in: without it I can be hours stuck looking where to go. It's the only thing that keeps me from replaying Bioshock 2.