1#!amber 2# Copyright 2021 Google LLC 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16SHADER compute compute_shader GLSL 17#version 450 18layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; 19 20layout(binding = 0) buffer block0 21{ 22 int data; 23} ssbo_array[20]; 24 25void main() 26{ 27 // Zero constants 28 int ival = ssbo_array[0].data; 29 float val = float(ival); 30 31 // int div 32 ssbo_array[1].data = 7 / ival; 33 // float div 34 ssbo_array[2].data = int(7.0 / val); 35 // normalize float 36 ssbo_array[3].data = int(normalize(val)); 37 // normalize vec2 38 ssbo_array[4].data = int(normalize(vec2(val))[ival]); 39 // normalize vec3 40 ssbo_array[5].data = int(normalize(vec3(val))[ival]); 41 // normalize vec4 42 ssbo_array[6].data = int(normalize(vec4(val))[ival]); 43 // integer mod 44 ssbo_array[7].data = 7 % ival; 45 // float mod 46 ssbo_array[8].data = int(mod(7.0, val)); 47 // vec2 mod 48 ssbo_array[9].data = int(mod(vec2(7.0), vec2(val))[ival]); 49 // vec3 mod 50 ssbo_array[10].data = int(mod(vec3(7.0), vec3(val))[ival]); 51 // vec4 mod 52 ssbo_array[11].data = int(mod(vec4(7.0), vec4(val))[ival]); 53 // float smoothstep 54 ssbo_array[12].data = int(smoothstep(val, val, 0.3)); 55 // vec2 smoothstep 56 ssbo_array[13].data = int(smoothstep(vec2(val), vec2(val), vec2(0.3))[ival]); 57 // vec3 smoothstep 58 ssbo_array[14].data = int(smoothstep(vec3(val), vec3(val), vec3(0.3))[ival]); 59 // vec4 smoothstep 60 ssbo_array[15].data = int(smoothstep(vec4(val), vec4(val), vec4(0.3))[ival]); 61 // float atan2 62 ssbo_array[16].data = int(atan(7.0, val)); 63 // vec2 atan2 64 ssbo_array[17].data = int(atan(vec2(7.0), vec2(val))[ival]); 65 // vec3 atan2 66 ssbo_array[18].data = int(atan(vec3(7.0), vec3(val))[ival]); 67 // vec4 atan2 68 ssbo_array[19].data = int(atan(vec4(7.0), vec4(val))[ival]); 69 70 // Known good value 71 ssbo_array[0].data = 42; 72} 73END 74 75BUFFER buf0 DATA_TYPE int32 DATA 760 77END 78BUFFER buf1 DATA_TYPE int32 DATA 790 80END 81BUFFER buf2 DATA_TYPE int32 DATA 820 83END 84BUFFER buf3 DATA_TYPE int32 DATA 850 86END 87BUFFER buf4 DATA_TYPE int32 DATA 880 89END 90BUFFER buf5 DATA_TYPE int32 DATA 910 92END 93BUFFER buf6 DATA_TYPE int32 DATA 940 95END 96BUFFER buf7 DATA_TYPE int32 DATA 970 98END 99BUFFER buf8 DATA_TYPE int32 DATA 1000 101END 102BUFFER buf9 DATA_TYPE int32 DATA 1030 104END 105BUFFER buf10 DATA_TYPE int32 DATA 1060 107END 108BUFFER buf11 DATA_TYPE int32 DATA 1090 110END 111BUFFER buf12 DATA_TYPE int32 DATA 1120 113END 114BUFFER buf13 DATA_TYPE int32 DATA 1150 116END 117BUFFER buf14 DATA_TYPE int32 DATA 1180 119END 120BUFFER buf15 DATA_TYPE int32 DATA 1210 122END 123BUFFER buf16 DATA_TYPE int32 DATA 1240 125END 126BUFFER buf17 DATA_TYPE int32 DATA 1270 128END 129BUFFER buf18 DATA_TYPE int32 DATA 1300 131END 132BUFFER buf19 DATA_TYPE int32 DATA 1330 134END 135 136PIPELINE compute pipeline 137 ATTACH compute_shader 138 139 BIND BUFFER_ARRAY buf0 buf1 buf2 buf3 buf4 buf5 buf6 buf7 buf8 buf9 buf10 buf11 buf12 buf13 buf14 buf15 buf16 buf17 buf18 buf19 AS storage DESCRIPTOR_SET 0 BINDING 0 140END 141 142RUN pipeline 1 1 1 143 144EXPECT buf0 IDX 0 EQ 42 145