summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Stachurski <j.stachurski@student.utwente.nl>2026-03-08 12:38:11 +0100
committerJakub Stachurski <j.stachurski@student.utwente.nl>2026-03-08 12:38:11 +0100
commitcd81083acb98174f834b61d6252caa28797b846f (patch)
treea52bb11ce52112dce7f908fe8197299651a57fba
parente8a9dcdc8befea9cdfbf28646a607c0c41a1fc98 (diff)
Get rid of redundant copies in shader.
-rw-r--r--src/shader_own.wgsl32
1 files 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<u32, 16>,
+ data : array<u32, 64>,
bitlen: array<u32, 2>,
state: array<u32, 8>,
// info: array<u32, 8>,
@@ -97,24 +97,20 @@ fn sha256_transform(ctx: ptr<function, SHA256_CTX>) {
var h : u32 = (*ctx).state[7];
var t1 : u32;
var t2 : u32;
- var m: array<u32,64>;
- 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<function, SHA256_CTX>) {
c = b;
b = a;
a = t1 + t2;
-
- }
+ }
(*ctx).state[0] += a;
(*ctx).state[1] += b;
@@ -136,11 +131,6 @@ fn sha256_transform(ctx: ptr<function, SHA256_CTX>) {
(*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<function, SHA256_CTX>, len: u32) {
@@ -156,7 +146,7 @@ fn sha256_update(ctx: ptr<function, SHA256_CTX>, 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<function, SHA256_CTX>, 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<function, SHA256_CTX>, 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<function, SHA256_CTX>, 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;