#!amber # Copyright 2020 The Amber Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. SHADER vertex vtex_shader_uniform GLSL #version 430 layout(location = 0) in vec4 position; layout(location = 0) out vec4 frag_color; layout(set = 0, binding = 0) readonly uniform block0 { vec4 in_color; }; void main() { gl_Position = position; frag_color = in_color; } END SHADER vertex vtex_shader_storage GLSL #version 430 layout(location = 0) in vec4 position; layout(location = 0) out vec4 frag_color; layout(set = 0, binding = 1) readonly buffer block0 { vec4 in_color; }; void main() { gl_Position = position; frag_color = in_color; } END SHADER fragment frag_shader GLSL #version 430 layout(location = 0) in vec4 frag_color; layout(location = 0) out vec4 final_color; void main() { final_color = frag_color; } END # The Vulkan spec lists the maximum value of minStorageBufferOffsetAlignment # (i.e. the maximum possible alignment requirement) as 256 bytes. # Meaningful data is placed at this offset. BUFFER buf DATA_TYPE vec4 DATA 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 END BUFFER framebuffer FORMAT B8G8R8A8_UNORM PIPELINE graphics pipeline0 ATTACH vtex_shader_uniform ATTACH frag_shader # Using the maximum possible required offset alignment of 256 bytes to support all implementations. BIND BUFFER buf AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 256 BIND BUFFER framebuffer AS color LOCATION 0 FRAMEBUFFER_SIZE 256 256 END PIPELINE graphics pipeline1 ATTACH vtex_shader_storage ATTACH frag_shader # Using the maximum possible required offset alignment of 256 bytes to support all implementations. BIND BUFFER buf AS storage_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 512 BIND BUFFER framebuffer AS color LOCATION 0 FRAMEBUFFER_SIZE 256 256 END CLEAR_COLOR pipeline0 0 0 0 255 CLEAR pipeline0 RUN pipeline0 DRAW_RECT POS 0 0 SIZE 128 128 RUN pipeline1 DRAW_RECT POS 128 128 SIZE 128 128 EXPECT framebuffer IDX 0 0 SIZE 128 128 EQ_RGBA 0 255 0 255 EXPECT framebuffer IDX 128 0 SIZE 128 128 EQ_RGBA 0 0 0 255 EXPECT framebuffer IDX 128 128 SIZE 128 128 EQ_RGBA 0 0 255 255 EXPECT framebuffer IDX 0 128 SIZE 128 128 EQ_RGBA 0 0 0 255