Beispiel #1
0
        internal unsafe override void fn(stage_t p, fifo_t output_fifo)
        {
            int i, num_in = p.occupancy, max_num_out = (int)(1 + num_in * p.out_in_ratio);
            int output_offs = output_fifo.reserve(max_num_out);

            fixed(byte *pinput = &p.fifo.data[p.offset], poutput = &output_fifo.data[output_offs])
            {
                double *input  = (double *)pinput;
                double *output = (double *)poutput;

                for (i = 0; (p.at >> 32) < num_in; ++i, p.at += p.step)
                {
                    double *at       = input + (p.at >> 32);
                    uint    fraction = (uint)(p.at & 0xffffffff);
                    int     phase    = (int)(fraction >> (32 - phase_bits));
                    double  x        = (double)(fraction << phase_bits) * (1 / MULT32);
                    double  sum      = 0;
                    for (int j = 0; j < pf.num_coefs; j++)
                    {
                        double a = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 0, j)];
                        double b = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 1, j)];
                        double c = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 2, j)];
                        double d = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 3, j)];
                        sum += (((d * x + c) * x + b) * x + a) * at[j];
                    }
                    output[i] = sum;
                }
                //assert(max_num_out - i >= 0);
                output_fifo.trim_by(max_num_out - i);
                p.fifo.read((int)(p.at >> 32), null);
                p.at &= 0xffffffff;
            }
        }
        internal unsafe override void fn(stage_t p, fifo_t output_fifo)
        {
            int i, num_in = p.occupancy, max_num_out = (int)(1 + num_in * p.out_in_ratio);
            int output_offs = output_fifo.reserve(max_num_out);
            fixed (byte* pinput = &p.fifo.data[p.offset], poutput = &output_fifo.data[output_offs])
            {
                double* input = (double*)pinput;
                double* output = (double*)poutput;

                for (i = 0; (p.at >> 32) < num_in; ++i, p.at += p.step)
                {
                    double* at = input + (p.at >> 32);
                    uint fraction = (uint)(p.at & 0xffffffff);
                    int phase = (int)(fraction >> (32 - phase_bits));
                    double x = (double)(fraction << phase_bits) * (1 / MULT32);
                    double sum = 0;
                    for (int j = 0; j < pf.num_coefs; j++)
                    {
                        double a = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 0, j)];
                        double b = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 1, j)];
                        double c = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 2, j)];
                        double d = p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(COEF_INTERP, pf.num_coefs, phase, 3, j)];
                        sum += (((d * x + c) * x + b) * x + a) * at[j];
                    }
                    output[i] = sum;
                }
                //assert(max_num_out - i >= 0);
                output_fifo.trim_by(max_num_out - i);
                p.fifo.read((int)(p.at >> 32), null);
                p.at &= 0xffffffff;
            }
        }
        internal unsafe override void fn(stage_t p, fifo_t output_fifo)
        {
            int i, num_in = p.occupancy, max_num_out = (int)(1 + num_in * p.out_in_ratio);

            int output_offs = output_fifo.reserve(max_num_out);
            fixed (byte* pinput = &p.fifo.data[p.offset], poutput = &output_fifo.data[output_offs])
            {
                double* input = (double*)pinput;
                double* output = (double*)poutput;

                for (i = 0; (p.at >> 32) < num_in * p.divisor; ++i, p.at += p.step & ~0xffffffffL)
                {
                    int divided = (int)(p.at >> 32) / p.divisor;
                    int divided_rem = (int)(p.at >> 32) % p.divisor;
                    double* at = input + divided;
                    double sum = 0;
                    for (int j = 0; j < pf.num_coefs; j++)
                        sum += (p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(0, pf.num_coefs, divided_rem, 0, j)]) * at[j];
                    output[i] = sum;
                }
                //assert(max_num_out - i >= 0);
                output_fifo.trim_by(max_num_out - i);
                int divided1 = (int)(p.at >> 32) / p.divisor;
                p.fifo.read(divided1, null);
                p.at -= ((long)divided1 * p.divisor) << 32;
            }
        }
Beispiel #4
0
        internal unsafe override void fn(stage_t p, fifo_t output_fifo)
        {
            int i, num_in = p.occupancy, max_num_out = (int)(1 + num_in * p.out_in_ratio);

            int output_offs = output_fifo.reserve(max_num_out);

            fixed(byte *pinput = &p.fifo.data[p.offset], poutput = &output_fifo.data[output_offs])
            {
                double *input  = (double *)pinput;
                double *output = (double *)poutput;

                for (i = 0; (p.at >> 32) < num_in * p.divisor; ++i, p.at += p.step & ~0xffffffffL)
                {
                    int     divided     = (int)(p.at >> 32) / p.divisor;
                    int     divided_rem = (int)(p.at >> 32) % p.divisor;
                    double *at          = input + divided;
                    double  sum         = 0;
                    for (int j = 0; j < pf.num_coefs; j++)
                    {
                        sum += (p.shared.poly_fir_coefs[poly_fir1_t.coef_idx(0, pf.num_coefs, divided_rem, 0, j)]) * at[j];
                    }
                    output[i] = sum;
                }
                //assert(max_num_out - i >= 0);
                output_fifo.trim_by(max_num_out - i);
                int divided1 = (int)(p.at >> 32) / p.divisor;

                p.fifo.read(divided1, null);
                p.at -= ((long)divided1 * p.divisor) << 32;
            }
        }
Beispiel #5
0
        /// <summary>
        /// Shader building
        /// </summary>
        public shader_gl build(shader_t shader, shader_p surface)
        {
            if (shader == null)
            {
                return(null);
            }

            shader_gl glShader = new shader_gl();

            glShader.cull        = translateCull(shader.cull);
            glShader.sort        = shader.sort;
            glShader.sky         = shader.sky;
            glShader.blend       = shader.blend;
            glShader.name        = shader.name;
            glShader.sky_env_map = shader.sky_env_map;
            glShader.stages      = new List <stage_gl>();

            for (int j = 0; j < shader.stages.Count; ++j)
            {
                stage_t  t = shader.stages[j];
                stage_gl s = new stage_gl();

                //s.animFrame = t.animFrame;
                s.animFreq = t.animFreq;
                s.animMaps = t.animMaps;
                //s.animTexture = t.animTexture;
                s.texture   = -1;
                s.blendSrc  = translateBlendSrc(t.blendSrc);
                s.blendDest = translateBlendDest(t.blendDest);
                s.depthFunc = translateDepthFunc(t.depthFunc);
                s.map       = t.map;
                s.tcMods    = t.tcMods;

                s.depthWrite         = t.depthWrite;
                s.isLightmap         = t.isLightmap;
                s.shaderSrc          = t.shaderSrc;
                s.clamp              = t.clamp;
                s.tcGen              = t.tcGen;
                s.rgbGen             = t.rgbGen;
                s.rgbWaveform        = t.rgbWaveform;
                s.alphaGen           = t.alphaGen;
                s.alphaFunc          = t.alphaFunc;
                s.alphaWaveform      = t.alphaWaveform;
                s.hasBlendFunc       = t.hasBlendFunc;
                s.depthWriteOverride = t.depthWriteOverride;
                s.blend              = t.blend;
                s.opaque             = t.opaque;

                glShader.stages.Add(s);
            }

            return(glShader);
        }
 internal abstract void fn(stage_t input, fifo_t output);
Beispiel #7
0
 internal abstract void fn(stage_t input, fifo_t output);