Depends on what you are using it for - anything it affects at resource creation time (StereoMode, format, width, height, width_multiply, height_multiply) cannot be*, but any command list commands can nowadays be enclosed in "if" conditionals. e.g. this is from DOAXVV - here I place the condition around the checktextureoverride to get the most performance benefit from disabling the option (looking up textureoverrides is expensive, particularly when done many times per frame), but this could also go inside a [TextureOverride]:
[code]
[KeyToggleMods]
Key = no_modifiers F2
z = 0
type = toggle
[ShaderOverrideClothesPS1]
hash = e0f2dc26aae66de3
...
if z
; Enable costume texture replacement by texture hash:
checktextureoverride = ps-t0
...
endif
[/code]
* If you do find yourself in a situation where you need to affect a creation time parameter (e.g. force one texture to stereo and another to mono) and have no way to distinguish between them there is another option - create your own resource forced to stereo or mono and swap the game's resource for it from [ShaderOverride] sections both where they are written and read. e.g. simplified excerpt from Dreamfall Chapers:
[code]
[Resource_m_InterpolationEpi]
; Confirmed - must be forced stereo, but doing so causes 1 pixel rectangle
; holes every centimeter from the light position unless we manually clear the
; replacement render target
mode = stereo
[CommandList_Volumetric_Light_Shafts_DepthBreaks]
; Replace game's render target output with a stereo version:
Resource_m_InterpolationEpi = stereo copy_desc o0
o0 = Resource_m_InterpolationEpi
; Game cleared their resource, so we need to clear our replacement:
clear = Resource_m_InterpolationEpi 0 0 0 1
[CommandList_Volumetric_Light_Shafts_InterpolateAlongRays]
; Replace input textures with previously stereoised versions:
ps-t0 = Resource_m_InterpolationEpi
[/code]
Depends on what you are using it for - anything it affects at resource creation time (StereoMode, format, width, height, width_multiply, height_multiply) cannot be*, but any command list commands can nowadays be enclosed in "if" conditionals. e.g. this is from DOAXVV - here I place the condition around the checktextureoverride to get the most performance benefit from disabling the option (looking up textureoverrides is expensive, particularly when done many times per frame), but this could also go inside a [TextureOverride]:
[KeyToggleMods]
Key = no_modifiers F2
z = 0
type = toggle
[ShaderOverrideClothesPS1]
hash = e0f2dc26aae66de3
...
if z
; Enable costume texture replacement by texture hash:
checktextureoverride = ps-t0
...
endif
* If you do find yourself in a situation where you need to affect a creation time parameter (e.g. force one texture to stereo and another to mono) and have no way to distinguish between them there is another option - create your own resource forced to stereo or mono and swap the game's resource for it from [ShaderOverride] sections both where they are written and read. e.g. simplified excerpt from Dreamfall Chapers:
[Resource_m_InterpolationEpi]
; Confirmed - must be forced stereo, but doing so causes 1 pixel rectangle
; holes every centimeter from the light position unless we manually clear the
; replacement render target
mode = stereo
[CommandList_Volumetric_Light_Shafts_DepthBreaks]
; Replace game's render target output with a stereo version:
Resource_m_InterpolationEpi = stereo copy_desc o0
o0 = Resource_m_InterpolationEpi
; Game cleared their resource, so we need to clear our replacement:
clear = Resource_m_InterpolationEpi 0 0 0 1
I'm currently experimenting with using Trello to manage my TODO list a little, and I created a board for 3DMigoto. I've made it public so that people can get a bit of visibility into what I (and maybe Bo3b and other developers if they want to use this too) are up to:
https://trello.com/b/qmDW53T5/3dmigoto
I'm currently experimenting with using Trello to manage my TODO list a little, and I created a board for 3DMigoto. I've made it public so that people can get a bit of visibility into what I (and maybe Bo3b and other developers if they want to use this too) are up to:
Yeah there are if clauses working with migoto in the ini?? THATS exactely what i was searching for ^^ I was work arround this with an autohotkey script copying 2 different ini files on a key press but this is not verry elegant. THANK YOU IAN, wasnt knowing that if is working in the ini !!
//hm is this also working for texture overrides ???
Not working here ;:-(
[Key_PERFORMANCE_KB]
Key = F3
type = cycle
w = 0, 1
.
.
.
[TextureOverride_culling1]
Hash = 3d7dd24e
if w
expand_region_copy=1
deny_cpu_read=1
endif
Yeah there are if clauses working with migoto in the ini?? THATS exactely what i was searching for ^^ I was work arround this with an autohotkey script copying 2 different ini files on a key press but this is not verry elegant. THANK YOU IAN, wasnt knowing that if is working in the ini !!
//hm is this also working for texture overrides ???
Not working here ;:-(
[Key_PERFORMANCE_KB]
Key = F3
type = cycle
w = 0, 1
.
.
.
[TextureOverride_culling1]
Hash = 3d7dd24e
if w
expand_region_copy=1
deny_cpu_read=1
endif
Like my work? Donations can be made via PayPal to: rauti@inetmx.de
Ahh, I forgot about those two hacks - neither of those are part of the command list (adds TODO item to trello: create command list reference documentation) so are not affected by the "if" flow control that is part of it. They are kind of awkward to convert into something that would work with that - can you give me some more details of the problem you are trying to solve (and which engine - is this a CryEngine game*?) so I can mull over the best way to address it?
* I'm pretty convinced there should be a better way to solve the disappearing geometry in CryEngine than using deny_cpu_read that would be much better for performance. At the time I added that hack I didn't have enough visibility or control to fix it in another way, but I have since fixed similar issues in other engines and am fairly confident I could do better now. The expand_region_copy I'd need to think about - there may not be a whole lot we can do better on that one.
Ahh, I forgot about those two hacks - neither of those are part of the command list (adds TODO item to trello: create command list reference documentation) so are not affected by the "if" flow control that is part of it. They are kind of awkward to convert into something that would work with that - can you give me some more details of the problem you are trying to solve (and which engine - is this a CryEngine game*?) so I can mull over the best way to address it?
* I'm pretty convinced there should be a better way to solve the disappearing geometry in CryEngine than using deny_cpu_read that would be much better for performance. At the time I added that hack I didn't have enough visibility or control to fix it in another way, but I have since fixed similar issues in other engines and am fairly confident I could do better now. The expand_region_copy I'd need to think about - there may not be a whole lot we can do better on that one.
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"]Ahh, I forgot about those two hacks - neither of those are part of the command list (adds TODO item to trello: create command list reference documentation) so are not affected by the "if" flow control that is part of it. They are kind of awkward to convert into something that would work with that - can you give me some more details of the problem you are trying to solve (and which engine - is this a CryEngine game*?) so I can mull over the best way to address it?
* I'm pretty convinced there should be a better way to solve the disappearing geometry in CryEngine than using deny_cpu_read that would be much better for performance. At the time I added that hack I didn't have enough visibility or control to fix it in another way, but I have since fixed similar issues in other engines and am fairly confident I could do better now. The expand_region_copy I'd need to think about - there may not be a whole lot we can do better on that one.[/quote]
Ok there is one texture hash marked as MapType:1 that will cause flickering in KDC (KingdomeComesDeliverance ... you remeber ^^) I have to set deny_cpu_read = 1 to get rid of the flickering but this will costs arround 10 FPS !!!! Id like to give the user the option to set deny_cpu_read=1 (flicker but -10 FPS) or deny_cpu_read=0 (no flicker but +10 fps) ... may usefull in some hard FPS drop situations...
If you have an idea how to get rid of flickering but save the FPS like deny_cpu_read=0 ... ill love you more than i allready do ^^
DarkStarSword said:Ahh, I forgot about those two hacks - neither of those are part of the command list (adds TODO item to trello: create command list reference documentation) so are not affected by the "if" flow control that is part of it. They are kind of awkward to convert into something that would work with that - can you give me some more details of the problem you are trying to solve (and which engine - is this a CryEngine game*?) so I can mull over the best way to address it?
* I'm pretty convinced there should be a better way to solve the disappearing geometry in CryEngine than using deny_cpu_read that would be much better for performance. At the time I added that hack I didn't have enough visibility or control to fix it in another way, but I have since fixed similar issues in other engines and am fairly confident I could do better now. The expand_region_copy I'd need to think about - there may not be a whole lot we can do better on that one.
Ok there is one texture hash marked as MapType:1 that will cause flickering in KDC (KingdomeComesDeliverance ... you remeber ^^) I have to set deny_cpu_read = 1 to get rid of the flickering but this will costs arround 10 FPS !!!! Id like to give the user the option to set deny_cpu_read=1 (flicker but -10 FPS) or deny_cpu_read=0 (no flicker but +10 fps) ... may usefull in some hard FPS drop situations...
If you have an idea how to get rid of flickering but save the FPS like deny_cpu_read=0 ... ill love you more than i allready do ^^
Like my work? Donations can be made via PayPal to: rauti@inetmx.de
@Losti: This is an alternate to deny_cpu_read for CryEngine that performs better - this is from Lichdom, so it may be a different shader in KDC (or possibly other differences - let me know if you have trouble).
[olist]
[.]To find the shader take a frame analysis log, and search for "MapType:1" - there should only be one of those per frame.[/.]
[.]Then search through the file for whatever resource handle appears on that line after pResource - this should lead you to a CopySubResourceRegion.[/.]
[.]Then search through the file again for the resource handle that appears after "Src resource=" - this should lead you to an OMSetRenderTargets line.[/.]
[.]From there search >backwards< in the file to find the most recent "PSSetShader(" and take the hash that appears at the end of this line.[/.]
[/olist]
d3dx.ini:
[code]
[ShaderOverrideFlicker]
hash = 630978719b4885a7
; This shader downscales the depth buffer prior to sending it to the CPU for
; occlusion culling. The CPU will only get a mono copy, which results in
; incorrect occlusion culling and appears as flickering geometry in the
; distance that is just to the right of something in the foreground.
;
; One option to solve this is to kill the depth buffer copy back to the CPU,
; but that removes the performance benefit of occlusion culling, which can be
; quite significant. Another option that should retain the performance benefit
; of occlusion culling is to combine the depth buffers from both eyes into a
; single depth buffer that is the max(left, right) depths prior to sending it
; to the CPU.
;
; This shader is responsible for downscaling the depth buffer in several passes
; so that the copy back to the CPU doesn't kill performance. We need to
; interject in this process at some point to combine the depth buffers, but it
; (technically) doesn't matter exactly when we do it. However, since combining
; the eyes requires a stereo2mono it will add extra overhead on SLI, which
; could be enough to negate the performance benefit of occlusion culling or
; even make things worse. This performance impact depends on the size of the
; buffer we are copying, so ideally we would do this after the downscaling has
; been completed.
;
; We don't have a way to know how many passes there are (unless it's always the
; same independent of resolution, but I have not verified that), nor do we
; currently have any other command list we could trigger off, so for now we
; will interject once after the first downscale pass as a reasonable
; compromise.
;
; NOTE: To work in SLI this requires StereoFlagsDX10=0x.......8
if stereo_active
post run = CustomShaderCryEngineFlickerFix
endif
[CustomShaderCryEngineFlickerFix]
max_executions_per_frame = 1
ps = ShaderFixes\cryengine_flicker_fix.hlsl
ps-t0 = stereo2mono o0
draw = from_caller
[/code]
cryengine_flicker_fix.hlsl:
[code]
Texture2D<float4> _tex0 : register(t0);
void main(
float4 v0 : SV_Position0,
float2 v1 : TEXCOORD0,
out float4 o0 : SV_Target0)
{
float width, height;
_tex0.GetDimensions(width, height);
float4 right = _tex0.Load(int3(v0.xy, 0));
float4 left = _tex0.Load(int3(v0.x + width / 2, v0.y, 0));
o0 = max(left, right);
}
[/code]
@Losti: This is an alternate to deny_cpu_read for CryEngine that performs better - this is from Lichdom, so it may be a different shader in KDC (or possibly other differences - let me know if you have trouble).
To find the shader take a frame analysis log, and search for "MapType:1" - there should only be one of those per frame.
Then search through the file for whatever resource handle appears on that line after pResource - this should lead you to a CopySubResourceRegion.
Then search through the file again for the resource handle that appears after "Src resource=" - this should lead you to an OMSetRenderTargets line.
From there search >backwards< in the file to find the most recent "PSSetShader(" and take the hash that appears at the end of this line.
d3dx.ini:
[ShaderOverrideFlicker]
hash = 630978719b4885a7
; This shader downscales the depth buffer prior to sending it to the CPU for
; occlusion culling. The CPU will only get a mono copy, which results in
; incorrect occlusion culling and appears as flickering geometry in the
; distance that is just to the right of something in the foreground.
;
; One option to solve this is to kill the depth buffer copy back to the CPU,
; but that removes the performance benefit of occlusion culling, which can be
; quite significant. Another option that should retain the performance benefit
; of occlusion culling is to combine the depth buffers from both eyes into a
; single depth buffer that is the max(left, right) depths prior to sending it
; to the CPU.
;
; This shader is responsible for downscaling the depth buffer in several passes
; so that the copy back to the CPU doesn't kill performance. We need to
; interject in this process at some point to combine the depth buffers, but it
; (technically) doesn't matter exactly when we do it. However, since combining
; the eyes requires a stereo2mono it will add extra overhead on SLI, which
; could be enough to negate the performance benefit of occlusion culling or
; even make things worse. This performance impact depends on the size of the
; buffer we are copying, so ideally we would do this after the downscaling has
; been completed.
;
; We don't have a way to know how many passes there are (unless it's always the
; same independent of resolution, but I have not verified that), nor do we
; currently have any other command list we could trigger off, so for now we
; will interject once after the first downscale pass as a reasonable
; compromise.
;
; NOTE: To work in SLI this requires StereoFlagsDX10=0x.......8
if stereo_active
post run = CustomShaderCryEngineFlickerFix
endif
Ill Try this tomorrow Ian and report back...may be you will make me a verry happy people with your last post tomorrow ^^
You are knowledge is incredible!!!!!
I am currently under control ^^
[url]https://www.youtube.com/watch?v=d93P7uPrqHk[/url]
I need to get out of this.....
Since Years I'm trying to keep the 3D fix for Elder Scrolls Online alive (see [url]http://helixmod.blogspot.com/2014/05/the-elder-scrolls-online-3d-vision-fix.html[/url] and [url]https://forums.geforce.com/default/topic/627896/3d-vision/elder-scrolls-online-3d-vision-compatibility/35/[/url]). So far I have managed to transfer the code from the original fix to the new shaders which are regularly introduced with game updates (without understanding how the fix really works...). But now I got serious trouble as 3Dmigoto has a problem with hunting several PS which I need to change to reduce an issue with specular glow. I get an error beep sound and the code contains error messages like these:
[code]// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t3, 288
...
if (g_dissolveInverted != 0) {
// Known bad code for instruction (needs manual fix):
ld_structured_indexable(structured_buffer, stride=288)(mixed,mixed,mixed,mixed) r2.y, v10.x, l(272), t3.xxxx
r2.y = AnisoWrap[]..swiz;
} else {[/code]
The complete code of 2 broken shaders can be found here:
[url]https://www2.zippyshare.com/v/OtiV2NfK/file.html[/url]
[url]https://www2.zippyshare.com/v/NPCh9V79/file.html[/url]
I have used the original version of 3Dmigoto included in the fix. But I get the same error with the actual version of 3Dmigoto (1.3.11).
Do You happen to know a simple way to fix this issue? Otherwise I will finally give up to fix ESO as it is so annoying to discover every few months that my last fix update got broken by a new game patch again...
I have used the original version of 3Dmigoto included in the fix. But I get the same error with the actual version of 3Dmigoto (1.3.11).
Do You happen to know a simple way to fix this issue? Otherwise I will finally give up to fix ESO as it is so annoying to discover every few months that my last fix update got broken by a new game patch again...
My original display name is 3d4dd - for some reason Nvidia changed it..?!
You can either switch to assembly shaders and translate the fix into assembly (but note that assembly has it's own gotchas to deal with), or add the structured buffer declarations and accesses in HLSL.
To do the later (note - I'm not in front of my gaming box to verify this, so there might be mistakes) take the assembly declaration of the structured buffer:
[code]
// Resource bind info for g_rPerInstanceShaderConstants
// {
//
// struct ZoPerInstanceShaderConstants
// {
//
// row_major float4x4 m_worldViewProj;// Offset: 0
// row_major float4x4 m_worldView;// Offset: 64
// row_major float4x4 m_world; // Offset: 128
// float4 m_detailValues; // Offset: 192
// float4 m_debugColor; // Offset: 208
// float4 m_tintColor; // Offset: 224
// float4 m_uvScrolling; // Offset: 240
// float4 m_texCoordScaleBias; // Offset: 256
// float m_glowFactor; // Offset: 272
// float m_softAlphaDepth; // Offset: 276
// float m_dissolveAlpha; // Offset: 280
// uint m_dissolveInverted; // Offset: 284
//
// } $Element; // Offset: 0 Size: 288
//
// }
[/code]
And translate it into the equivalent HLSL declaration, which is basically just the contained struct - plonk this somewhere at the top of the shader:
[code]
struct ZoPerInstanceShaderConstants
{
row_major float4x4 m_worldViewProj;// Offset: 0
row_major float4x4 m_worldView;// Offset: 64
row_major float4x4 m_world; // Offset: 128
float4 m_detailValues; // Offset: 192
float4 m_debugColor; // Offset: 208
float4 m_tintColor; // Offset: 224
float4 m_uvScrolling; // Offset: 240
float4 m_texCoordScaleBias; // Offset: 256
float m_glowFactor; // Offset: 272
float m_softAlphaDepth; // Offset: 276
float m_dissolveAlpha; // Offset: 280
uint m_dissolveInverted; // Offset: 284
};
[/code]
Find this line and correct it to refer to the correct structure type definition, change from:
[code]
StructuredBuffer<g_rPerInstanceShaderConstants> g_rPerInstanceShaderConstants : register(t3);
[/code]
To (note the part in angle brackets):
[code]
StructuredBuffer<ZoPerInstanceShaderConstants> g_rPerInstanceShaderConstants : register(t3);
[/code]
Ignore this - the manual fix here is what we just did:
[code]
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t3, 288
[/code]
For each of these:
[code]
// Known bad code for instruction (needs manual fix):
ld_structured_indexable(structured_buffer, stride=288)(mixed,mixed,mixed,mixed) r3.w, v10.x, l(272), t3.xxxx
[/code]
you need to translate them into the correct HLSL. This one should become:
[code]
r3.w = g_rPerInstanceShaderConstants[v10.x].m_glowFactor;
[/code]
Study the relationship between those two lines - notice where r3.w and v10.x came from in the above line. g_rPerInstanceShaderConstants is the name of the structure in the t3 register. m_glowFactor was found by looking up the l(272) offset in the structure definition. (As above, I'm not in front of my gaming computer to verify this, so please excuse any mistakes)
Repeat this process for the remaining ld_structured_indexable lines. The next one has one minor gotcha:
[code]
// Known bad code for instruction (needs manual fix):
ld_structured_indexable(structured_buffer, stride=288)(mixed,mixed,mixed,mixed) r2.xyzw, v10.x, l(208), t3.xyzw
[/code]
This should become:
[code]
r2 = g_rPerInstanceShaderConstants[v10.x].m_debugColor;
[/code]
The gotcha here was that I dropped the .xyzw on the r2 output, since "r2.xyzw" refers to all four components of r2, which is the same as just writing "r2", but the HLSL compiler might not like it if all four components are specified on an output (one, two or three are fine).
You can either switch to assembly shaders and translate the fix into assembly (but note that assembly has it's own gotchas to deal with), or add the structured buffer declarations and accesses in HLSL.
To do the later (note - I'm not in front of my gaming box to verify this, so there might be mistakes) take the assembly declaration of the structured buffer:
// Known bad code for instruction (needs manual fix):
ld_structured_indexable(structured_buffer, stride=288)(mixed,mixed,mixed,mixed) r3.w, v10.x, l(272), t3.xxxx
you need to translate them into the correct HLSL. This one should become:
Study the relationship between those two lines - notice where r3.w and v10.x came from in the above line. g_rPerInstanceShaderConstants is the name of the structure in the t3 register. m_glowFactor was found by looking up the l(272) offset in the structure definition. (As above, I'm not in front of my gaming computer to verify this, so please excuse any mistakes)
Repeat this process for the remaining ld_structured_indexable lines. The next one has one minor gotcha:
// Known bad code for instruction (needs manual fix):
ld_structured_indexable(structured_buffer, stride=288)(mixed,mixed,mixed,mixed) r2.xyzw, v10.x, l(208), t3.xyzw
The gotcha here was that I dropped the .xyzw on the r2 output, since "r2.xyzw" refers to all four components of r2, which is the same as just writing "r2", but the HLSL compiler might not like it if all four components are specified on an output (one, two or three are fine).
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
(Maybe my update has more relevant informations, see next post!)
So far I had no success. Probably I made something wrong when I tried to implement Your suggestions.
Maybe we could focus on fixing f8bdf818996f7aae-ps_replace.txt first as I can check the result already in the character selection screen and don't have to load the complete map.
The original code was:
// specular glow ---- Created with 3Dmigoto v1.2.56 on Fri Oct 26 19:35:33 2018
BTW should line 17 be "};" or just "}"?
Does the fact that there is "t3.xxxx" (line 121 in original shader) in one case and "t3.xyzw" (line 159) in the other case have any meaning for fixing the code?
I don't get an error sound when I start the game. But as soon as I make any changes to the shader and reload the shader I get an error sound (used the old 3Dmigoto version included in the original fix). Also inserting my workaround code in the shader BEFORE starting the game has no results as the shader seems to be ignored.
My well-tried workaround for the broken specular glow in the game is just to reduce the intensity of the effect by this code (would be inserted in line 109):
Update: Tested the changed shader with a "clean install" of 3Dmigoto (1.3.11) and only f8bdf818996f7aae-ps_replace.txt in ShaderFixes to prevent any conflicts with other fixed shaders.
Got the same error beep when reloading the shader after implementing my workaround code and the UI says that there is a problem with
"f8bdf818996f7aae-ps_replace.txt(135,10-18): error X3004: undeclared identifier 'AnisoWrap' ".
This seems to refer to
[code]r2.y = AnisoWrap[]..swiz;[/code]
and maybe also
[code] r3.x = AnisoWrap[]..swiz;
r3.y = AnisoWrap[]..swiz;
r3.z = AnisoWrap[]..swiz;
r3.w = AnisoWrap[]..swiz;
[/code]
AnisoWrap[]..swiz never appeared in the ShaderCache before the last update of ESO. So it must be newly introduced. I got 94 new shaders with this code, all of them also with "Needs manual fix...".
Update: Tested the changed shader with a "clean install" of 3Dmigoto (1.3.11) and only f8bdf818996f7aae-ps_replace.txt in ShaderFixes to prevent any conflicts with other fixed shaders.
Got the same error beep when reloading the shader after implementing my workaround code and the UI says that there is a problem with
"f8bdf818996f7aae-ps_replace.txt(135,10-18): error X3004: undeclared identifier 'AnisoWrap' ".
This seems to refer to
AnisoWrap[]..swiz never appeared in the ShaderCache before the last update of ESO. So it must be newly introduced. I got 94 new shaders with this code, all of them also with "Needs manual fix...".
My original display name is 3d4dd - for some reason Nvidia changed it..?!
I had those problems a couple years ago with RE7 where HLSL wouldn't have all of code converted properly, such as countbits() throwing an error. Other things like unknown declarations said "manual fix" too. I fixed this issue by sticking with ASM.
I had those problems a couple years ago with RE7 where HLSL wouldn't have all of code converted properly, such as countbits() throwing an error. Other things like unknown declarations said "manual fix" too. I fixed this issue by sticking with ASM.
---
Windows 10 x64 / 1x 980Ti GPU (no SLI, 418.81 driver) / 1920x1080
* If you do find yourself in a situation where you need to affect a creation time parameter (e.g. force one texture to stereo and another to mono) and have no way to distinguish between them there is another option - create your own resource forced to stereo or mono and swap the game's resource for it from [ShaderOverride] sections both where they are written and read. e.g. simplified excerpt from Dreamfall Chapers:
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
https://trello.com/b/qmDW53T5/3dmigoto
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
http://photos.3dvisionlive.com/chtiblue/album/530b52d4cb85770d6e000049/3Dvision with 55" LG OLED EG920 interlieved 3D (3840x2160) overide mode, GTX 2080 Ti XC Ultra EVGA, core i5 @4.3GHz, 16Gb@2130, windows 7&10 64bit, Dolby Atmos 5.1.4 Marantz 6010 AVR
Gigabyte RTX2080TI Gaming OC, I7-6700k ~ 4.4Ghz, 3x BenQ XL2420T, BenQ TK800, LG 55EG960V (3D OLED), Samsung 850 EVO SSD, Crucial M4 SSD, 3D vision kit, Xpand x104 glasses, Corsair HX1000i, Win 10 pro 64/Win 7 64https://www.3dmark.com/fs/9529310
//hm is this also working for texture overrides ???
Not working here ;:-(
[Key_PERFORMANCE_KB]
Key = F3
type = cycle
w = 0, 1
.
.
.
[TextureOverride_culling1]
Hash = 3d7dd24e
if w
expand_region_copy=1
deny_cpu_read=1
endif
Like my work? Donations can be made via PayPal to: rauti@inetmx.de
* I'm pretty convinced there should be a better way to solve the disappearing geometry in CryEngine than using deny_cpu_read that would be much better for performance. At the time I added that hack I didn't have enough visibility or control to fix it in another way, but I have since fixed similar issues in other engines and am fairly confident I could do better now. The expand_region_copy I'd need to think about - there may not be a whole lot we can do better on that one.
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
Ok there is one texture hash marked as MapType:1 that will cause flickering in KDC (KingdomeComesDeliverance ... you remeber ^^) I have to set deny_cpu_read = 1 to get rid of the flickering but this will costs arround 10 FPS !!!! Id like to give the user the option to set deny_cpu_read=1 (flicker but -10 FPS) or deny_cpu_read=0 (no flicker but +10 fps) ... may usefull in some hard FPS drop situations...
If you have an idea how to get rid of flickering but save the FPS like deny_cpu_read=0 ... ill love you more than i allready do ^^
Like my work? Donations can be made via PayPal to: rauti@inetmx.de
d3dx.ini:
cryengine_flicker_fix.hlsl:
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
You are knowledge is incredible!!!!!
I am currently under control ^^
" rel="nofollow" target = "_blank">
I need to get out of this.....
Like my work? Donations can be made via PayPal to: rauti@inetmx.de
The complete code of 2 broken shaders can be found here:
https://www2.zippyshare.com/v/OtiV2NfK/file.html
https://www2.zippyshare.com/v/NPCh9V79/file.html
I have used the original version of 3Dmigoto included in the fix. But I get the same error with the actual version of 3Dmigoto (1.3.11).
Do You happen to know a simple way to fix this issue? Otherwise I will finally give up to fix ESO as it is so annoying to discover every few months that my last fix update got broken by a new game patch again...
My original display name is 3d4dd - for some reason Nvidia changed it..?!
To do the later (note - I'm not in front of my gaming box to verify this, so there might be mistakes) take the assembly declaration of the structured buffer:
And translate it into the equivalent HLSL declaration, which is basically just the contained struct - plonk this somewhere at the top of the shader:
Find this line and correct it to refer to the correct structure type definition, change from:
To (note the part in angle brackets):
Ignore this - the manual fix here is what we just did:
For each of these:
you need to translate them into the correct HLSL. This one should become:
Study the relationship between those two lines - notice where r3.w and v10.x came from in the above line. g_rPerInstanceShaderConstants is the name of the structure in the t3 register. m_glowFactor was found by looking up the l(272) offset in the structure definition. (As above, I'm not in front of my gaming computer to verify this, so please excuse any mistakes)
Repeat this process for the remaining ld_structured_indexable lines. The next one has one minor gotcha:
This should become:
The gotcha here was that I dropped the .xyzw on the r2 output, since "r2.xyzw" refers to all four components of r2, which is the same as just writing "r2", but the HLSL compiler might not like it if all four components are specified on an output (one, two or three are fine).
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
My original display name is 3d4dd - for some reason Nvidia changed it..?!
So far I had no success. Probably I made something wrong when I tried to implement Your suggestions.
Maybe we could focus on fixing f8bdf818996f7aae-ps_replace.txt first as I can check the result already in the character selection screen and don't have to load the complete map.
The original code was:
I have changed it to (see line 3-17, 76, 134, 171):
BTW should line 17 be "};" or just "}"?
Does the fact that there is "t3.xxxx" (line 121 in original shader) in one case and "t3.xyzw" (line 159) in the other case have any meaning for fixing the code?
I don't get an error sound when I start the game. But as soon as I make any changes to the shader and reload the shader I get an error sound (used the old 3Dmigoto version included in the original fix). Also inserting my workaround code in the shader BEFORE starting the game has no results as the shader seems to be ignored.
My well-tried workaround for the broken specular glow in the game is just to reduce the intensity of the effect by this code (would be inserted in line 109):
But as mentioned above it had no effect so far as the shader itself seems to be ignored completely.
I have also tested ae831d73076d9e63-ps_replace.txt trying to make the changes You suggested without success. This is the code I used: https://www39.zippyshare.com/v/kANdlNXu/file.html
My original display name is 3d4dd - for some reason Nvidia changed it..?!
Got the same error beep when reloading the shader after implementing my workaround code and the UI says that there is a problem with
"f8bdf818996f7aae-ps_replace.txt(135,10-18): error X3004: undeclared identifier 'AnisoWrap' ".
This seems to refer to
and maybe also
AnisoWrap[]..swiz never appeared in the ShaderCache before the last update of ESO. So it must be newly introduced. I got 94 new shaders with this code, all of them also with "Needs manual fix...".
My original display name is 3d4dd - for some reason Nvidia changed it..?!
---
Windows 10 x64 / 1x 980Ti GPU (no SLI, 418.81 driver) / 1920x1080