Mass Effect: Andromeda - 100% (plus 10%) - 3D VISION Ready Fix
5 / 22
Edit:
@DarkStarSword:
Could you guide me on how to start the game with 0x4000 flag and find out the RTVs that need be made "mono" for the [TextureOverride]?
Also, on how to find all the CS that require the UpdateSubresource() bug (How to identify what UAV I need to copy)?
I want to give this one a try in the weekend and see how far I can get with it;)
Many Thanks:)
Edit:
@DarkStarSword:
Could you guide me on how to start the game with 0x4000 flag and find out the RTVs that need be made "mono" for the [TextureOverride]?
Also, on how to find all the CS that require the UpdateSubresource() bug (How to identify what UAV I need to copy)?
I want to give this one a try in the weekend and see how far I can get with it;)
Many Thanks:)
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
[quote] Could you guide me on how to start the game with 0x4000 flag and find out the RTVs that need be made "mono" for the [TextureOverride]?
Also, on how to find all the CS that require the UpdateSubresource() bug (How to identify what UAV I need to copy)?[/quote]
I don't have a single answer for this (and both are really variations of the same process) - It needs some intuition and educated guesses and using all the tools available to us, but I can try to give you some pointers. Sometimes I wish we all lived nearby - this is the type of exercise that I think would work best if we could both see the same screen and work through it together - peer programming type of idea, but peer shader hacking ;-) Maybe we could do it over skype or something... if only we could get skype to share 3D Vision :)
In general though, this works much the same as any other detailed analysis - you want to first identify a shader related to the effect using either hunting or frame analysis dump_rt. This isn't necessarily a shader you will fix - for these type of issues we're trying to identify a resource, so this is just to get a starting point to work through analysing the effect to see what's wrong.
Once you have found a related shader you want to examine all the inputs and outputs to that shader - you want to check the resources in all the t (input only, any shader), u (input and/or output, compute and pixel shaders only) and o (output only, pixel shaders only) registers. Depending on the type of input your options include:
[list]
[.] Texure2D: Use either frame analysis dump_tex_dds, or my debug_2d shader. You can grab this debug shader from my Life is Strange Before the Storm fix. These may occsionally be an array of six Texture2Ds for cube mapping - I don't have a debug shader for these, but I *think* I fixed a bug in 3DMigoto so that these could copy for oomek, and in theory you should still see the first face of the cube[/.]
[.] Texture3D: Frame analysis won't work. Grab my volume debug shaders from WATCH_DOGS2 or Far Cry Primal.[/.]
[.] Texture1D: Frame analysis won't work, and I don't have any debug shaders for these yet (they wouldn't be particularly intuitive to view these as textures anyway). So far I haven't found any of these that needed to be adjusted, so we can hopefully ignore them - but never entirely discount something.[/.]
[.] Buffer / StructuredBuffer: Frame analysis will only show the buffer in mono. Grab the latest version of my constant buffer debug shaders from here: [url]https://github.com/DarkStarSword/3d-fixes/tree/master/custom_shader_cb_live_view[/url][/.]
[/list]
To use the debug shaders, define a [ShaderOverride] section for the shader you are examining, and go through each input of the shader one at a time (Changing the shader type, register type and slot number to match the resource you are examining):
[list]
[.] Texure2D Input: ResourceDebug2D = ps-t0[/.]
[.] Texure2D Output: post ResourceDebug2D = o0[/.]
[.] Texture3D Input: ResourceDebugVolume = ps-t1[/.]
[.] Buffer / StructuredBuffer: Check if the shader seems to be treating it as floats or ints, then either:
ResourceDebugBuf = cs-t2
ResourceDebugBufUint = cs-u0
Do not use ResourceDebugCB for these - that is for constant buffers, and will not show stereo buffers (constant buffers cannot be stereo)
StructuredBuffers may sometimes contain mixed data types, so in some cases both of these debug buffers might be useful. Try one and see what it looks like - if it doesn't makes sense try the other. Remember that using the floating point debug buffer will often render other data types as just "0" and be misleading, while the integer debug buffer will at least show something.[/.]
[/list]
Remember to specify "post" if you are examining an output, since you want to look at it after the shader has run (however, it can also be useful to check it before the shader has run to check it is that shader writing broken data to it, remembering that the resource may sometimes have stale data from the previous frame which may be misleading).
If the shader is used multiple times in the frame you may need to adjust "max_copies_per_frame" in the [ResourceDebugXX] section to get the first, second, third, last, etc. iteration of the shader. Generally speaking, you want to start with the first.
Sometimes you may need to specify "ref" or "copy" - this can go either way, and in some cases may impact on whether the debug shader will show the resource in stereo or not. Usually you don't need this, but I've come across a few situations where I did, and these were not always intuitive, so just keep it in mind.
All going well once you hit F10 you will be looking at the resource live instead of the game. For Texture2D resources this should be pretty intuitive, though you may need to adjust the inputs to the shader to multiply the value by some constant to bring it into a range you can see, and there's another input parameter that you can set if you need to flip it vertically. Sometimes you might tweak the debug shader in some way if you need to make it clearer (I notice this game has some uint Texture2Ds, which you would need to change the types in the shader and adjust the scaling to see). Texture3D resources are similar, but will display a bunch of 2D slices of the 3D texture on the screen - these debug shaders are for debugging a specific volumetric fog effect, and may need tweaking for other 3D textures. The buffer debug shaders will attempt to render the buffer as an array of floats or integers, depending on which debug resource you used. If you don't see anything, or all zeroes or all black, quickly double check you used the right type of debug buffer for the resource you were trying to examine before moving on (I've made that mistake a few times).
In all cases you want to compare the resource in both eyes and see if it *makes sense*. This is where you need to apply some intuition, because I can't tell you what it's supposed to look like - that answer is different every time. Texture2Ds are the easiest - in general if it's something from the point of view of the camera it should be stereo, but if it's from the point of view of a light source it should be mono. If it's from the point of view of a reflection probe it could go either way depending on whether the reflection can be made to work in stereo or not. An environment map or cube map reflection should usually be mono, a screen space reflection should be stereo (however doing so may break the reflection more until you fix the shader, so if making it mono gives you "good enough" results and you don't want to fix the shader that's fine). The rest are harder - what should a Texture3D look like in stereo? What should a buffer look like in stereo? Maybe they should be mono (or at least identical in both eyes - whether or not the buffer is technically mono or stereo doesn't always matter), or maybe they should be different in each eye - I can't tell you the answer to this, you need to use some intuition to work it out.
But, even if you aren't sure if it should be mono or stereo, it should at least should look *similar* between both eyes - if you see a buffer in the right eye that, e.g. has values fluctuating between 30000 and 40000, while in the left eye is showing -1042352345097325432 (this is pretty much what I saw in the tile lighting buffers), something is very clearly wrong in the left eye. Always remember the right eye is most likely to be correct since 3D Vision treats the right eye as the primary buffer, so if you aren't sure which side is showing what the buffer is supposed to look like - it's the right side.
If you check every input to the shader and they are all fine, but an output is broken (and was not broken before the shader was run) that points to the shader as being the culprit. Either fix the shader or if your intuition tells you to, force the outputs to mono/stereo with a [TextureOverride] section, restarting the game to ensure it takes effect.
Once you've identified a suspect resource you need to trace it to find out where it came from. For this you need to use the frame analysis log (you might be able to guess based on a frame analysis dump_rt dump_tex run, but the log takes out the guess work, and I highly recommend learning to use it effectively). Now, this is a problem for Mass Effect Andromeda because you have used hooking, and to work around a crash we don't hook the XXSetShaderResource call, so it won't show up in the frame analysis log, which is a problem because we *need* to see this call to find the resource in the log - without it you are back to guess work. We might need to get you up and running with the experimental branch, or wait for us to release 1.3 - this branch can get in MEA without using hooking, meaning you can get a good quality frame analysis log with this call. Also, avoid 1.2.68 & 1.2.69 when performing this type of analysis - the performance improvements in 1.2.68 broke the frame analysis log in some circumstances (will be fixed in both the upcoming 1.2.70 and 1.3 versions).
Once you have a frame analysis log the procedure to trace it is:
1. Search for the shader hash and note the draw call number at the start of the line, e.g. looking for one of the (later) tile lighting shaders:
[code]
002021 CSSetShader(pComputeShader:0x00000000507F5EB8, ppClassInstances:0x0000000000000000, NumClassInstances:0) hash=9a90b9b0ee8e91a2
[/code]
2. Find an XXSetShaderResources call (where XX is the shader type) with a matching draw call number that binds a texture in that slot, or a CSSetUnorderedAccessViews call if it was a compute shader UAV, or a OMSetRenderTargetsAndUnorderedAccessViews call if it was a pixel shader UAV. If there is none, search backwards in the file to find the most recent one that did. e.g. tracing the StructuredBuffer in slot cs-t19:
[code]
002021 CSSetShaderResources(StartSlot:19, NumViews:1, ppShaderResourceViews:0x0000000035275C40)
19: view=0x000000028AD1BB28 resource=0x000000028AF184A0 hash=7e301736 orig_hash=00000000
[/code]
3. Take note of the value next to resource= - That is the memory address of that resource, and will uniquely identify it in the log (the hash may not be unique).
4. Search backwards in the log file to find where else that resource was used - you are looking for the most recent time that it was written to. Skip over other XXSetShaderResource calls, and look for CSSetUnorderedAccessViews, OMSetRenderTarget[AndUnorderedAccessViews], Map, UpdateSubresource, CopyResource, CopySubresourceRegion
[list]
[.] If you find a Copy or CopySubresourceRegion with this resource as the *destination*, continue your search using the copy source instead, but also keep in mind that this copy may act as a boundary between stereo and mono resources - if a stereo resource is copied into a mono resource it may lose the data from the left eye, or alternatively the driver heuristics may use this to decide it needs to change the destination to be stereo.[/.]
[.] If you find a Map or UpdateSubresource it means it came from the CPU - stop searching, you've found your buffer - now you need to work out what to do with it.[/.]
[.] If you find it used in a CSSetUnorderedAccessViews or OMSetRenderTargets[AndUnorderedAccessViews] it has been used as the output (or possibly input if it is a UAV) of another shader, e.g.
[code]
002006 CSSetUnorderedAccessViews(StartSlot:0, NumUAVs:1, ppUnorderedAccessViews:0x0000000035275C40, pUAVInitialCounts:0x0000000000000000)
0: view=0x000000019AD87CF8 resource=0x000000028AF184A0 hash=7e301736 orig_hash=00000000
[/code]
In this case, you now need to find what shaders are used in this draw call number, e.g.
[code]
002006 CSSetShader(pComputeShader:0x0000000046B517F8, ppClassInstances:0x0000000000000000, NumClassInstances:0) hash=4ef93cb9ed279c4c
[/code]
If there is none with a matching draw call number, search backwards to find the most recent one.
[/.]
[/list]
5. If you traced it to the output of another shader, repeat this *ENTIRE* procedure on the new shader - checking all inputs and outputs to that shader, tracing broken inputs, etc. You're looking to see if this shader is broken, or if it is merely processing another broken input. Repeat until you find the real source of the issue, stopping when you find no broken inputs, or a broken resource that came from the CPU, or something else that your intuition says is suspect e.g.
[code]
(cs-t8 looks suspect, among others)
002006 CSSetShaderResources(StartSlot:8, NumViews:1, ppShaderResourceViews:0x0000000035275C40)
8: view=0x000000028AFC3F28 resource=0x000000028AF283A0 hash=7e301736 orig_hash=00000000
...
002005 CSSetUnorderedAccessViews(StartSlot:0, NumUAVs:1, ppUnorderedAccessViews:0x0000000035275C40, pUAVInitialCounts:0x0000000000000000)
0: view=0x0000000190A17238 resource=0x000000028AF283A0 hash=7e301736 orig_hash=00000000
...
002005 CSSetShader(pComputeShader:0x0000000048250538, ppClassInstances:0x0000000000000000, NumClassInstances:0) hash=14f8f4febc50582f
...
(cs-t8 looks suspect, among others)
002005 CSSetShaderResources(StartSlot:8, NumViews:1, ppShaderResourceViews:0x0000000035275C40)
8: view=0x000000028AD14528 resource=0x000000028AF1B4A0 hash=7985609f orig_hash=00000000
...
002004 CSSetUnorderedAccessViews(StartSlot:0, NumUAVs:1, ppUnorderedAccessViews:0x0000000035275C40, pUAVInitialCounts:0x0000000000000000)
0: view=0x000000019AD87EB8 resource=0x000000028AF1B4A0 hash=7985609f orig_hash=00000000
...
002004 CSSetShader(pComputeShader:0x0000000046B53338, ppClassInstances:0x0000000000000000, NumClassInstances:0) hash=358287531d379f46
...
(cs-u2 is the only suspect in this shader)
002004 CSSetUnorderedAccessViews(StartSlot:2, NumUAVs:1, ppUnorderedAccessViews:0x0000000035275C40, pUAVInitialCounts:0x0000000000000000)
0: view=0x000000019AD85EB8 resource=0x000000028AF1CCA0 hash=25ea5018 orig_hash=00000000
^ Note bug to be fixed in next 3DMigoto release - should be 2 from StartSlot
...
002004 UpdateSubresource(pDstResource:0x000000028AF1CCA0, DstSubresource:0, pDstBox:0x0000000000000000, pSrcData:0x0000000035275CB8, SrcRowPitch:4, SrcDepthPitch:0) hash=25ea5018 orig_hash=00000000
[/code]
In this case I traced the issue to a resource from the CPU - this is the UpdateSubresource() bug (and there were four of these going to different shaders, but once I knew what I was looking for it was easy to spot the others, since they were literally right next to this one in the log).
If you trace it to the output of a shader and there are no broken inputs you need to either fix that shader, or force that output to be mono/stereo with a [TextureOverride] and restart the game (in some cases reloading a level might be enough - you need the game to destroy and recreate the resource somehow, but restarting is always safer). Use your intuition here - I can't tell you the correct answer.
Once you have fixed the outputs to the shader you identified you may or may not be finished - it might just get broken again in the very next shader, but now you have traced it backwards it should be simple to trace it forwards as needed fixing shaders or outputs until the effect works.
As an example of a resource I needed to force to mono in WATCH_DOGS2 - I found a reflection texture that had both mono and stereo elements in the same texture - If I recall correctly it had a simple mono environment map reflection, but also contained reflections of light sources that were renderd in stereo. I might (probably not) have been able to make it work if everything was stereo, but definitely not with this mix of stereo and mono, so forcing it to mono was enough to make the reflection consistent between both eyes.
Shadow maps (from the point of view of a light source) should also be mono, but I don't think that is your problem here.
Could you guide me on how to start the game with 0x4000 flag and find out the RTVs that need be made "mono" for the [TextureOverride]?
Also, on how to find all the CS that require the UpdateSubresource() bug (How to identify what UAV I need to copy)?
I don't have a single answer for this (and both are really variations of the same process) - It needs some intuition and educated guesses and using all the tools available to us, but I can try to give you some pointers. Sometimes I wish we all lived nearby - this is the type of exercise that I think would work best if we could both see the same screen and work through it together - peer programming type of idea, but peer shader hacking ;-) Maybe we could do it over skype or something... if only we could get skype to share 3D Vision :)
In general though, this works much the same as any other detailed analysis - you want to first identify a shader related to the effect using either hunting or frame analysis dump_rt. This isn't necessarily a shader you will fix - for these type of issues we're trying to identify a resource, so this is just to get a starting point to work through analysing the effect to see what's wrong.
Once you have found a related shader you want to examine all the inputs and outputs to that shader - you want to check the resources in all the t (input only, any shader), u (input and/or output, compute and pixel shaders only) and o (output only, pixel shaders only) registers. Depending on the type of input your options include:
Texure2D: Use either frame analysis dump_tex_dds, or my debug_2d shader. You can grab this debug shader from my Life is Strange Before the Storm fix. These may occsionally be an array of six Texture2Ds for cube mapping - I don't have a debug shader for these, but I *think* I fixed a bug in 3DMigoto so that these could copy for oomek, and in theory you should still see the first face of the cube
Texture3D: Frame analysis won't work. Grab my volume debug shaders from WATCH_DOGS2 or Far Cry Primal.
Texture1D: Frame analysis won't work, and I don't have any debug shaders for these yet (they wouldn't be particularly intuitive to view these as textures anyway). So far I haven't found any of these that needed to be adjusted, so we can hopefully ignore them - but never entirely discount something.
To use the debug shaders, define a [ShaderOverride] section for the shader you are examining, and go through each input of the shader one at a time (Changing the shader type, register type and slot number to match the resource you are examining):
Texure2D Input: ResourceDebug2D = ps-t0
Texure2D Output: post ResourceDebug2D = o0
Texture3D Input: ResourceDebugVolume = ps-t1
Buffer / StructuredBuffer: Check if the shader seems to be treating it as floats or ints, then either:
ResourceDebugBuf = cs-t2
ResourceDebugBufUint = cs-u0
Do not use ResourceDebugCB for these - that is for constant buffers, and will not show stereo buffers (constant buffers cannot be stereo)
StructuredBuffers may sometimes contain mixed data types, so in some cases both of these debug buffers might be useful. Try one and see what it looks like - if it doesn't makes sense try the other. Remember that using the floating point debug buffer will often render other data types as just "0" and be misleading, while the integer debug buffer will at least show something.
Remember to specify "post" if you are examining an output, since you want to look at it after the shader has run (however, it can also be useful to check it before the shader has run to check it is that shader writing broken data to it, remembering that the resource may sometimes have stale data from the previous frame which may be misleading).
If the shader is used multiple times in the frame you may need to adjust "max_copies_per_frame" in the [ResourceDebugXX] section to get the first, second, third, last, etc. iteration of the shader. Generally speaking, you want to start with the first.
Sometimes you may need to specify "ref" or "copy" - this can go either way, and in some cases may impact on whether the debug shader will show the resource in stereo or not. Usually you don't need this, but I've come across a few situations where I did, and these were not always intuitive, so just keep it in mind.
All going well once you hit F10 you will be looking at the resource live instead of the game. For Texture2D resources this should be pretty intuitive, though you may need to adjust the inputs to the shader to multiply the value by some constant to bring it into a range you can see, and there's another input parameter that you can set if you need to flip it vertically. Sometimes you might tweak the debug shader in some way if you need to make it clearer (I notice this game has some uint Texture2Ds, which you would need to change the types in the shader and adjust the scaling to see). Texture3D resources are similar, but will display a bunch of 2D slices of the 3D texture on the screen - these debug shaders are for debugging a specific volumetric fog effect, and may need tweaking for other 3D textures. The buffer debug shaders will attempt to render the buffer as an array of floats or integers, depending on which debug resource you used. If you don't see anything, or all zeroes or all black, quickly double check you used the right type of debug buffer for the resource you were trying to examine before moving on (I've made that mistake a few times).
In all cases you want to compare the resource in both eyes and see if it *makes sense*. This is where you need to apply some intuition, because I can't tell you what it's supposed to look like - that answer is different every time. Texture2Ds are the easiest - in general if it's something from the point of view of the camera it should be stereo, but if it's from the point of view of a light source it should be mono. If it's from the point of view of a reflection probe it could go either way depending on whether the reflection can be made to work in stereo or not. An environment map or cube map reflection should usually be mono, a screen space reflection should be stereo (however doing so may break the reflection more until you fix the shader, so if making it mono gives you "good enough" results and you don't want to fix the shader that's fine). The rest are harder - what should a Texture3D look like in stereo? What should a buffer look like in stereo? Maybe they should be mono (or at least identical in both eyes - whether or not the buffer is technically mono or stereo doesn't always matter), or maybe they should be different in each eye - I can't tell you the answer to this, you need to use some intuition to work it out.
But, even if you aren't sure if it should be mono or stereo, it should at least should look *similar* between both eyes - if you see a buffer in the right eye that, e.g. has values fluctuating between 30000 and 40000, while in the left eye is showing -1042352345097325432 (this is pretty much what I saw in the tile lighting buffers), something is very clearly wrong in the left eye. Always remember the right eye is most likely to be correct since 3D Vision treats the right eye as the primary buffer, so if you aren't sure which side is showing what the buffer is supposed to look like - it's the right side.
If you check every input to the shader and they are all fine, but an output is broken (and was not broken before the shader was run) that points to the shader as being the culprit. Either fix the shader or if your intuition tells you to, force the outputs to mono/stereo with a [TextureOverride] section, restarting the game to ensure it takes effect.
Once you've identified a suspect resource you need to trace it to find out where it came from. For this you need to use the frame analysis log (you might be able to guess based on a frame analysis dump_rt dump_tex run, but the log takes out the guess work, and I highly recommend learning to use it effectively). Now, this is a problem for Mass Effect Andromeda because you have used hooking, and to work around a crash we don't hook the XXSetShaderResource call, so it won't show up in the frame analysis log, which is a problem because we *need* to see this call to find the resource in the log - without it you are back to guess work. We might need to get you up and running with the experimental branch, or wait for us to release 1.3 - this branch can get in MEA without using hooking, meaning you can get a good quality frame analysis log with this call. Also, avoid 1.2.68 & 1.2.69 when performing this type of analysis - the performance improvements in 1.2.68 broke the frame analysis log in some circumstances (will be fixed in both the upcoming 1.2.70 and 1.3 versions).
Once you have a frame analysis log the procedure to trace it is:
1. Search for the shader hash and note the draw call number at the start of the line, e.g. looking for one of the (later) tile lighting shaders:
2. Find an XXSetShaderResources call (where XX is the shader type) with a matching draw call number that binds a texture in that slot, or a CSSetUnorderedAccessViews call if it was a compute shader UAV, or a OMSetRenderTargetsAndUnorderedAccessViews call if it was a pixel shader UAV. If there is none, search backwards in the file to find the most recent one that did. e.g. tracing the StructuredBuffer in slot cs-t19:
3. Take note of the value next to resource= - That is the memory address of that resource, and will uniquely identify it in the log (the hash may not be unique).
4. Search backwards in the log file to find where else that resource was used - you are looking for the most recent time that it was written to. Skip over other XXSetShaderResource calls, and look for CSSetUnorderedAccessViews, OMSetRenderTarget[AndUnorderedAccessViews], Map, UpdateSubresource, CopyResource, CopySubresourceRegion
If you find a Copy or CopySubresourceRegion with this resource as the *destination*, continue your search using the copy source instead, but also keep in mind that this copy may act as a boundary between stereo and mono resources - if a stereo resource is copied into a mono resource it may lose the data from the left eye, or alternatively the driver heuristics may use this to decide it needs to change the destination to be stereo.
If you find a Map or UpdateSubresource it means it came from the CPU - stop searching, you've found your buffer - now you need to work out what to do with it.
If you find it used in a CSSetUnorderedAccessViews or OMSetRenderTargets[AndUnorderedAccessViews] it has been used as the output (or possibly input if it is a UAV) of another shader, e.g.
If there is none with a matching draw call number, search backwards to find the most recent one.
5. If you traced it to the output of another shader, repeat this *ENTIRE* procedure on the new shader - checking all inputs and outputs to that shader, tracing broken inputs, etc. You're looking to see if this shader is broken, or if it is merely processing another broken input. Repeat until you find the real source of the issue, stopping when you find no broken inputs, or a broken resource that came from the CPU, or something else that your intuition says is suspect e.g.
(cs-u2 is the only suspect in this shader)
002004 CSSetUnorderedAccessViews(StartSlot:2, NumUAVs:1, ppUnorderedAccessViews:0x0000000035275C40, pUAVInitialCounts:0x0000000000000000)
0: view=0x000000019AD85EB8 resource=0x000000028AF1CCA0 hash=25ea5018 orig_hash=00000000
^ Note bug to be fixed in next 3DMigoto release - should be 2 from StartSlot
...
In this case I traced the issue to a resource from the CPU - this is the UpdateSubresource() bug (and there were four of these going to different shaders, but once I knew what I was looking for it was easy to spot the others, since they were literally right next to this one in the log).
If you trace it to the output of a shader and there are no broken inputs you need to either fix that shader, or force that output to be mono/stereo with a [TextureOverride] and restart the game (in some cases reloading a level might be enough - you need the game to destroy and recreate the resource somehow, but restarting is always safer). Use your intuition here - I can't tell you the correct answer.
Once you have fixed the outputs to the shader you identified you may or may not be finished - it might just get broken again in the very next shader, but now you have traced it backwards it should be simple to trace it forwards as needed fixing shaders or outputs until the effect works.
As an example of a resource I needed to force to mono in WATCH_DOGS2 - I found a reflection texture that had both mono and stereo elements in the same texture - If I recall correctly it had a simple mono environment map reflection, but also contained reflections of light sources that were renderd in stereo. I might (probably not) have been able to make it work if everything was stereo, but definitely not with this mix of stereo and mono, so forcing it to mono was enough to make the reflection consistent between both eyes.
Shadow maps (from the point of view of a light source) should also be mono, but I don't think that is your problem here.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
[quote="DarkStarSword"][quote] Maybe we could do it over skype or something... [/quote]
May I suggest (in case you both have a VR headset) the BigscreenVR app: [url]http://bigscreenvr.com/[/url]
[color="green"][i]"Use cases of Bigscreen include both entertainment and productivity. It's used as a virtual living room to watch movies, play videogames, browse the web, and hangout with friends. It's also used for productivity as a tool for remote teams to collaborate together in virtual offices."[/i][/color]
It's free on Oculus and Steam.
Respect.
May I suggest (in case you both have a VR headset) the BigscreenVR app: http://bigscreenvr.com/
"Use cases of Bigscreen include both entertainment and productivity. It's used as a virtual living room to watch movies, play videogames, browse the web, and hangout with friends. It's also used for productivity as a tool for remote teams to collaborate together in virtual offices."
It's free on Oculus and Steam.
Respect.
Overclocked Intel® Core™i5-4690k Quad Core
32 Gb RAM
8GB GEFORCE GTX 1080
3D Vision 2
Windows 10 64 Bit
NVidia driver 419.17
SAMSUNG - UE55H8000 Smart 3D 55" Curved
Philips G-Sync 272G
Oculus Rift with Touch controlers
[quote="costiq"]May I suggest (in case you both have a VR headset) the BigscreenVR app: [url]http://bigscreenvr.com/[/url][/quote]lol, we'd need to see the keyboard, which discounts any VR except maybe the Microsoft one.
[quote="DarkStarSword"]Now, this is a problem for Mass Effect Andromeda because you have used hooking, and to work around a crash we don't hook the XXSetShaderResource call, so it won't show up in the frame analysis log, which is a problem because we *need* to see this call to find the resource in the log - without it you are back to guess work. We might need to get you up and running with the experimental branch, or wait for us to release 1.3 - this branch can get in MEA without using hooking, meaning you can get a good quality frame analysis log with this call. Also, avoid 1.2.68 & 1.2.69 when performing this type of analysis - the performance improvements in 1.2.68 broke the frame analysis log in some circumstances (will be fixed in both the upcoming 1.2.70 and 1.3 versions).[/quote]
I've gone back and taken another look at this, and it turns out you don't need to use hooking for this game, so turn it off (remove "recommended") then you can use 1.2.67 (or 1.2.70 when released) for this analysis just fine.
The only thing you are using from the hooking options is the skip_dxgi_device hack, so you can keep that on, but it was never intended to be used outside of MGSV and will be removed in 1.3 now that Bo3b has resolved the underlying issues.
DarkStarSword said:Now, this is a problem for Mass Effect Andromeda because you have used hooking, and to work around a crash we don't hook the XXSetShaderResource call, so it won't show up in the frame analysis log, which is a problem because we *need* to see this call to find the resource in the log - without it you are back to guess work. We might need to get you up and running with the experimental branch, or wait for us to release 1.3 - this branch can get in MEA without using hooking, meaning you can get a good quality frame analysis log with this call. Also, avoid 1.2.68 & 1.2.69 when performing this type of analysis - the performance improvements in 1.2.68 broke the frame analysis log in some circumstances (will be fixed in both the upcoming 1.2.70 and 1.3 versions).
I've gone back and taken another look at this, and it turns out you don't need to use hooking for this game, so turn it off (remove "recommended") then you can use 1.2.67 (or 1.2.70 when released) for this analysis just fine.
The only thing you are using from the hooking options is the skip_dxgi_device hack, so you can keep that on, but it was never intended to be used outside of MGSV and will be removed in 1.3 now that Bo3b has resolved the underlying issues.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
I know what you mean DSS. Typing with only two virtual fingers isn't very productive... ;)
I suppose speech to text wouldn't work either with the kind of specialised language you are using...
But, there's maybe still hope?
See [url]https://blog.vive.com/us/2017/11/02/introducing-the-logitech-bridge-sdk/[/url]
I know what you mean DSS. Typing with only two virtual fingers isn't very productive... ;)
I suppose speech to text wouldn't work either with the kind of specialised language you are using...
[quote="DarkStarSword"][quote="costiq"]May I suggest (in case you both have a VR headset) the BigscreenVR app: [url]http://bigscreenvr.com/[/url][/quote]lol, we'd need to see the keyboard, which discounts any VR except maybe the Microsoft one.[/quote]
[quote="costiq"]I know what you mean DSS. Typing with only two virtual fingers isn't very productive... ;)
I suppose speech to text wouldn't work either with the kind of specialised language you are using...[/quote]
Sometimes I need to remind myself not to believe that everything Hollywood movies depict is real... In this particular case, programmers/hackers speed typing without even watching the keyboard... ;p
[img]https://skarredghost.files.wordpress.com/2017/02/viveui.jpg[/img]
costiq said:May I suggest (in case you both have a VR headset) the BigscreenVR app: http://bigscreenvr.com/
lol, we'd need to see the keyboard, which discounts any VR except maybe the Microsoft one.
costiq said:I know what you mean DSS. Typing with only two virtual fingers isn't very productive... ;)
I suppose speech to text wouldn't work either with the kind of specialised language you are using...
Sometimes I need to remind myself not to believe that everything Hollywood movies depict is real... In this particular case, programmers/hackers speed typing without even watching the keyboard... ;p
Overclocked Intel® Core™i5-4690k Quad Core
32 Gb RAM
8GB GEFORCE GTX 1080
3D Vision 2
Windows 10 64 Bit
NVidia driver 419.17
SAMSUNG - UE55H8000 Smart 3D 55" Curved
Philips G-Sync 272G
Oculus Rift with Touch controlers
Many thanks DSS for the explanation;)
I had a feeling it will take a big chunk of time and work if we go that path;)
I will definitely give it a go and a try in the weekend, as I need some lengthy time to go through it;)
A Skype call will definitely be an option;) I know the time difference is around 10 hours or so. But, I guess we can find up some time to sync if you are up for it;)
I will probably release my current fix for the time being. I don't know how many shaders/resources need tempering and if we have the time and manage to fix all of them, we can easily update the fix later;)
Many thanks DSS for the explanation;)
I had a feeling it will take a big chunk of time and work if we go that path;)
I will definitely give it a go and a try in the weekend, as I need some lengthy time to go through it;)
A Skype call will definitely be an option;) I know the time difference is around 10 hours or so. But, I guess we can find up some time to sync if you are up for it;)
I will probably release my current fix for the time being. I don't know how many shaders/resources need tempering and if we have the time and manage to fix all of them, we can easily update the fix later;)
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
[quote="Helifax"]
Edit:
Actually fuck it. I am not going to release anything.
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
[/quote]
Are you fu**ing kidding me! Who even has access to do that? This was a fix that I was sooooo looking forward to.... So everyone is going to be punished for someone being f'in stupid.. @Helifax is there any chance you would reconsider? How could the rest of us prevented this?
Edit:
Actually fuck it. I am not going to release anything.
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
Are you fu**ing kidding me! Who even has access to do that? This was a fix that I was sooooo looking forward to.... So everyone is going to be punished for someone being f'in stupid.. @Helifax is there any chance you would reconsider? How could the rest of us prevented this?
Intel 7700k @ 4.2Ghz / 32GB @ 3200
Asus Z270 / 2 x Evga 1070
4 x Samsung 840 Raid 0
4 x Samsung 850 Pro Raid 0
Samsung 950 Pro
Epson 5040UB 3DTVPlay
[quote="mgriggs22"][quote="Helifax"]
Edit:
Actually fuck it. I am not going to release anything.
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
[/quote]
Are you fu**ing kidding me! Who even has access to do that? This was a fix that I was sooooo looking forward to.... So everyone is going to be punished for someone being f'in stupid.. @Helifax is there any chance you would reconsider? How could the rest of us prevented this?[/quote]
See!!! Exactly my reaction! EXACTLY MY REACTION! ("Are you freaking kidding me!?")
Anyway, too much stress, long day, I might (probably/surely) overreacted but yeah...
I'll release what I have shortly. Then anyone can start hacking more into it if they want to.
I'll just wrap things together and put it out today.
Edit:
Actually fuck it. I am not going to release anything.
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
Are you fu**ing kidding me! Who even has access to do that? This was a fix that I was sooooo looking forward to.... So everyone is going to be punished for someone being f'in stupid.. @Helifax is there any chance you would reconsider? How could the rest of us prevented this?
See!!! Exactly my reaction! EXACTLY MY REACTION! ("Are you freaking kidding me!?")
Anyway, too much stress, long day, I might (probably/surely) overreacted but yeah...
I'll release what I have shortly. Then anyone can start hacking more into it if they want to.
I'll just wrap things together and put it out today.
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
[quote="Helifax"]
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
[/quote]
wtf? Was this the WIP you shared for me to grab that someone else managed to find (and not just a search engine bot right)? I hadn't even downloaded it yet - was focussed on resolving the frame analysis issues in 3DMigoto today.
Helifax said:
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
wtf? Was this the WIP you shared for me to grab that someone else managed to find (and not just a search engine bot right)? I hadn't even downloaded it yet - was focussed on resolving the frame analysis issues in 3DMigoto today.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
[quote="DarkStarSword"][quote="Helifax"]
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
[/quote]
wtf? Was this the WIP you shared for me to grab that someone else managed to find (and not just a search engine bot right)? I hadn't even downloaded it yet - was focussed on resolving the frame analysis issues in 3DMigoto today.[/quote]
Yupp! Somebody likes to poke in other people's private stuff it seems ^_^. I will probably just e-mail it as it seems that is more secure! ;) (Lesson learnt ^_^)
Helifax said:
Everyone please thank the guy(s) who decided to snoop in my private files and steal a WIP from me! :) Their efforts are well appreciated and will now affect everyone:)
wtf? Was this the WIP you shared for me to grab that someone else managed to find (and not just a search engine bot right)? I hadn't even downloaded it yet - was focussed on resolving the frame analysis issues in 3DMigoto today.
Yupp! Somebody likes to poke in other people's private stuff it seems ^_^. I will probably just e-mail it as it seems that is more secure! ;) (Lesson learnt ^_^)
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
@Everyone:
Compare this:
[url=http://www.iforce.co.nz/View.aspx?i=fuubepve.cgq.jpg][img]http://iforce.co.nz/i/fuubepve.cgq.jpg[/img][/url]
[url=http://www.iforce.co.nz/View.aspx?i=c3wgufbi.upe.jpg][img]http://iforce.co.nz/i/c3wgufbi.upe.jpg[/img][/url]
VS this:
[url=http://www.iforce.co.nz/View.aspx?i=avafeql2.5uf.jpg][img]http://iforce.co.nz/i/avafeql2.5uf.jpg[/img][/url]
[url=http://www.iforce.co.nz/View.aspx?i=vhth1u3a.dlm.jpg][img]http://iforce.co.nz/i/vhth1u3a.dlm.jpg[/img][/url]
Which ones do you think are the right ones?:)
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
I just checked and realise we only have [TextureOverride] StereoMode implemented for Texture2Ds - I'll hook it up to Buffers, Texture1Ds and Texture3Ds and add some form of fuzzy matching (not positive yet if I'll extend [TextureOverride] or make a new section) for 1.2.70
(We do have this hooked up for custom [Resource] sections, which is what the test case I posted earlier used)
I just checked and realise we only have [TextureOverride] StereoMode implemented for Texture2Ds - I'll hook it up to Buffers, Texture1Ds and Texture3Ds and add some form of fuzzy matching (not positive yet if I'll extend [TextureOverride] or make a new section) for 1.2.70
(We do have this hooked up for custom [Resource] sections, which is what the test case I posted earlier used)
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
[quote]I will definitely give it a go and a try in the weekend, as I need some lengthy time to go through it;)
A Skype call will definitely be an option;) I know the time difference is around 10 hours or so. But, I guess we can find up some time to sync if you are up for it;)[/quote]
TeamViewer is a much better solution for this sort of thing. Screen sharing, including voice. I've used this to remotely poke around on 3D projects, but can't recall if I used anaglyph or just looked at SBS.
For VR folks- this is a nonstarter. VR is ridiculously low resolution and is not going to be a productivity tool for at least 5 years. You cannot do coding where you need to read walls of text.
[i]Never [/i]believe the marketing swine.
[quote]Yupp! Somebody likes to poke in other people's private stuff it seems ^_^. I will probably just e-mail it as it seems that is more secure! ;) (Lesson learnt ^_^)[/quote]
For this sort of stuff, if you want it to be private, use BitBucket. Full Git and SVN if you prefer, unlimited private repos. High security setup.
It's super, super important to use version control.
I will definitely give it a go and a try in the weekend, as I need some lengthy time to go through it;)
A Skype call will definitely be an option;) I know the time difference is around 10 hours or so. But, I guess we can find up some time to sync if you are up for it;)
TeamViewer is a much better solution for this sort of thing. Screen sharing, including voice. I've used this to remotely poke around on 3D projects, but can't recall if I used anaglyph or just looked at SBS.
For VR folks- this is a nonstarter. VR is ridiculously low resolution and is not going to be a productivity tool for at least 5 years. You cannot do coding where you need to read walls of text.
Never believe the marketing swine.
Yupp! Somebody likes to poke in other people's private stuff it seems ^_^. I will probably just e-mail it as it seems that is more secure! ;) (Lesson learnt ^_^)
For this sort of stuff, if you want it to be private, use BitBucket. Full Git and SVN if you prefer, unlimited private repos. High security setup.
It's super, super important to use version control.
Acer H5360 (1280x720@120Hz) - ASUS VG248QE with GSync mod - 3D Vision 1&2 - Driver 372.54
GTX 970 - i5-4670K@4.2GHz - 12GB RAM - Win7x64+evilKB2670838 - 4 Disk X25 RAID
SAGER NP9870-S - GTX 980 - i7-6700K - Win10 Pro 1607 Latest 3Dmigoto Release Bo3b's School for ShaderHackers
@DarkStarSword:
Could you guide me on how to start the game with 0x4000 flag and find out the RTVs that need be made "mono" for the [TextureOverride]?
Also, on how to find all the CS that require the UpdateSubresource() bug (How to identify what UAV I need to copy)?
I want to give this one a try in the weekend and see how far I can get with it;)
Many Thanks:)
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)
I don't have a single answer for this (and both are really variations of the same process) - It needs some intuition and educated guesses and using all the tools available to us, but I can try to give you some pointers. Sometimes I wish we all lived nearby - this is the type of exercise that I think would work best if we could both see the same screen and work through it together - peer programming type of idea, but peer shader hacking ;-) Maybe we could do it over skype or something... if only we could get skype to share 3D Vision :)
In general though, this works much the same as any other detailed analysis - you want to first identify a shader related to the effect using either hunting or frame analysis dump_rt. This isn't necessarily a shader you will fix - for these type of issues we're trying to identify a resource, so this is just to get a starting point to work through analysing the effect to see what's wrong.
Once you have found a related shader you want to examine all the inputs and outputs to that shader - you want to check the resources in all the t (input only, any shader), u (input and/or output, compute and pixel shaders only) and o (output only, pixel shaders only) registers. Depending on the type of input your options include:
To use the debug shaders, define a [ShaderOverride] section for the shader you are examining, and go through each input of the shader one at a time (Changing the shader type, register type and slot number to match the resource you are examining):
ResourceDebugBuf = cs-t2
ResourceDebugBufUint = cs-u0
Do not use ResourceDebugCB for these - that is for constant buffers, and will not show stereo buffers (constant buffers cannot be stereo)
StructuredBuffers may sometimes contain mixed data types, so in some cases both of these debug buffers might be useful. Try one and see what it looks like - if it doesn't makes sense try the other. Remember that using the floating point debug buffer will often render other data types as just "0" and be misleading, while the integer debug buffer will at least show something.
Remember to specify "post" if you are examining an output, since you want to look at it after the shader has run (however, it can also be useful to check it before the shader has run to check it is that shader writing broken data to it, remembering that the resource may sometimes have stale data from the previous frame which may be misleading).
If the shader is used multiple times in the frame you may need to adjust "max_copies_per_frame" in the [ResourceDebugXX] section to get the first, second, third, last, etc. iteration of the shader. Generally speaking, you want to start with the first.
Sometimes you may need to specify "ref" or "copy" - this can go either way, and in some cases may impact on whether the debug shader will show the resource in stereo or not. Usually you don't need this, but I've come across a few situations where I did, and these were not always intuitive, so just keep it in mind.
All going well once you hit F10 you will be looking at the resource live instead of the game. For Texture2D resources this should be pretty intuitive, though you may need to adjust the inputs to the shader to multiply the value by some constant to bring it into a range you can see, and there's another input parameter that you can set if you need to flip it vertically. Sometimes you might tweak the debug shader in some way if you need to make it clearer (I notice this game has some uint Texture2Ds, which you would need to change the types in the shader and adjust the scaling to see). Texture3D resources are similar, but will display a bunch of 2D slices of the 3D texture on the screen - these debug shaders are for debugging a specific volumetric fog effect, and may need tweaking for other 3D textures. The buffer debug shaders will attempt to render the buffer as an array of floats or integers, depending on which debug resource you used. If you don't see anything, or all zeroes or all black, quickly double check you used the right type of debug buffer for the resource you were trying to examine before moving on (I've made that mistake a few times).
In all cases you want to compare the resource in both eyes and see if it *makes sense*. This is where you need to apply some intuition, because I can't tell you what it's supposed to look like - that answer is different every time. Texture2Ds are the easiest - in general if it's something from the point of view of the camera it should be stereo, but if it's from the point of view of a light source it should be mono. If it's from the point of view of a reflection probe it could go either way depending on whether the reflection can be made to work in stereo or not. An environment map or cube map reflection should usually be mono, a screen space reflection should be stereo (however doing so may break the reflection more until you fix the shader, so if making it mono gives you "good enough" results and you don't want to fix the shader that's fine). The rest are harder - what should a Texture3D look like in stereo? What should a buffer look like in stereo? Maybe they should be mono (or at least identical in both eyes - whether or not the buffer is technically mono or stereo doesn't always matter), or maybe they should be different in each eye - I can't tell you the answer to this, you need to use some intuition to work it out.
But, even if you aren't sure if it should be mono or stereo, it should at least should look *similar* between both eyes - if you see a buffer in the right eye that, e.g. has values fluctuating between 30000 and 40000, while in the left eye is showing -1042352345097325432 (this is pretty much what I saw in the tile lighting buffers), something is very clearly wrong in the left eye. Always remember the right eye is most likely to be correct since 3D Vision treats the right eye as the primary buffer, so if you aren't sure which side is showing what the buffer is supposed to look like - it's the right side.
If you check every input to the shader and they are all fine, but an output is broken (and was not broken before the shader was run) that points to the shader as being the culprit. Either fix the shader or if your intuition tells you to, force the outputs to mono/stereo with a [TextureOverride] section, restarting the game to ensure it takes effect.
Once you've identified a suspect resource you need to trace it to find out where it came from. For this you need to use the frame analysis log (you might be able to guess based on a frame analysis dump_rt dump_tex run, but the log takes out the guess work, and I highly recommend learning to use it effectively). Now, this is a problem for Mass Effect Andromeda because you have used hooking, and to work around a crash we don't hook the XXSetShaderResource call, so it won't show up in the frame analysis log, which is a problem because we *need* to see this call to find the resource in the log - without it you are back to guess work. We might need to get you up and running with the experimental branch, or wait for us to release 1.3 - this branch can get in MEA without using hooking, meaning you can get a good quality frame analysis log with this call. Also, avoid 1.2.68 & 1.2.69 when performing this type of analysis - the performance improvements in 1.2.68 broke the frame analysis log in some circumstances (will be fixed in both the upcoming 1.2.70 and 1.3 versions).
Once you have a frame analysis log the procedure to trace it is:
1. Search for the shader hash and note the draw call number at the start of the line, e.g. looking for one of the (later) tile lighting shaders:
2. Find an XXSetShaderResources call (where XX is the shader type) with a matching draw call number that binds a texture in that slot, or a CSSetUnorderedAccessViews call if it was a compute shader UAV, or a OMSetRenderTargetsAndUnorderedAccessViews call if it was a pixel shader UAV. If there is none, search backwards in the file to find the most recent one that did. e.g. tracing the StructuredBuffer in slot cs-t19:
3. Take note of the value next to resource= - That is the memory address of that resource, and will uniquely identify it in the log (the hash may not be unique).
4. Search backwards in the log file to find where else that resource was used - you are looking for the most recent time that it was written to. Skip over other XXSetShaderResource calls, and look for CSSetUnorderedAccessViews, OMSetRenderTarget[AndUnorderedAccessViews], Map, UpdateSubresource, CopyResource, CopySubresourceRegion
In this case, you now need to find what shaders are used in this draw call number, e.g.
If there is none with a matching draw call number, search backwards to find the most recent one.
5. If you traced it to the output of another shader, repeat this *ENTIRE* procedure on the new shader - checking all inputs and outputs to that shader, tracing broken inputs, etc. You're looking to see if this shader is broken, or if it is merely processing another broken input. Repeat until you find the real source of the issue, stopping when you find no broken inputs, or a broken resource that came from the CPU, or something else that your intuition says is suspect e.g.
In this case I traced the issue to a resource from the CPU - this is the UpdateSubresource() bug (and there were four of these going to different shaders, but once I knew what I was looking for it was easy to spot the others, since they were literally right next to this one in the log).
If you trace it to the output of a shader and there are no broken inputs you need to either fix that shader, or force that output to be mono/stereo with a [TextureOverride] and restart the game (in some cases reloading a level might be enough - you need the game to destroy and recreate the resource somehow, but restarting is always safer). Use your intuition here - I can't tell you the correct answer.
Once you have fixed the outputs to the shader you identified you may or may not be finished - it might just get broken again in the very next shader, but now you have traced it backwards it should be simple to trace it forwards as needed fixing shaders or outputs until the effect works.
As an example of a resource I needed to force to mono in WATCH_DOGS2 - I found a reflection texture that had both mono and stereo elements in the same texture - If I recall correctly it had a simple mono environment map reflection, but also contained reflections of light sources that were renderd in stereo. I might (probably not) have been able to make it work if everything was stereo, but definitely not with this mix of stereo and mono, so forcing it to mono was enough to make the reflection consistent between both eyes.
Shadow maps (from the point of view of a light source) should also be mono, but I don't think that is your problem here.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD
Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword
Overclocked Intel® Core™i5-4690k Quad Core
32 Gb RAM
8GB GEFORCE GTX 1080
3D Vision 2
Windows 10 64 Bit
NVidia driver 419.17
SAMSUNG - UE55H8000 Smart 3D 55" Curved
Philips G-Sync 272G
Oculus Rift with Touch controlers
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD
Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword
I've gone back and taken another look at this, and it turns out you don't need to use hooking for this game, so turn it off (remove "recommended") then you can use 1.2.67 (or 1.2.70 when released) for this analysis just fine.
The only thing you are using from the hooking options is the skip_dxgi_device hack, so you can keep that on, but it was never intended to be used outside of MGSV and will be removed in 1.3 now that Bo3b has resolved the underlying issues.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD
Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword
I suppose speech to text wouldn't work either with the kind of specialised language you are using...
But, there's maybe still hope?
See https://blog.vive.com/us/2017/11/02/introducing-the-logitech-bridge-sdk/
Overclocked Intel® Core™i5-4690k Quad Core
32 Gb RAM
8GB GEFORCE GTX 1080
3D Vision 2
Windows 10 64 Bit
NVidia driver 419.17
SAMSUNG - UE55H8000 Smart 3D 55" Curved
Philips G-Sync 272G
Oculus Rift with Touch controlers
Sometimes I need to remind myself not to believe that everything Hollywood movies depict is real... In this particular case, programmers/hackers speed typing without even watching the keyboard... ;p
Overclocked Intel® Core™i5-4690k Quad Core
32 Gb RAM
8GB GEFORCE GTX 1080
3D Vision 2
Windows 10 64 Bit
NVidia driver 419.17
SAMSUNG - UE55H8000 Smart 3D 55" Curved
Philips G-Sync 272G
Oculus Rift with Touch controlers
I had a feeling it will take a big chunk of time and work if we go that path;)
I will definitely give it a go and a try in the weekend, as I need some lengthy time to go through it;)
A Skype call will definitely be an option;) I know the time difference is around 10 hours or so. But, I guess we can find up some time to sync if you are up for it;)
I will probably release my current fix for the time being. I don't know how many shaders/resources need tempering and if we have the time and manage to fix all of them, we can easily update the fix later;)
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)
Are you fu**ing kidding me! Who even has access to do that? This was a fix that I was sooooo looking forward to.... So everyone is going to be punished for someone being f'in stupid.. @Helifax is there any chance you would reconsider? How could the rest of us prevented this?
Intel 7700k @ 4.2Ghz / 32GB @ 3200
Asus Z270 / 2 x Evga 1070
4 x Samsung 840 Raid 0
4 x Samsung 850 Pro Raid 0
Samsung 950 Pro
Epson 5040UB 3DTVPlay
See!!! Exactly my reaction! EXACTLY MY REACTION! ("Are you freaking kidding me!?")
Anyway, too much stress, long day, I might (probably/surely) overreacted but yeah...
I'll release what I have shortly. Then anyone can start hacking more into it if they want to.
I'll just wrap things together and put it out today.
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)
wtf? Was this the WIP you shared for me to grab that someone else managed to find (and not just a search engine bot right)? I hadn't even downloaded it yet - was focussed on resolving the frame analysis issues in 3DMigoto today.
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD
Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword
Yupp! Somebody likes to poke in other people's private stuff it seems ^_^. I will probably just e-mail it as it seems that is more secure! ;) (Lesson learnt ^_^)
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)
Compare this:
VS this:
Which ones do you think are the right ones?:)
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)
(We do have this hooked up for custom [Resource] sections, which is what the test case I posted earlier used)
2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit
Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD
Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword
TeamViewer is a much better solution for this sort of thing. Screen sharing, including voice. I've used this to remotely poke around on 3D projects, but can't recall if I used anaglyph or just looked at SBS.
For VR folks- this is a nonstarter. VR is ridiculously low resolution and is not going to be a productivity tool for at least 5 years. You cannot do coding where you need to read walls of text.
Never believe the marketing swine.
For this sort of stuff, if you want it to be private, use BitBucket. Full Git and SVN if you prefer, unlimited private repos. High security setup.
It's super, super important to use version control.
Acer H5360 (1280x720@120Hz) - ASUS VG248QE with GSync mod - 3D Vision 1&2 - Driver 372.54
GTX 970 - i5-4670K@4.2GHz - 12GB RAM - Win7x64+evilKB2670838 - 4 Disk X25 RAID
SAGER NP9870-S - GTX 980 - i7-6700K - Win10 Pro 1607
Latest 3Dmigoto Release
Bo3b's School for ShaderHackers