From cd81083acb98174f834b61d6252caa28797b846f Mon Sep 17 00:00:00 2001 From: Jakub Stachurski Date: Sun, 8 Mar 2026 12:38:11 +0100 Subject: Get rid of redundant copies in shader. --- src/shader_own.wgsl | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/shader_own.wgsl b/src/shader_own.wgsl index 453e2cf..5645629 100644 --- a/src/shader_own.wgsl +++ b/src/shader_own.wgsl @@ -1,5 +1,5 @@ struct SHA256_CTX { - data : array, + data : array, bitlen: array, state: array, // info: array, @@ -97,24 +97,20 @@ fn sha256_transform(ctx: ptr) { var h : u32 = (*ctx).state[7]; var t1 : u32; var t2 : u32; - var m: array; - for (var x: u32 = 0; x < 16; x++) { - m[x] = flip_endian((*ctx).data[x]); - } for (var x: u32 = 16; x < 64; x++) { // W_16 = w_0 + sig0(w_1) + w_9 + sig1(w_14) - m[x]= m[x-16] + SIG0(m[x-15]) + m[x-7] + SIG1(m[x-2]); + (*ctx).data[x]= (*ctx).data[x-16] + SIG0((*ctx).data[x-15]) + (*ctx).data[x-7] + SIG1((*ctx).data[x-2]); // if (x >= 16 && x < 24) { // var z = x - 16; - // (*ctx).info[z] = m[x]; + // (*ctx).info[z] = (*ctx).data[x]; // } } for (var x: u32 = 0; x < 64; x++) { - t1 = h + EP1(e) + CH(e, f, g) + k[x] + m[x]; + t1 = h + EP1(e) + CH(e, f, g) + k[x] + (*ctx).data[x]; t2 = EP0(a) + MAJ(a,b,c); h = g; g = f; @@ -124,8 +120,7 @@ fn sha256_transform(ctx: ptr) { c = b; b = a; a = t1 + t2; - - } + } (*ctx).state[0] += a; (*ctx).state[1] += b; @@ -136,11 +131,6 @@ fn sha256_transform(ctx: ptr) { (*ctx).state[6] += g; (*ctx).state[7] += h; - for (var x: u32 = 0; x < 64; x++) { - (*ctx).data[x] = m[x]; - } - - } fn sha256_append_len(ctx: ptr, len: u32) { @@ -156,7 +146,7 @@ fn sha256_update(ctx: ptr, index: u32) { var block_index = 0u; while len > 64 { for (var i : u32 = 0; i < 16; i++) { - (*ctx).data[i] = inputs[index].data[16 * block_index + i]; + (*ctx).data[i] = flip_endian(inputs[index].data[16 * block_index + i]); } sha256_transform(ctx); sha256_append_len(ctx, 512); @@ -164,9 +154,9 @@ fn sha256_update(ctx: ptr, index: u32) { len -= 64; } var imax = len/4; - if (len % 4 > 0) {imax += 1;} + // if (len % 4 > 0) {imax += 1;} for (var i : u32 = 0; i < (imax); i++) { - (*ctx).data[i] = inputs[index].data[16 * block_index + i]; + (*ctx).data[i] = flip_endian(inputs[index].data[16 * block_index + i]); } for(var i = imax; i < 16; i ++) { (*ctx).data[i] = 0; @@ -176,7 +166,7 @@ fn sha256_update(ctx: ptr, index: u32) { var last_word: u32 = (len - offset) / 4; // if (offset == 0) {last_word += 1;} var padding_word: u32 = (0x80u << (8 * offset)); - (*ctx).data[last_word] = ((*ctx).data[last_word] & full_masks[offset]) | padding_word; + (*ctx).data[last_word] = flip_endian((inputs[index].data[16*block_index + last_word] & full_masks[offset]) | padding_word); // for (var i: u32 = 0; i < 8; i++) { // (*ctx).info[i] = (*ctx).data[i]; @@ -194,8 +184,8 @@ fn sha256_update(ctx: ptr, index: u32) { var final_len: u32 = (len*8); sha256_append_len(ctx, final_len); - var upper = flip_endian((*ctx).bitlen[0]); - var lower = flip_endian((*ctx).bitlen[1]); + var upper = (*ctx).bitlen[0]; + var lower = (*ctx).bitlen[1]; (*ctx).data[15] = upper; (*ctx).data[14] = lower; -- cgit v1.3.1