1#!amber 2# Copyright 2019 The Amber Authors. 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# https://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 vertex vert_shader PASSTHROUGH 17 18SHADER fragment frag_shader_red GLSL 19#version 430 20layout(location = 0) out vec4 color_out; 21void main() { 22 color_out = vec4(1.0, 0.0, 0.0, 1.0); 23} 24END 25 26SHADER vertex vert_shader_tex GLSL 27#version 430 28layout(location = 0) in vec4 position; 29layout(location = 1) in vec2 texcoords_in; 30layout(location = 0) out vec2 texcoords_out; 31void main() { 32 gl_Position = position; 33 texcoords_out = texcoords_in; 34} 35END 36 37SHADER fragment frag_shader_tex GLSL 38#version 430 39layout(location = 0) in vec2 texcoords_in; 40layout(location = 0) out vec4 color_out; 41uniform layout(set=0, binding=0) texture2D tex; 42uniform layout(set=0, binding=1) sampler tex_sampler; 43void main() { 44 color_out = texture(sampler2D(tex, tex_sampler), texcoords_in); 45} 46END 47 48SHADER compute compute_shader GLSL 49#version 430 50layout(local_size_x=16,local_size_y=16) in; 51uniform layout (set=0, binding=0, rgba8) image2D texture; 52void main () { 53 ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 54 vec4 color = imageLoad(texture, uv) + vec4(0, 1.0, 0, 0); 55 imageStore(texture, uv, color); 56} 57END 58 59BUFFER texture FORMAT R8G8B8A8_UNORM 60BUFFER framebuffer FORMAT B8G8R8A8_UNORM 61SAMPLER sampler 62BUFFER position DATA_TYPE vec2<float> DATA 63-0.75 -0.75 64 0.75 -0.75 65 0.75 0.75 66-0.75 0.75 67END 68BUFFER texcoords DATA_TYPE vec2<float> DATA 690.0 0.0 702.0 0.0 712.0 2.0 720.0 2.0 73END 74 75PIPELINE graphics pipeline1 76 ATTACH vert_shader 77 ATTACH frag_shader_red 78 FRAMEBUFFER_SIZE 256 256 79 BIND BUFFER texture AS color LOCATION 0 80END 81 82PIPELINE graphics pipeline2 83 ATTACH vert_shader_tex 84 ATTACH frag_shader_tex 85 BIND BUFFER texture AS sampled_image DESCRIPTOR_SET 0 BINDING 0 86 BIND SAMPLER sampler DESCRIPTOR_SET 0 BINDING 1 87 VERTEX_DATA position LOCATION 0 88 VERTEX_DATA texcoords LOCATION 1 89 FRAMEBUFFER_SIZE 256 256 90 BIND BUFFER framebuffer AS color LOCATION 0 91END 92 93PIPELINE compute pipeline3 94 ATTACH compute_shader 95 BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0 96 FRAMEBUFFER_SIZE 256 256 97END 98 99# Generate a texture with a quad at the lower right corner. 100CLEAR_COLOR pipeline1 0 0 255 255 101CLEAR pipeline1 102RUN pipeline1 DRAW_RECT POS 128 128 SIZE 128 128 103 104# Add green color to a 128x128 quad. 105RUN pipeline3 8 8 1 106 107# Draw the texture using a default sampler. 108CLEAR_COLOR pipeline2 0 255 0 255 109CLEAR pipeline2 110RUN pipeline2 DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4 111 112EXPECT framebuffer IDX 1 1 SIZE 1 1 EQ_RGBA 0 255 0 255 113EXPECT framebuffer IDX 33 33 SIZE 1 1 EQ_RGBA 0 255 255 255 114EXPECT framebuffer IDX 81 81 SIZE 1 1 EQ_RGBA 255 0 0 255 115EXPECT framebuffer IDX 81 33 SIZE 1 1 EQ_RGBA 0 0 255 255 116