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; } }
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; } }
/// <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);