1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci# Copyright 2019 The Amber Authors. 3e5c31af7Sopenharmony_ci# 4e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 5e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 6e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 7e5c31af7Sopenharmony_ci# 8e5c31af7Sopenharmony_ci# https://www.apache.org/licenses/LICENSE-2.0 9e5c31af7Sopenharmony_ci# 10e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 11e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 12e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 14e5c31af7Sopenharmony_ci# limitations under the License. 15e5c31af7Sopenharmony_ci 16e5c31af7Sopenharmony_ciDEVICE_FEATURE fragmentStoresAndAtomics 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ciSHADER vertex vert_shader PASSTHROUGH 19e5c31af7Sopenharmony_ciSHADER fragment frag_shader GLSL 20e5c31af7Sopenharmony_ci#version 430 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_cistruct SubData { 23e5c31af7Sopenharmony_ci int c; 24e5c31af7Sopenharmony_ci float d; 25e5c31af7Sopenharmony_ci}; 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_cilayout(location = 0) out vec4 color_out; 28e5c31af7Sopenharmony_cilayout(std140, binding = 0) readonly buffer InData { 29e5c31af7Sopenharmony_ci float a; 30e5c31af7Sopenharmony_ci int b; 31e5c31af7Sopenharmony_ci SubData e; 32e5c31af7Sopenharmony_ci} in_data; 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_cilayout(std140, binding = 1) writeonly buffer OutData { 35e5c31af7Sopenharmony_ci float a; 36e5c31af7Sopenharmony_ci int b; 37e5c31af7Sopenharmony_ci SubData e; 38e5c31af7Sopenharmony_ci} out_data; 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_civoid main() { 41e5c31af7Sopenharmony_ci color_out = vec4(1, 1, 1, 1); 42e5c31af7Sopenharmony_ci out_data.a = in_data.a; 43e5c31af7Sopenharmony_ci out_data.b = in_data.b; 44e5c31af7Sopenharmony_ci out_data.e.c = in_data.e.c; 45e5c31af7Sopenharmony_ci out_data.e.d = in_data.e.d; 46e5c31af7Sopenharmony_ci} 47e5c31af7Sopenharmony_ciEND 48e5c31af7Sopenharmony_ci 49e5c31af7Sopenharmony_ciSTRUCT sub_data 50e5c31af7Sopenharmony_ci int32 c 51e5c31af7Sopenharmony_ci float d 52e5c31af7Sopenharmony_ciEND 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ciSTRUCT my_data 55e5c31af7Sopenharmony_ci float a 56e5c31af7Sopenharmony_ci int32 b 57e5c31af7Sopenharmony_ci sub_data e 58e5c31af7Sopenharmony_ciEND 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ciBUFFER in_data DATA_TYPE my_data STD140 DATA 61e5c31af7Sopenharmony_ci1.1 # a 62e5c31af7Sopenharmony_ci220 # b 63e5c31af7Sopenharmony_ci1024 # e.c 64e5c31af7Sopenharmony_ci2.4 # e.d 65e5c31af7Sopenharmony_ciEND 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_ciBUFFER out_data DATA_TYPE my_data STD140 SIZE 1 FILL 0 68e5c31af7Sopenharmony_ci 69e5c31af7Sopenharmony_ciBUFFER framebuffer FORMAT B8G8R8A8_UNORM 70e5c31af7Sopenharmony_ci 71e5c31af7Sopenharmony_ciPIPELINE graphics my_pipeline 72e5c31af7Sopenharmony_ci ATTACH vert_shader 73e5c31af7Sopenharmony_ci ATTACH frag_shader 74e5c31af7Sopenharmony_ci 75e5c31af7Sopenharmony_ci BIND BUFFER framebuffer AS color LOCATION 0 76e5c31af7Sopenharmony_ci BIND BUFFER in_data AS storage DESCRIPTOR_SET 0 BINDING 0 77e5c31af7Sopenharmony_ci BIND BUFFER out_data AS storage DESCRIPTOR_SET 0 BINDING 1 78e5c31af7Sopenharmony_ciEND 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ciRUN my_pipeline DRAW_RECT POS 0 0 SIZE 250 250 81e5c31af7Sopenharmony_ciEXPECT out_data EQ_BUFFER in_data 82e5c31af7Sopenharmony_ciEXPECT out_data IDX 0 EQ 1.1 220 1024 2.4 83