Example #1
0
        public static GalTextureSampler MakeSampler(NvGpu Gpu, NvGpuVmm Vmm, long TscPosition)
        {
            int[] Tsc = ReadWords(Vmm, TscPosition, 8);

            GalTextureWrap AddressU = (GalTextureWrap)((Tsc[0] >> 0) & 7);
            GalTextureWrap AddressV = (GalTextureWrap)((Tsc[0] >> 3) & 7);
            GalTextureWrap AddressP = (GalTextureWrap)((Tsc[0] >> 6) & 7);

            GalTextureFilter    MagFilter = (GalTextureFilter)((Tsc[1] >> 0) & 3);
            GalTextureFilter    MinFilter = (GalTextureFilter)((Tsc[1] >> 4) & 3);
            GalTextureMipFilter MipFilter = (GalTextureMipFilter)((Tsc[1] >> 6) & 3);

            GalColorF BorderColor = new GalColorF(
                BitConverter.Int32BitsToSingle(Tsc[4]),
                BitConverter.Int32BitsToSingle(Tsc[5]),
                BitConverter.Int32BitsToSingle(Tsc[6]),
                BitConverter.Int32BitsToSingle(Tsc[7]));

            return(new GalTextureSampler(
                       AddressU,
                       AddressV,
                       AddressP,
                       MinFilter,
                       MagFilter,
                       MipFilter,
                       BorderColor));
        }
Example #2
0
        public static GalTextureSampler MakeSampler(NvGpu gpu, NvGpuVmm vmm, long tscPosition)
        {
            int[] tsc = ReadWords(vmm, tscPosition, 8);

            GalTextureWrap addressU = (GalTextureWrap)((tsc[0] >> 0) & 7);
            GalTextureWrap addressV = (GalTextureWrap)((tsc[0] >> 3) & 7);
            GalTextureWrap addressP = (GalTextureWrap)((tsc[0] >> 6) & 7);

            bool depthCompare = ((tsc[0] >> 9) & 1) == 1;

            DepthCompareFunc depthCompareFunc = (DepthCompareFunc)((tsc[0] >> 10) & 7);

            GalTextureFilter    magFilter = (GalTextureFilter)((tsc[1] >> 0) & 3);
            GalTextureFilter    minFilter = (GalTextureFilter)((tsc[1] >> 4) & 3);
            GalTextureMipFilter mipFilter = (GalTextureMipFilter)((tsc[1] >> 6) & 3);

            GalColorF borderColor = new GalColorF(
                BitConverter.Int32BitsToSingle(tsc[4]),
                BitConverter.Int32BitsToSingle(tsc[5]),
                BitConverter.Int32BitsToSingle(tsc[6]),
                BitConverter.Int32BitsToSingle(tsc[7]));

            return(new GalTextureSampler(
                       addressU,
                       addressV,
                       addressP,
                       minFilter,
                       magFilter,
                       mipFilter,
                       borderColor,
                       depthCompare,
                       depthCompareFunc));
        }
Example #3
0
 public GalTextureSampler(
     GalTextureWrap AddressU,
     GalTextureWrap AddressV,
     GalTextureWrap AddressP,
     GalTextureFilter MinFilter,
     GalTextureFilter MagFilter,
     GalTextureMipFilter MipFilter,
     GalColorF BorderColor)
 {
     this.AddressU    = AddressU;
     this.AddressV    = AddressV;
     this.AddressP    = AddressP;
     this.MinFilter   = MinFilter;
     this.MagFilter   = MagFilter;
     this.MipFilter   = MipFilter;
     this.BorderColor = BorderColor;
 }
