VPFX Common Errors and Troubleshooting
This document helps players and pack authors diagnose common VPFX issues.
It covers:
Pack detection problemsManifest errorsPost-effect graph errorsShader file errorsInclude errorsSampler and target mistakesScene depth mistakesshadow_depth mistakesRuntime fallbackDebug commandsUseful files to attach when asking for helpThis guide is based on the current VPFX pack loader, graph validator, shader preprocessor, runtime fallback path, and diagnostics output.
1. First things to check
Before debugging deeply, check these basics:
1. Is VPFX installed and loaded?2. Is the pack a VPFX pack, not an Iris or OptiFine pack?3. Is the pack zip inside .minecraft/shaderpacks/?4. Is pack.json at the root of the zip?5. Does the pack appear in the VPFX menu?6. Does /vpfx list show it?7. Does latest.log contain VPFX errors?8. Does /vpfx off restore vanilla rendering?9. Does /vpfx reload builtin work?Useful commands:
/vpfx list/vpfx reload/vpfx reload auto/vpfx reload builtin/vpfx offUseful default keys:
F7 - Open VPFX shaderpack menuF9 - Toggle VPFX shadow depth debug viewF10 - Reload current VPFX pack2. Where to look for logs
The most useful log file is:
.minecraft/logs/latest.logSearch for:
VPFXvulkanpostfxF001G001S001C001I001If VPFX fails during runtime execution, it may also write a diagnostic report here:
.minecraft/vulkanpostfx_runtime/diagnostics/latest-vpfx-error.txtThat file may include:
Pack nameExternal post effect idRuntime namespaceBackend idBackend capabilitiesFailure stageException classException messageFallback targetStack traceIf you are reporting a serious issue, attach:
latest.loglatest-vpfx-error.txt if it existsthe VPFX pack zipa screenshot or video3. Quick decision tree
The pack does not appear
Check:
pack.json is at the zip root.pack.json is valid JSON.The zip is inside shaderpacks/.The file extension is .zip.The pack is not nested inside an extra folder.Then run:
/vpfx listThe pack appears but fails to load
Check:
latest.logmanifest errors: Fxxxgraph errors: Gxxxshader file errors: Sxxxcapability errors: Cxxxinclude errors: IxxxThe pack loads but the screen is black
Check:
The final pass outputs to minecraft:main.The fragment shader writes fragColor.Sampler uniform names match sampler_name + "Sampler".The shader compiled successfully.The pass is not reading an unwritten target.The pack is not reading and writing the same custom target in one pass.The pack works but shadows are wrong
Check:
Did the pack declare shadow_depth?Does pack.json contain targets.shadow_depth?Does the graph read vulkanpostfx:shadow_depth?Is use_depth_buffer true for clarity?Are you treating shadow_depth as scene_depth?Are you trying to write a full receiver without public shadowOrigin?Does the issue change when rotating the camera?The game falls back to vanilla
Check:
latest.loglatest-vpfx-error.txtfailureStageexceptionMessageactive backendfallback reasonVPFX is designed to fail safely when possible.
4. Pack zip layout errors
Problem
The pack does not appear in the VPFX menu or /vpfx list.
Common cause
The zip contains an extra folder.
Incorrect:
my_pack.zip└─ my_pack/ ├─ pack.json ├─ post_effect/ └─ shaders/Correct:
my_pack.zip├─ pack.json├─ post_effect/└─ shaders/Fix
Open the zip. You should immediately see:
pack.jsonpost_effect/shaders/If you need to enter another folder before seeing pack.json, re-zip the contents of the folder, not the folder itself.
5. pack.json is missing
Error code
F001 pack.jsonMeaning
VPFX did not find pack.json at the zip root.
Fix
Make sure the zip root contains:
pack.jsonCorrect:
my_pack.zip├─ pack.json└─ post_effect/main.jsonIncorrect:
my_pack.zip└─ my_pack/pack.json6. pack.json is not a JSON object
Error code
F001 pack.jsonBad example
[ { "format_version": 1 }]Correct example
{ "format_version": 1, "pack_id": "example_pack", "name": "Example Pack", "version": "1.0.0", "entry_post_effect": "post_effect/main.json", "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": false, "custom_targets": true, "compute": false }}The root of pack.json must be a JSON object.
7. Unsupported format_version
Error code
F002 format_versionProblem
Current VPFX native pack manifests support:
"format_version": 1Bad example
"format_version": 2Fix
Use:
"format_version": 18. Invalid pack_id
Error code
F003 pack_idRule
pack_id must match:
^[a-z0-9_.-]{3,64}$Allowed:
lowercase lettersnumbersunderscore _dot .hyphen -Good examples
example_packcinematic_tone_packauthor.cool_packdebug-shadow-viewBad examples
Example PackMy Shader!!!abcool packshader@packFix
Use a lowercase namespace-like ID:
"pack_id": "my_first_vpfx_pack"9. Missing entry_post_effect
Error code
F005 entry_post_effectMeaning
The path listed in pack.json does not exist inside the zip.
Bad example
"entry_post_effect": "post_effect/missing.json"but the zip contains:
post_effect/main.jsonFix
Either rename the file or update the manifest:
"entry_post_effect": "post_effect/main.json"10. Missing required manifest fields
Error code
F006Common missing fields
format_versionpack_idnameversionentry_post_effectcapabilitiescapabilities.scene_colorcapabilities.scene_depthcapabilities.shadow_depthcapabilities.custom_targetscapabilities.computeBad example
{ "format_version": 1, "pack_id": "example_pack"}Fix
Use a complete manifest:
{ "format_version": 1, "pack_id": "example_pack", "name": "Example Pack", "version": "1.0.0", "author": "Your Name", "description": "Example VPFX pack.", "entry_post_effect": "post_effect/main.json", "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": false, "custom_targets": true, "compute": false }}11. Invalid capabilities
Error code
F006Problem
All capability fields must exist and must be booleans.
Bad example
"capabilities": { "scene_color": true}Correct example
"capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": false, "custom_targets": true, "compute": false}Important
Current VPFX runtime does not support compute shaders.
Do not use:
"compute": trueUse:
"compute": false12. Runtime capability errors
Error codes
C001 capabilities.scene_colorC002 capabilities.scene_depthC003 capabilities.shadow_depthC004 capabilities.custom_targetsC005 capabilities.computeMeaning
The pack requested a feature that the current runtime does not provide.
The current intended runtime capabilities are usually:
scene_color: truescene_depth: trueshadow_depth: truecustom_targets: truecompute: falseThe most common capability mistake is:
"compute": trueFix
Set compute to false:
"compute": falseIf you requested shadow_depth, make sure your VPFX version actually supports it and the runtime did not fall back.
13. shadow_depth enabled without targets.shadow_depth
Error code
F007 targets.shadow_depthProblem
If this is true:
"shadow_depth": truethen pack.json must include:
"targets": { "shadow_depth": "vulkanpostfx:shadow_depth"}Bad example
{ "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": true, "custom_targets": true, "compute": false }}Correct example
{ "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": true, "custom_targets": true, "compute": false }, "targets": { "shadow_depth": "vulkanpostfx:shadow_depth" }}14. Invalid manifest target mapping
Error code
F006 targets.<name>Rule
Manifest target mapping values must match:
^[a-z0-9_.-]+:[a-z0-9_./-]+$Good
"targets": { "shadow_depth": "vulkanpostfx:shadow_depth"}Bad
"targets": { "shadow_depth": "shadow_depth"}Target IDs must be namespaced.
15. Texture declaration errors
Error code
F008Texture names must be GLSL-safe identifiers.
Rule:
^[A-Za-z_][A-Za-z0-9_]*$Bad
"textures": { "blue-noise": { "path": "textures/blue_noise.png" }}Correct
"textures": { "BlueNoise": { "path": "textures/blue_noise.png" }}Also check
The texture entry is an object.The path field exists.The texture path is not blank.The file exists inside the zip.filter is either linear or nearest.wrap is either clamp or repeat.16. Missing texture file
Error code
F008 textures.<name>.pathProblem
The manifest declares a texture:
"textures": { "BlueNoise": { "path": "textures/blue_noise.png" }}but the zip does not contain:
textures/blue_noise.pngFix
Add the file or correct the path.
Remember that zip paths are case-sensitive in practice.
17. Graph entry file missing
Error code
G001Meaning
VPFX could not find the graph file referenced by:
"entry_post_effect": "post_effect/main.json"Fix
Make sure the zip contains:
post_effect/main.jsonat exactly that path.
18. Graph root is not an object
Error code
G002Bad example
[ { "targets": {}, "passes": [] }]Correct example
{ "targets": {}, "passes": [ { "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "minecraft:main" } ]}19. Graph has no passes
Error code
G002 passesProblem
The graph must contain at least one pass.
Bad example
{ "targets": {}, "passes": []}Fix
Add a pass that writes to minecraft:main.
20. Missing targets or passes
Error codes
G050G052Problem
The graph root must contain:
{ "targets": {}, "passes": []}Even if you do not need custom targets, targets must exist and be an object.
Correct minimal graph:
{ "targets": {}, "passes": [ { "id": "final_composite", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "minecraft:main" } ]}21. Invalid custom target ID
Error code
G007Rule
Custom target IDs must match:
^[a-z0-9_.-]+:[a-z0-9_./-]+$Bad
"targets": { "temp": { "scale": 1.0 }}Correct
"targets": { "example_pack:temp": { "scale": 1.0 }}Use your pack_id as the namespace.
22. Invalid target definition
Error code
G010Bad
"targets": { "example_pack:temp": 1.0}Correct
"targets": { "example_pack:temp": { "scale": 1.0, "use_depth": false }}Each target definition must be a JSON object.
23. Invalid target scale
Error code
G011Rule
Target scale must be finite and in:
(0, 1]Good
"scale": 1.0"scale": 0.5"scale": 0.25Bad
"scale": 0"scale": 2.0"scale": "half"24. Invalid target booleans
Error codes
G012G059Problem
Boolean fields must be actual JSON booleans.
Fields include:
use_depthpersistenthistoryping_pongBad
"use_depth": "false"Correct
"use_depth": false25. Invalid clear_color
Error codes
G040G041G042Rule
clear_color must be an array of exactly four numbers.
Correct
"clear_color": [0.0, 0.0, 0.0, 0.0]Bad
"clear_color": [0.0, 0.0, 0.0]Bad
"clear_color": "black"26. Pass is not an object
Error code
G020Bad
"passes": [ "final"]Correct
"passes": [ { "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "minecraft:main" }]27. Pass has no inputs
Error code
G003Problem
Every pass must have at least one input.
Bad
{ "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [], "output": "minecraft:main"}Fix
For a basic final pass, read scene color:
"inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" }]28. Input is not an object
Error code
G030Bad
"inputs": [ "minecraft:scene_color"]Correct
"inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" }]29. Invalid sampler_name
Error code
G008Rule
sampler_name must match:
^[A-Za-z_][A-Za-z0-9_]*$Good
InSceneDepthShadowBlueNoise_ColorLutBad
1Inputscene colorcolor-textureshadow.depthGLSL mapping
This JSON:
"sampler_name": "In"becomes this GLSL uniform:
uniform sampler2D InSampler;30. Duplicate sampler names
Error code
G009Bad
"inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" }, { "sampler_name": "In", "target": "vulkanpostfx:scene_depth" }]Correct
"inputs": [ { "sampler_name": "Scene", "target": "minecraft:scene_color" }, { "sampler_name": "Depth", "target": "vulkanpostfx:scene_depth" }]Sampler names must be unique within one pass.
31. Input has both target and texture
Error codes
G012G032Bad
{ "sampler_name": "Bad", "target": "minecraft:scene_color", "texture": "BlueNoise"}Correct target input
{ "sampler_name": "Scene", "target": "minecraft:scene_color"}Correct texture input
{ "sampler_name": "Noise", "texture": "BlueNoise"}Each input must contain exactly one of:
targettexture32. Input target not found
Error code
G005Problem
The pass reads a target that is neither built-in nor declared in the graph.
Bad
{ "sampler_name": "Temp", "target": "example_pack:temp"}but example_pack:temp is not declared in root targets.
Fix
Declare the target:
"targets": { "example_pack:temp": { "scale": 1.0, "use_depth": false }}or read a built-in target:
{ "sampler_name": "In", "target": "minecraft:scene_color"}33. Reading a custom target before it is written
Error code
G017Problem
Custom targets are only available after an earlier pass writes to them.
Bad
{ "targets": { "example_pack:temp": { "scale": 1.0 } }, "passes": [ { "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "Temp", "target": "example_pack:temp" } ], "output": "minecraft:main" } ]}Fix
Write the target first:
{ "targets": { "example_pack:temp": { "scale": 1.0 } }, "passes": [ { "id": "write_temp", "vertex_shader": "example_pack:composite/copy", "fragment_shader": "example_pack:composite/copy", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "example_pack:temp" }, { "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "Temp", "target": "example_pack:temp" } ], "output": "minecraft:main" } ]}34. Self-read/write hazard
Error code
G015Problem
A pass reads from the same custom target it writes to.
Bad
{ "id": "bad_feedback", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "Temp", "target": "example_pack:temp" } ], "output": "example_pack:temp"}Fix
Use two targets:
example_pack:temp_aexample_pack:temp_bor structure the effect as multiple passes.
Reading minecraft:scene_color while writing minecraft:main is safe because VPFX uses a scene color snapshot.
35. Output target not declared
Error code
G004Problem
A pass writes to an undeclared custom target.
Bad
"output": "example_pack:temp"but root targets does not declare example_pack:temp.
Fix
Declare it:
"targets": { "example_pack:temp": { "scale": 1.0, "use_depth": false }}or write to the final target:
"output": "minecraft:main"36. Graph does not write to minecraft:main
Error code
G016Problem
The graph writes only to intermediate targets and never outputs the final image.
Bad
{ "targets": { "example_pack:temp": { "scale": 1.0 } }, "passes": [ { "id": "only_temp", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "example_pack:temp" } ]}Fix
Add a final pass:
{ "id": "final", "vertex_shader": "example_pack:composite/final", "fragment_shader": "example_pack:composite/final", "inputs": [ { "sampler_name": "Temp", "target": "example_pack:temp" } ], "output": "minecraft:main"}37. Texture input not declared
Error code
G013Problem
The graph reads a texture name that does not exist in pack.json.
Bad graph input
{ "sampler_name": "Noise", "texture": "BlueNoise"}but pack.json has no:
"textures": { "BlueNoise": { "path": "textures/blue_noise.png" }}Fix
Declare the texture in pack.json, or remove the texture input.
38. Texture input uses use_depth_buffer
Error codes
G014G033Bad
{ "sampler_name": "Noise", "texture": "BlueNoise", "use_depth_buffer": true}Fix
Remove use_depth_buffer.
Texture inputs cannot use depth-buffer sampling.
39. use_depth_buffer=true but target has no depth buffer
Error code
G006Bad
"targets": { "example_pack:temp": { "scale": 1.0, "use_depth": false }}with input:
{ "sampler_name": "TempDepth", "target": "example_pack:temp", "use_depth_buffer": true}Fix
Declare the target with depth:
"targets": { "example_pack:temp": { "scale": 1.0, "use_depth": true }}or remove:
"use_depth_buffer": true40. Vertex shader file not found
Error code
S001Problem
The graph references:
"vertex_shader": "example_pack:composite/final"VPFX expects:
shaders/composite/final.vshinside the zip.
Fix
Check:
The file exists.The folder is named shaders.The extension is .vsh.The path matches exactly.The zip is not nested incorrectly.41. Fragment shader file not found
Error code
S002Problem
The graph references:
"fragment_shader": "example_pack:composite/final"VPFX expects:
shaders/composite/final.fshinside the zip.
Fix
Check:
The file exists.The extension is .fsh.The path matches the graph.The file is not named .frag.42. Invalid shader resource ID or path
Error code
S003Valid format
namespace:pathGood
example_pack:composite/finalexample_pack:bloom/downsampleexample_pack:debug/shadow_depthBad
composite/finalexample_pack:example_pack:/finalexample_pack:../finalexample_pack:folder\finalShader paths must not:
be blankbe absolutecontain ..contain backslashes43. Include preprocess errors
Error codes
S004 vertex_shaderS005 fragment_shaderThese wrap lower-level include errors:
I001 include depth exceededI002 include cycle detectedI003 blank include pathI004 parent path traversal is not allowedI005 included shader file not foundI006 failed to read included shader fileInclude syntax
Supported:
#include "common/functions.glsl"Includes are resolved relative to the current shader file unless the path starts with:
shaders/Good
If current file is:
shaders/composite/final.fshthen:
#include "common.glsl"resolves to:
shaders/composite/common.glslThis:
#include "shaders/common/color.glsl"resolves from the zip root.
Bad
#include "../common.glsl"Parent path traversal is not allowed.
44. Built-in uniforms not recognized
Symptoms
Shader compile error mentioning:
vpfx_Timevpfx_ViewSizevpfx_RainStrengthVpfxBuiltinsLikely causes
The shader is used as a .glsl include file instead of a .fsh or .vsh entry.The shader has a syntax error before the injected uniform block.The shader manually declared an incompatible VpfxBuiltins block.The source already contains VPFX_BUILTIN_UNIFORMS and blocked injection.Rule
VPFX injects built-in uniforms into:
.vsh.fshIt does not inject them into:
.glsl include filesIf a .glsl include uses vpfx_Time, it should only be included by a .vsh or .fsh that receives the injected uniform block.
45. Sampler uniform is wrong
Symptom
Black screen, wrong texture, or shader compile/link issue.
JSON
{ "sampler_name": "In", "target": "minecraft:scene_color"}Correct GLSL
uniform sampler2D InSampler;Incorrect GLSL
uniform sampler2D In;VPFX uses:
<sampler_name>Sampler46. Scene depth does not work
Checklist
In pack.json:
"scene_depth": trueIn graph input:
{ "sampler_name": "Depth", "target": "vulkanpostfx:scene_depth"}In GLSL:
uniform sampler2D DepthSampler;For reconstruction, use:
vec3 viewPos = vpfx_ViewPositionFromRaw(DepthSampler, texCoord);or:
vec3 worldPos = vpfx_WorldPositionFromRaw(DepthSampler, texCoord);Common mistakes
Using scene_depth without declaring capability.Using ShadowSampler instead of DepthSampler.Expecting raw depth to be linear distance.Forgetting that depth behavior depends on projection.47. shadow_depth does not work
Checklist
In pack.json:
"shadow_depth": trueand:
"targets": { "shadow_depth": "vulkanpostfx:shadow_depth"}In graph input:
{ "sampler_name": "Shadow", "target": "vulkanpostfx:shadow_depth", "use_depth_buffer": true}In GLSL:
uniform sampler2D ShadowSampler;Common mistakes
Forgetting targets.shadow_depth.Treating shadow_depth as scene_depth.Sampling shadow_depth with screen UVs and expecting screen-space shadows.Writing a full receiver without public shadowOrigin.Expecting shadow_depth to be valid when no world is loaded.Expecting shadow_depth to be valid during weak-light periods.48. Black screen troubleshooting
If the screen is black:
- Test a constant color shader.
#version 150
in vec2 texCoord;out vec4 fragColor;
void main() { fragColor = vec4(1.0, 0.0, 1.0, 1.0);}If the screen becomes magenta, the pass is running.
If not, check:
Does the graph write to minecraft:main?Did the shader compile?Are shader files present?Is the pack selected?Did VPFX fall back to vanilla?- Test a scene color copy shader.
#version 150
uniform sampler2D InSampler;
in vec2 texCoord;out vec4 fragColor;
void main() { fragColor = texture(InSampler, texCoord);}If magenta works but scene copy does not, the sampler or input binding is likely wrong.
49. Pack loads but has no visible effect
Possible causes:
Your shader is a copy pass.The effect is too subtle.The wrong pack is active.The final pass does not use the modified target.A later pass overwrites the result.The graph outputs the original scene color again.Debug approach:
1. Output magenta.2. Output scene color.3. Output scene color * 0.5.4. Add your effect back gradually.50. Reload does not update the pack
Try:
F10or:
/vpfx reloadIf that does not help:
1. Make sure you replaced the zip in shaderpacks/.2. Make sure the zip contains the updated files.3. Run /vpfx list and check the active pack.4. Try /vpfx reload auto.5. Try restarting the game.If you changed pack_id, the active config may still point to the old pack. Use the menu or /vpfx reload auto.
51. /vpfx list does not show your pack
Check:
The zip is in shaderpacks/.The file extension is .zip.pack.json is at the root.pack.json is valid.The pack is not being skipped due to validation failure.latest.log contains no F/G/S/C errors for that pack.If the zip has no pack.json, VPFX treats it as not being a native VPFX pack.
52. /vpfx off fixes the problem
If /vpfx off fixes the issue, the problem is likely related to:
VPFX runtimethe active VPFX packa VPFX target or shaderVPFX shadow passVPFX compatibility with another client modNext steps:
Try /vpfx reload builtin.Try a minimal VPFX pack.Try removing other rendering mods.Attach latest.log.Attach the pack zip.53. /vpfx reload builtin works, but external pack fails
This usually means the external pack has an issue.
Check:
pack.jsonpost_effect/main.jsonshader file pathssampler namescustom target read/write ordershadow_depth declarationlatest.log error codesUse the minimal pack from the Quick Start guide to isolate the problem.
54. Runtime fallback and diagnostics
If VPFX fails during native runtime execution, it may safely fall back.
Common failure stages include:
EXECUTE_FLAG_DISABLEDNOT_RENDER_THREADMAIN_TARGET_UNAVAILABLEINVALID_MAIN_TARGET_DIMENSIONSTRANSIENT_TARGET_CREATECOPY_MAIN_TO_TRANSIENTUSER_PIPELINE_RESOLVEUSER_PIPELINE_CREATEUSER_SHADER_DRAWBUILTIN_PIPELINE_CREATEBUILTIN_FALLBACK_DRAWNATIVE_DRAW_FAILEDPOSTCHAIN_FALLBACKIf you see a runtime failure, attach:
.minecraft/logs/latest.log.minecraft/vulkanpostfx_runtime/diagnostics/latest-vpfx-error.txtThe diagnostic report is especially useful because it includes the failure stage and fallback target.
55. Common native runtime issue: USER_PIPELINE_RESOLVE
This means VPFX could not resolve the user pack into a runtime pipeline.
Common causes:
Invalid graphMissing resourcesUnresolved input targetInvalid output targetRuntime namespace unavailablePack was marked unavailable after a previous failureCheck:
F/G/S/C error codes in latest.logpack zip layoutpost_effect/main.jsonshader references56. Common native runtime issue: USER_PIPELINE_CREATE
This means the graph resolved, but pipeline creation failed.
Common causes:
Shader compile failureShader link failureInvalid sampler layoutInvalid output format assumptionsDriver/backend-specific shader issueCheck:
latest.logshader compile errorsfragment shader output declarationsampler uniform namesGLSL version57. Common native runtime issue: USER_SHADER_DRAW
This means the user shader pipeline was created, but drawing failed.
Common causes:
Invalid texture bindingRuntime target became unavailableUnexpected framebuffer stateDriver/backend failureReport with:
latest.loglatest-vpfx-error.txtpack zipscreenshot or video58. Shadow artifacts troubleshooting
Common shadow symptoms:
stripe artifacts on terraindiagonal artifacts on block sidesshadow changes when rotating the cameraentity has no shadowplayer held item casts shadow but body does notvanilla circular entity shadow appears together with VPFX shadowblock entity shadow flickersUseful tests:
Toggle F9 shadow debug.Rotate the camera without moving.Move without rotating the camera.Test noon and sunset separately.Test /vpfx reload builtin.Test /vpfx off.Important rule:
If the shadow changes shape only because the player rotates the camera, report it clearly.That usually indicates player-view-dependent shadow logic, which VPFX should avoid.
59. Entity shadow troubleshooting
If entity shadows do not appear:
Check F9 shadow debug.Test cow, sheep, zombie, dropped item, boat, minecart.Check whether only held items appear.Check whether the entity is invisible.Check whether vanilla circular blob shadows are suppressed correctly.If the entity appears in F9 shadow debug but not on terrain, the problem is likely receiver-side.
If the entity does not appear in F9 shadow debug, the problem is likely caster-side.
60. Vanilla circular entity shadow is still visible
VPFX suppresses vanilla circular entity shadows while VPFX world shadows are active.
If both shadows appear:
VPFX entity shadow map shadow+vanilla circular blob shadowthen report it as a double-shadow issue.
Include:
VPFX versionactive packwhether world shadows are activescreenshotlatest.logThere is also a JVM override that may intentionally keep vanilla entity shadows:
-Dvulkanpostfx.shadow.keepVanillaEntityShadows=trueIf that is enabled, vanilla blob shadows may remain by design.
61. Shader compile troubleshooting
Check:
#version 150 is present.fragColor is declared and written.in/out names match between vertex and fragment shaders.Sampler uniforms use <sampler_name>Sampler.No unsupported GLSL features are used.No missing semicolons.No type mismatches.No undeclared VPFX uniforms due to manual uniform block conflicts.Minimal fragment shader test:
#version 150
in vec2 texCoord;out vec4 fragColor;
void main() { fragColor = vec4(1.0, 0.0, 1.0, 1.0);}Minimal vertex shader test:
#version 150
out vec2 texCoord;
void main() { vec2 pos;
if (gl_VertexID == 0) { pos = vec2(-1.0, -1.0); } else if (gl_VertexID == 1) { pos = vec2(3.0, -1.0); } else { pos = vec2(-1.0, 3.0); }
texCoord = pos * 0.5 + 0.5; gl_Position = vec4(pos, 0.0, 1.0);}62. Debugging order for pack authors
When your pack breaks, use this order:
1. Does /vpfx list show the pack?2. Does latest.log show Fxxx manifest errors?3. Does latest.log show Gxxx graph errors?4. Does latest.log show Sxxx shader file errors?5. Does latest.log show Ixxx include errors?6. Does latest.log show Cxxx capability errors?7. Does the pack output magenta?8. Does the pack copy scene_color correctly?9. Does one pass work before adding multiple passes?10. Do custom targets get written before being read?11. Does the final pass output to minecraft:main?12. Does /vpfx off recover vanilla rendering?Do not debug shadows before a one-pass color copy works.
63. What to include when asking for help
For player issues:
Minecraft version:Fabric Loader version:VPFX version:Operating system:GPU:Shaderpack name:Shaderpack version:Screenshot or video:Steps to reproduce:latest.log:For pack author issues:
VPFX version:Pack zip:pack.json:post_effect/main.json:Relevant shader file:latest.log:What you expected:What happened:For runtime fallback:
latest.logvulkanpostfx_runtime/diagnostics/latest-vpfx-error.txtpack zip64. Minimal known-good pack test
If everything is confusing, test a minimal pack:
pack.json:
{ "format_version": 1, "pack_id": "minimal_test_pack", "name": "Minimal Test Pack", "version": "1.0.0", "author": "Tester", "description": "Minimal VPFX test pack.", "entry_post_effect": "post_effect/main.json", "capabilities": { "scene_color": true, "scene_depth": false, "shadow_depth": false, "custom_targets": true, "compute": false }}post_effect/main.json:
{ "targets": {}, "passes": [ { "id": "final", "vertex_shader": "minimal_test_pack:composite/final", "fragment_shader": "minimal_test_pack:composite/final", "inputs": [ { "sampler_name": "In", "target": "minecraft:scene_color" } ], "output": "minecraft:main" } ]}shaders/composite/final.vsh:
#version 150
out vec2 texCoord;
void main() { vec2 pos;
if (gl_VertexID == 0) { pos = vec2(-1.0, -1.0); } else if (gl_VertexID == 1) { pos = vec2(3.0, -1.0); } else { pos = vec2(-1.0, 3.0); }
texCoord = pos * 0.5 + 0.5; gl_Position = vec4(pos, 0.0, 1.0);}shaders/composite/final.fsh:
#version 150
uniform sampler2D InSampler;
in vec2 texCoord;out vec4 fragColor;
void main() { fragColor = texture(InSampler, texCoord);}If this pack works, your VPFX installation and basic runtime are likely working.
If this pack fails, attach logs and report it as a runtime or loader issue.
65. Error code summary
Manifest errors
F001 pack.json missing, unreadable, or not an objectF002 unsupported format_versionF003 invalid pack_idF005 entry_post_effect missing from zipF006 invalid or missing manifest fieldF007 shadow_depth target mapping missingF008 texture declaration errorGraph errors
G001 graph entry file not foundG002 graph root invalid or no passesG003 graph read error or pass has no inputsG004 output target not declaredG005 input target not foundG006 invalid depth capability or depth-buffer usageG007 invalid target identifierG008 invalid sampler_nameG009 duplicate sampler_nameG010 target definition is not an objectG011 invalid target scaleG012 input target/texture selection errorG013 texture input not declaredG014 texture input cannot use depth bufferG015 self-read/write hazardG016 graph does not write to minecraft:mainG017 custom target read before writtenG020 pass is not an objectG030 input is not an objectG031 use_depth_buffer is not booleanG032 input must contain exactly one of target or textureG033 texture input cannot use use_depth_buffer=trueG040 clear_color is not an arrayG041 clear_color does not have 4 elementsG042 clear_color contains non-number valuesG050 missing required object fieldG052 missing required array fieldG054 missing required string fieldG056 required string field is blankG058 optional string field has wrong typeG059 optional boolean field has wrong typeCapability errors
C001 scene_color unavailableC002 scene_depth unavailableC003 shadow_depth unavailableC004 custom_targets unavailableC005 compute unavailableShader file and preprocess errors
S001 vertex shader file not foundS002 fragment shader file not foundS003 invalid shader resource ID or pathS004 vertex shader preprocess errorS005 fragment shader preprocess errorInclude errors
I001 include depth exceededI002 include cycle detectedI003 blank include pathI004 parent path traversal not allowedI005 included shader file not foundI006 failed to read included shader fileZip errors
Z001 failed to open zip file66. Final checklist before reporting
Before reporting, check:
Can you reproduce it?Did you test /vpfx reload?Did you test /vpfx off?Did you test /vpfx reload builtin?Did you attach latest.log?Did you attach latest-vpfx-error.txt if it exists?Did you attach the pack zip if it is pack-related?Did you include VPFX version?Did you include Minecraft version?Did you include GPU and operating system?Did you explain expected vs actual behavior?A clear report saves time for everyone.
67. Next document
This document covers common loading, validation, shader, target, runtime, and shadow troubleshooting.
The next document should be:
08 - VPFX Pack Publishing GuideThat document should explain:
how to package a VPFX packhow to version ithow to write release noteswhat screenshots to includehow to label experimental packswhat information to include for playershow to submit packs for showcase or community testing