{"record":{"id":"25e40f3fe9949261","repo":"stride3d/stride","slug":"value-radianceprefilteringggxnocompute","errorCode":null,"errorMessage":"value","messagePattern":"value","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGXNoCompute.cs","lineNumber":66,"sourceCode":"            : base(context, \"RadiancePrefilteringGGX\")\n        {\n            shader = new ImageEffectShader(\"RadiancePrefilteringGGXNoComputeEffect\");\n            resampleShader = new ImageEffectShader(\"CubemapFaceResampleShader\");\n            DoNotFilterHighestLevel = true;\n            samplingsCount = 1024;\n        }\n\n        /// <summary>\n        /// Gets or sets the number of sampling used during the importance sampling\n        /// </summary>\n        /// <remarks>Should be a power of 2 and maximum value is 1024</remarks>\n        public int SamplingsCount\n        {\n            get { return samplingsCount; }\n            set\n            {\n                if (value > 1024)\n                    throw new ArgumentOutOfRangeException(nameof(value));\n\n                if (!MathUtil.IsPow2(value))\n                    throw new ArgumentException(\"The provided value should be a power of 2\");\n\n                samplingsCount = Math.Max(1, value);\n            }\n        }\n\n        protected override void DrawCore(RenderDrawContext context)\n        {\n            var output = PrefilteredRadiance;\n            if (output == null || (output.ViewDimension != TextureDimension.Texture2D && output.ViewDimension != TextureDimension.TextureCube) || output.ArraySize != 6)\n                throw new NotSupportedException(\"Only array of 2D textures are currently supported as output\");\n\n            if (!output.IsRenderTarget)\n                throw new NotSupportedException(\"Only render targets are supported as output\");\n\n            var input = RadianceMap;","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGXNoCompute.cs#L48-L84","documentation":"RadiancePrefilteringGGXNoCompute.SamplingsCount setter throws ArgumentOutOfRangeException when the value exceeds 1024. Like the compute variant, the non-compute prefiltering effect supports at most 1024 importance samples per prefiltered mip and rejects larger values to protect the shader's sample loop.","triggerScenarios":"Assigning RadiancePrefilteringGGXNoCompute.SamplingsCount a value > 1024 (e.g. 2048) before rendering.","commonSituations":"Raising sample counts for higher-quality IBL beyond the supported cap; deserializing user settings with unvalidated sample counts; assuming the same limits as other engines' prefilter tools.","solutions":["Set SamplingsCount to a value <= 1024.","Pick a power-of-2 value such as 256 or 512 for quality/perf balance.","Clamp at load time: Math.Min(value, 1024) before assignment."],"exampleFix":"// before\nprefilter.SamplingsCount = 4096;\n// after\nprefilter.SamplingsCount = 1024; // max supported","handlingStrategy":"validation","validationCode":"if (samplings > 1024)\n    throw new ArgumentOutOfRangeException(nameof(samplings), \"Max SamplingsCount is 1024\");\nprefilter.SamplingsCount = samplings;","typeGuard":"bool IsValidSamplingsCount(int v) => v <= 1024 && v >= 1 && (v & (v - 1)) == 0;","tryCatchPattern":"try { prefilter.SamplingsCount = value; }\ncatch (ArgumentOutOfRangeException ex) { Log.Warning(\"SamplingsCount capped at 1024\"); prefilter.SamplingsCount = 1024; }","preventionTips":["Clamp loaded settings to <= 1024 before assignment.","Expose the cap in UI tooltips/docs.","Use the same normalization code for both GGX prefilter variants."],"tags":["rendering","pbr","prefiltering","argument-out-of-range","stride"],"backgroundTag":"value-out-of-range","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}