Merge branch 'main' of https://github.com/armory3d/armortools into main
This commit is contained in:
@@ -4,10 +4,10 @@ function make_brush_run(kong: node_shader_t) {
|
||||
node_shader_write_frag(kong, "var dist: float = 0.0;");
|
||||
|
||||
if (config_raw.brush_3d) {
|
||||
node_shader_write_frag(kong, "var depth: float = sample_lod(gbufferD, sampler_linear, inp.xy, 0.0).r;");
|
||||
node_shader_write_frag(kong, "var depth: float = sample_lod(gbufferD, sampler_linear, constants.inp.xy, 0.0).r;");
|
||||
|
||||
node_shader_add_constant(kong, "invVP: float4x4", "_inv_view_proj_matrix");
|
||||
node_shader_write_frag(kong, "var winp: float4 = float4(float2(inp.x, 1.0 - inp.y) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "var winp: float4 = float4(float2(constants.inp.x, 1.0 - constants.inp.y) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "winp = constants.invVP * winp;");
|
||||
node_shader_write_frag(kong, "winp.xyz /= winp.w;");
|
||||
|
||||
|
||||
@@ -41,7 +41,8 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
let lid: i32 = project_layers[0].id;
|
||||
node_shader_add_texture(kong, "texpaint_vert", "_texpaint_vert" + lid);
|
||||
node_shader_add_constant(kong, "texpaint_vert_size: float2", "_size(_texpaint_vert" + lid + ")");
|
||||
node_shader_write_vert(kong, "var meshpos: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(vertex_id() % constants.texpaint_vert_size.x, vertex_id() / constants.texpaint_vert_size.y), 0).xyz;");
|
||||
// node_shader_write_vert(kong, "var meshpos: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(vertex_id() % constants.texpaint_vert_size.x, vertex_id() / constants.texpaint_vert_size.y), 0.0).xyz;");
|
||||
node_shader_write_vert(kong, "var meshpos: float3 = texpaint_vert[uint2(vertex_id() % constants.texpaint_vert_size.x, vertex_id() / constants.texpaint_vert_size.y)].xyz;");
|
||||
// + input.pos.xyz * 0.000001
|
||||
node_shader_write_vert(kong, "output.pos = constants.WVP * float4(meshpos.xyz, 1.0);");
|
||||
|
||||
@@ -56,9 +57,12 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
node_shader_write_attrib_vert(kong, "var base_vertex0: int = vertex_id() - (vertex_id() % float(3));");
|
||||
node_shader_write_attrib_vert(kong, "var base_vertex1: int = base_vertex0 + 1;");
|
||||
node_shader_write_attrib_vert(kong, "var base_vertex2: int = base_vertex0 + 2;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos0: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex0 % constants.texpaint_vert_size.x, base_vertex0 / constants.texpaint_vert_size.y), 0).xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos1: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex1 % constants.texpaint_vert_size.x, base_vertex1 / constants.texpaint_vert_size.y), 0).xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos2: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex2 % constants.texpaint_vert_size.x, base_vertex2 / constants.texpaint_vert_size.y), 0).xyz;");
|
||||
// node_shader_write_attrib_vert(kong, "var meshpos0: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex0 % constants.texpaint_vert_size.x, base_vertex0 / constants.texpaint_vert_size.y), 0.0).xyz;");
|
||||
// node_shader_write_attrib_vert(kong, "var meshpos1: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex1 % constants.texpaint_vert_size.x, base_vertex1 / constants.texpaint_vert_size.y), 0.0).xyz;");
|
||||
// node_shader_write_attrib_vert(kong, "var meshpos2: float3 = sample_lod(texpaint_vert, sampler_linear, uint2(base_vertex2 % constants.texpaint_vert_size.x, base_vertex2 / constants.texpaint_vert_size.y), 0.0).xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos0: float3 = texpaint_vert[uint2(base_vertex0 % constants.texpaint_vert_size.x, base_vertex0 / constants.texpaint_vert_size.y)].xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos1: float3 = texpaint_vert[uint2(base_vertex1 % constants.texpaint_vert_size.x, base_vertex1 / constants.texpaint_vert_size.y)].xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshpos2: float3 = texpaint_vert[uint2(base_vertex2 % constants.texpaint_vert_size.x, base_vertex2 / constants.texpaint_vert_size.y)].xyz;");
|
||||
node_shader_write_attrib_vert(kong, "var meshnor: float3 = normalize(cross(meshpos2 - meshpos1, meshpos0 - meshpos1));");
|
||||
node_shader_write_attrib_vert(kong, "output.wnormal = constants.N * meshnor;");
|
||||
node_shader_write_attrib_frag(kong, "var n: float3 = normalize(input.wnormal);");
|
||||
|
||||
@@ -4221,9 +4221,9 @@ static void h264e_denoise_run_neon(unsigned char *frm, unsigned char *frmprev, i
|
||||
|
||||
vgd = vsubq_s16(vdupq_n_s16(127), vcls);
|
||||
|
||||
// same as above
|
||||
// same as above
|
||||
vt = vaddq_s16(vreinterpretq_s16_u16(vneighbourhood), vdupq_n_s16(1));
|
||||
|
||||
|
||||
vt = vqshlq_n_s16(vt, 7);
|
||||
vcls = vclsq_s16(vt);
|
||||
vt = vshlq_s16(vt, vcls);
|
||||
@@ -4267,7 +4267,7 @@ static void h264e_denoise_run_neon(unsigned char *frm, unsigned char *frmprev, i
|
||||
vpr1 = vmlal_u16(vpr1, vget_high_u16(vf0w), vget_high_u16(vg));
|
||||
|
||||
vst1_u8(pp - stride_frmprev, vmovn_u16(vcombine_u16(vrshrn_n_u32(vpr0, 16), vrshrn_n_u32(vpr1, 16))));
|
||||
}
|
||||
}
|
||||
|
||||
while (cloop--)
|
||||
{
|
||||
@@ -4279,11 +4279,11 @@ static void h264e_denoise_run_neon(unsigned char *frm, unsigned char *frmprev, i
|
||||
neighbourhood += pf[-stride_frm] - pp[-stride_frmprev];
|
||||
neighbourhood += pf[+stride_frm] - pp[+stride_frmprev];
|
||||
|
||||
if (d < 0)
|
||||
if (d < 0)
|
||||
{
|
||||
d = -d;
|
||||
}
|
||||
if (neighbourhood < 0)
|
||||
if (neighbourhood < 0)
|
||||
{
|
||||
neighbourhood = -neighbourhood;
|
||||
}
|
||||
@@ -4293,7 +4293,7 @@ static void h264e_denoise_run_neon(unsigned char *frm, unsigned char *frmprev, i
|
||||
gn = g_diff_to_gainQ8[neighbourhood];
|
||||
|
||||
gn <<= 2;
|
||||
if (gn > 255)
|
||||
if (gn > 255)
|
||||
{
|
||||
gn = 255;
|
||||
}
|
||||
@@ -4305,16 +4305,16 @@ static void h264e_denoise_run_neon(unsigned char *frm, unsigned char *frmprev, i
|
||||
//out_val = ((pp[0]*g ) >> 16) + (((0xffff-g)*pf[0] ) >> 16);
|
||||
//out_val = ((pp[0]*g + (1<<15)) >> 16) + (((0xffff-g)*pf[0] + (1<<15)) >> 16);
|
||||
out_val = (pp[0]*g + (0xffff - g)*pf[0] + (1 << 15)) >> 16;
|
||||
|
||||
|
||||
assert(out_val <= 255);
|
||||
|
||||
|
||||
pp[-stride_frmprev] = (unsigned char)out_val;
|
||||
//pp[-stride_frmprev] = gn;
|
||||
//pp[-stride_frmprev] = neighbourhood;
|
||||
//pp[-stride_frmprev] = pp[0];
|
||||
|
||||
pf++, pp++;
|
||||
}
|
||||
}
|
||||
|
||||
pp[-stride_frmprev] = *pf++;
|
||||
} while(--h);
|
||||
@@ -4393,15 +4393,15 @@ static uint8x16_t intra_predict_dc16_neon(const pix_t *left, const pix_t *top)
|
||||
* L2 xx xx xx xx
|
||||
* L3 xx xx xx xx
|
||||
*/
|
||||
#define UL edge[-1]
|
||||
#define U0 edge[0]
|
||||
#define T1 edge[1]
|
||||
#define U2 edge[2]
|
||||
#define U3 edge[3]
|
||||
#define U4 edge[4]
|
||||
#define U5 edge[5]
|
||||
#define U6 edge[6]
|
||||
#define U7 edge[7]
|
||||
#define UL edge[-1]
|
||||
#define U0 edge[0]
|
||||
#define T1 edge[1]
|
||||
#define U2 edge[2]
|
||||
#define U3 edge[3]
|
||||
#define U4 edge[4]
|
||||
#define U5 edge[5]
|
||||
#define U6 edge[6]
|
||||
#define U7 edge[7]
|
||||
#define L0 edge[-2]
|
||||
#define L1 edge[-3]
|
||||
#define L2 edge[-4]
|
||||
@@ -4462,7 +4462,7 @@ static void h264e_intra_predict_chroma_neon(pix_t *predict, const pix_t *left, c
|
||||
vst1q_u32(d, v); d += 4;
|
||||
} else if (mode == 1)
|
||||
{
|
||||
do
|
||||
do
|
||||
{
|
||||
v = vreinterpretq_u32_u8(vcombine_u8(vdup_n_u8(left[0]), vdup_n_u8(left[8])));
|
||||
vst1q_u32(d, v); d += 4;
|
||||
@@ -4534,8 +4534,8 @@ static int h264e_intra_choose_4x4_neon(const pix_t *blockin, pix_t *blockpred, i
|
||||
vx = vdupq_n_u8(intra_predict_dc4_neon((avail & AVAIL_L) ? &L3 : 0, (avail & AVAIL_T) ? &U0 : 0));
|
||||
|
||||
best_sad = vsad_neon(vx, vr);
|
||||
if (2 != mpred)
|
||||
{
|
||||
if (2 != mpred)
|
||||
{
|
||||
best_sad += penalty;
|
||||
}
|
||||
vpred = vx;
|
||||
@@ -4560,14 +4560,14 @@ static int h264e_intra_choose_4x4_neon(const pix_t *blockin, pix_t *blockpred, i
|
||||
d2 = vext_u8(vget_low_u8(vx), vget_low_u8(vx), 2);
|
||||
d3 = vext_u8(vget_low_u8(vx), vget_low_u8(vx), 3);
|
||||
vx = vreinterpretq_u8_u32(vcombine_u32(
|
||||
t2 = vzip_u32(vreinterpret_u32_u8(vget_low_u8(vx)), vreinterpret_u32_u8(vget_low_u8(v1))).val[0],
|
||||
t2 = vzip_u32(vreinterpret_u32_u8(vget_low_u8(vx)), vreinterpret_u32_u8(vget_low_u8(v1))).val[0],
|
||||
vzip_u32(vreinterpret_u32_u8(d2), vreinterpret_u32_u8(d3)).val[0]));
|
||||
VTEST(3);
|
||||
|
||||
vx = vt;
|
||||
vx = vrhaddq_u8(vextq_u8(vt, vt, 5), vextq_u8(vt, vt, 6));
|
||||
vx = vreinterpretq_u8_u32(vzipq_u32(vreinterpretq_u32_u8(vx), vreinterpretq_u32_u8(vextq_u8(vx, vx, 1))).val[0]);
|
||||
vx = vreinterpretq_u8_u32(vzipq_u32(vreinterpretq_u32_u8(vx),
|
||||
vx = vreinterpretq_u8_u32(vzipq_u32(vreinterpretq_u32_u8(vx),
|
||||
vreinterpretq_u32_u8(vcombine_u8(vreinterpret_u8_u32(t2), vget_high_u8(vextq_u8(vt, vt, 7))))).val[0]);
|
||||
|
||||
VTEST(7);
|
||||
@@ -4589,7 +4589,7 @@ static int h264e_intra_choose_4x4_neon(const pix_t *blockin, pix_t *blockpred, i
|
||||
v2 = vreinterpretq_u8_u16(vsetq_lane_u16(tmp, vreinterpretq_u16_u8(v2), 2));
|
||||
v8 = vreinterpretq_u8_u16(vsetq_lane_u16(tmp, vreinterpretq_u16_u8(v8), 4));
|
||||
v9 = vextq_u8(v2, v2, 14);
|
||||
v9 = vzipq_u8(v9, vhaddq_u8(v9, v2)).val[0];
|
||||
v9 = vzipq_u8(v9, vhaddq_u8(v9, v2)).val[0];
|
||||
v9 = vrhaddq_u8(v9, vextq_u8(v8, v8, 14));
|
||||
tmp |= tmp << 16;
|
||||
vx = vreinterpretq_u8_u32(vzipq_u32(vreinterpretq_u32_u8(vextq_u8(v9, v9, 4)),
|
||||
@@ -4671,10 +4671,10 @@ static void copy_wh_neon(const uint8_t *src, int src_stride, uint8_t *h264e_rest
|
||||
v2 = vld1q_u8(src); src += src_stride;
|
||||
v3 = vld1q_u8(src); src += src_stride;
|
||||
|
||||
vst1q_u8(dst, v0); dst += 16;
|
||||
vst1q_u8(dst, v1); dst += 16;
|
||||
vst1q_u8(dst, v2); dst += 16;
|
||||
vst1q_u8(dst, v3); dst += 16;
|
||||
vst1q_u8(dst, v0); dst += 16;
|
||||
vst1q_u8(dst, v1); dst += 16;
|
||||
vst1q_u8(dst, v2); dst += 16;
|
||||
vst1q_u8(dst, v3); dst += 16;
|
||||
} while (h -= 4);
|
||||
}
|
||||
}
|
||||
@@ -5092,21 +5092,21 @@ static int h264e_sad_mb_unlaign_8x8_neon(const pix_t *a, int a_stride, const pix
|
||||
do
|
||||
{
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabdl_u8( vget_low_u8(va), vget_low_u8(vb)); s1 = vabdl_u8( vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabdl_u8( vget_low_u8(va), vget_low_u8(vb)); s1 = vabdl_u8( vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
{
|
||||
uint32x4_t v0 = vpaddlq_u16(s0);
|
||||
uint64x2_t v1 = vpaddlq_u32(v0);
|
||||
@@ -5130,21 +5130,21 @@ static int h264e_sad_mb_unlaign_wh_neon(const pix_t *a, int a_stride, const pix_
|
||||
do
|
||||
{
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabdl_u8( vget_low_u8(va), vget_low_u8(vb)); s1 = vabdl_u8( vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabdl_u8( vget_low_u8(va), vget_low_u8(vb)); s1 = vabdl_u8( vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
va = vld1q_u8(a), vb = vld1q_u8(b); a += a_stride, b += 16;
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
s0 = vabal_u8(s0, vget_low_u8(va), vget_low_u8(vb)); s1 = vabal_u8(s1, vget_high_u8(va), vget_high_u8(vb));
|
||||
|
||||
uint32x4_t v0 = vpaddlq_u16(s0);
|
||||
uint64x2_t v1 = vpaddlq_u32(v0);
|
||||
@@ -5596,16 +5596,18 @@ static int quantize_neon(quant_t *q, int mode, const uint16_t *qdat, int zmask)
|
||||
q9 = vld1q_u8(iscan16_neon + 16);
|
||||
|
||||
{
|
||||
////
|
||||
// vtbl4_u8 is marked unavailable for iOS arm64, use wider versions there.
|
||||
#if defined(__APPLE__) && defined(__aarch64__) && defined(__apple_build_version__)
|
||||
uint8x16x2_t vlut;
|
||||
vlut.val[0] = vreinterpretq_u8_s16(vcombine_s16(d22, d23));
|
||||
vlut.val[1] = vreinterpretq_u8_s16(vcombine_s16(d24, d25));
|
||||
vst1_s16(q->qv + 0, d4 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_low_u8(q8))));
|
||||
vst1_s16(q->qv + 4, d5 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_high_u8(q8))));
|
||||
vst1_s16(q->qv + 8, d6 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_low_u8(q9))));
|
||||
vst1_s16(q->qv +12, d7 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_high_u8(q9))));
|
||||
#else
|
||||
// #if defined(__APPLE__) && defined(__aarch64__) && defined(__apple_build_version__)
|
||||
// uint8x16x2_t vlut;
|
||||
// vlut.val[0] = vreinterpretq_u8_s16(vcombine_s16(d22, d23));
|
||||
// vlut.val[1] = vreinterpretq_u8_s16(vcombine_s16(d24, d25));
|
||||
// vst1_s16(q->qv + 0, d4 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_low_u8(q8))));
|
||||
// vst1_s16(q->qv + 4, d5 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_high_u8(q8))));
|
||||
// vst1_s16(q->qv + 8, d6 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_low_u8(q9))));
|
||||
// vst1_s16(q->qv +12, d7 = vreinterpret_s16_u8(vtbl2q_u8(vlut, vget_high_u8(q9))));
|
||||
// #else
|
||||
////
|
||||
uint8x8x4_t vlut;
|
||||
vlut.val[0] = vreinterpret_u8_s16(d22);
|
||||
vlut.val[1] = vreinterpret_u8_s16(d23);
|
||||
@@ -5615,7 +5617,9 @@ static int quantize_neon(quant_t *q, int mode, const uint16_t *qdat, int zmask)
|
||||
vst1_s16(q->qv + 4, d5 = vreinterpret_s16_u8(vtbl4_u8(vlut, vget_high_u8(q8))));
|
||||
vst1_s16(q->qv + 8, d6 = vreinterpret_s16_u8(vtbl4_u8(vlut, vget_low_u8(q9))));
|
||||
vst1_s16(q->qv +12, d7 = vreinterpret_s16_u8(vtbl4_u8(vlut, vget_high_u8(q9))));
|
||||
#endif
|
||||
////
|
||||
// #endif
|
||||
////
|
||||
}
|
||||
{
|
||||
uint16x8_t bm0 = vld1q_u16(imask16_neon);
|
||||
|
||||
Reference in New Issue
Block a user