in src/webgpu/shader/execution/memory_model/memory_model_setup.ts [708:765]
protected async setStressParams(): Promise<void> {
await this.buffers.stressParams.srcBuf.mapAsync(GPUMapMode.WRITE);
const stressParamsArrayBuffer = this.buffers.stressParams.srcBuf.getMappedRange();
const stressParamsArray = new Uint32Array(stressParamsArrayBuffer);
if (this.getRandomInt(100) < this.params.barrierPct) {
stressParamsArray[barrierParamIndex] = 1;
} else {
stressParamsArray[barrierParamIndex] = 0;
}
if (this.getRandomInt(100) < this.params.memStressPct) {
stressParamsArray[memStressIndex] = 1;
} else {
stressParamsArray[memStressIndex] = 0;
}
stressParamsArray[memStressIterationsIndex] = this.params.memStressIterations;
const memStressStoreFirst = this.getRandomInt(100) < this.params.memStressStoreFirstPct;
const memStressStoreSecond = this.getRandomInt(100) < this.params.memStressStoreSecondPct;
let memStressPattern;
if (memStressStoreFirst && memStressStoreSecond) {
memStressPattern = 0;
} else if (memStressStoreFirst && !memStressStoreSecond) {
memStressPattern = 1;
} else if (!memStressStoreFirst && memStressStoreSecond) {
memStressPattern = 2;
} else {
memStressPattern = 3;
}
stressParamsArray[memStressPatternIndex] = memStressPattern;
if (this.getRandomInt(100) < this.params.preStressPct) {
stressParamsArray[preStressIndex] = 1;
} else {
stressParamsArray[preStressIndex] = 0;
}
stressParamsArray[preStressIterationsIndex] = this.params.preStressIterations;
const preStressStoreFirst = this.getRandomInt(100) < this.params.preStressStoreFirstPct;
const preStressStoreSecond = this.getRandomInt(100) < this.params.preStressStoreSecondPct;
let preStressPattern;
if (preStressStoreFirst && preStressStoreSecond) {
preStressPattern = 0;
} else if (preStressStoreFirst && !preStressStoreSecond) {
preStressPattern = 1;
} else if (!preStressStoreFirst && preStressStoreSecond) {
preStressPattern = 2;
} else {
preStressPattern = 3;
}
stressParamsArray[preStressPatternIndex] = preStressPattern;
stressParamsArray[permuteFirstIndex] = this.params.permuteFirst;
stressParamsArray[permuteSecondIndex] = this.params.permuteSecond;
stressParamsArray[testingWorkgroupsIndex] = this.params.testingWorkgroups;
stressParamsArray[memStrideIndex] = this.params.memStride;
if (this.params.aliasedMemory) {
stressParamsArray[memLocationOffsetIndex] = 0;
} else {
stressParamsArray[memLocationOffsetIndex] = this.params.memStride;
}
this.buffers.stressParams.srcBuf.unmap();
}