Example #4
0
        public static TextureWrapMode GetTextureWrapMode(GalTextureWrap wrap)
        {
            switch (wrap)
            {
            case GalTextureWrap.Repeat:         return(TextureWrapMode.Repeat);

            case GalTextureWrap.MirroredRepeat: return(TextureWrapMode.MirroredRepeat);

            case GalTextureWrap.ClampToEdge:    return(TextureWrapMode.ClampToEdge);

            case GalTextureWrap.ClampToBorder:  return(TextureWrapMode.ClampToBorder);

            case GalTextureWrap.Clamp:          return(TextureWrapMode.Clamp);
            }

            if (OglExtension.TextureMirrorClamp)
            {
                switch (wrap)
                {
                case GalTextureWrap.MirrorClampToEdge:   return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt);

                case GalTextureWrap.MirrorClampToBorder: return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt);

                case GalTextureWrap.MirrorClamp:         return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt);
                }
            }
            else
            {
                //Fallback to non-mirrored clamps
                switch (wrap)
                {
                case GalTextureWrap.MirrorClampToEdge:   return(TextureWrapMode.ClampToEdge);

                case GalTextureWrap.MirrorClampToBorder: return(TextureWrapMode.ClampToBorder);

                case GalTextureWrap.MirrorClamp:         return(TextureWrapMode.Clamp);
                }
            }

            throw new ArgumentException(nameof(wrap) + " \"" + wrap + "\" is not valid!");
        }
Example #5
0
        public static TextureWrapMode GetTextureWrapMode(GalTextureWrap Wrap)
        {
            switch (Wrap)
            {
            case GalTextureWrap.Repeat:         return(TextureWrapMode.Repeat);

            case GalTextureWrap.MirroredRepeat: return(TextureWrapMode.MirroredRepeat);

            case GalTextureWrap.ClampToEdge:    return(TextureWrapMode.ClampToEdge);

            case GalTextureWrap.ClampToBorder:  return(TextureWrapMode.ClampToBorder);

            case GalTextureWrap.Clamp:          return(TextureWrapMode.Clamp);
            }

            if (OGLExtension.HasTextureMirrorClamp())
            {
                switch (Wrap)
                {
                case GalTextureWrap.MirrorClampToEdge:   return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt);

                case GalTextureWrap.MirrorClampToBorder: return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt);

                case GalTextureWrap.MirrorClamp:         return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt);
                }
            }
            else
            {
                //Fallback to non-mirrored clamps
                switch (Wrap)
                {
                case GalTextureWrap.MirrorClampToEdge:   return(TextureWrapMode.ClampToEdge);

                case GalTextureWrap.MirrorClampToBorder: return(TextureWrapMode.ClampToBorder);

                case GalTextureWrap.MirrorClamp:         return(TextureWrapMode.Clamp);
                }
            }

            throw new ArgumentException(nameof(Wrap));
        }
Example #6
0
        public GalTextureSampler(
            GalTextureWrap addressU,
            GalTextureWrap addressV,
            GalTextureWrap addressP,
            GalTextureFilter minFilter,
            GalTextureFilter magFilter,
            GalTextureMipFilter mipFilter,
            GalColorF borderColor,
            bool depthCompare,
            DepthCompareFunc depthCompareFunc)
        {
            AddressU    = addressU;
            AddressV    = addressV;
            AddressP    = addressP;
            MinFilter   = minFilter;
            MagFilter   = magFilter;
            MipFilter   = mipFilter;
            BorderColor = borderColor;

            DepthCompare     = depthCompare;
            DepthCompareFunc = depthCompareFunc;
        }
Example #7
0
        public static TextureWrapMode GetTextureWrapMode(GalTextureWrap Wrap)
        {
            switch (Wrap)
            {
            case GalTextureWrap.Repeat:              return(TextureWrapMode.Repeat);

            case GalTextureWrap.MirroredRepeat:      return(TextureWrapMode.MirroredRepeat);

            case GalTextureWrap.ClampToEdge:         return(TextureWrapMode.ClampToEdge);

            case GalTextureWrap.ClampToBorder:       return(TextureWrapMode.ClampToBorder);

            case GalTextureWrap.Clamp:               return(TextureWrapMode.Clamp);

            //TODO: Those needs extensions (and are currently wrong).
            case GalTextureWrap.MirrorClampToEdge:   return(TextureWrapMode.ClampToEdge);

            case GalTextureWrap.MirrorClampToBorder: return(TextureWrapMode.ClampToBorder);

            case GalTextureWrap.MirrorClamp:         return(TextureWrapMode.Clamp);
            }

            throw new ArgumentException(nameof(Wrap));
        }