Beispiel #1
0
        public static void Validate(this Validatable validatable, ValidationContext ctx)
        {
            if (validatable == null) return;
            if (ctx == null) Validate(validatable);

            using (ValidationContext.Push(ctx))
            {
                validatable.Validate();
            }
        }
Beispiel #2
0
        public static IDisposable Push(ValidationContext ctx)
        {
            if (Current == ctx)
            {
                return new DisposableAction(() => {});
            }
            else
            {
                _stack.Push(ctx);

                return new DisposableAction(() =>
                {
                    (Current == ctx).AssertTrue();
                    _stack.Pop();
                });
            }
        }
Beispiel #3
0
        public void Validate()
        {
            var ctx = new ValidationContext(this);
            using (ValidationContext.Push(ctx))
            {
                // this is commented out because there's no problem with UnifiedTexturing
                // if the version is prior to PTX_15, corresponding directive just won't be rendered
            //                (UnifiedTexturing == true).AssertImplies(Version >= SoftwareIsa.PTX_15);
                (UnifiedTexturing == false).AssertImplies(Version >= SoftwareIsa.PTX_15);
                (DowngradeDoubles == true).AssertImplies(Target < HardwareIsa.SM_13);

                Comments.ForEach(c => { c.AssertNotNull(); c.Validate(); });
                Pragmas.ForEach(p => { p.AssertNotNull(); p.Validate(); });
                Entries.ForEach(e => { e.AssertNotNull(); e.Validate(); });
                (Entries.Count() == Entries.Select(e => e.Name).Distinct().Count()).AssertTrue();

                Func<TypeName, bool> mentioned_type = t => ctx.Visited.Contains((Type)t);
                if (Target < HardwareIsa.SM_13 && !DowngradeDoubles) mentioned_type(TypeName.F64).AssertFalse();
                if (Version < SoftwareIsa.PTX_15) (mentioned_type(TypeName.Samplerref) || mentioned_type(TypeName.Surfref)).AssertFalse();
                (ctx.VisitedExprs.Where(arg => arg.is_texref()).Count() <= 128).AssertTrue();
                (ctx.VisitedExprs.Where(arg => arg.is_samplerref()).Count() <= (UnifiedTexturing ? 128 : 16)).AssertTrue();
                // todo. what's the max amount of surfaces?
            }
        }