Created
March 16, 2020 13:41
-
-
Save cwabbott0/e72f0ed8259b84ed6bf3920c68fefee6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!amber | |
# Copyright 2019 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 vert_shader PASSTHROUGH | |
SHADER fragment frag_shader_red GLSL | |
#version 430 | |
layout(location = 0) out vec4 color_out; | |
void main() { | |
color_out = vec4(1.0, 0.0, 0.0, 1.0); | |
} | |
END | |
SHADER compute compute_shader_tex GLSL | |
#version 430 | |
uniform layout(set=0, binding=0) texture2D tex; | |
uniform layout(set=0, binding=1) sampler tex_sampler; | |
uniform layout(set=0, binding=2, rgba8) image2D color_out; | |
uniform layout(set=0, binding=3) ubo { | |
uvec2 frag_coord_offset; | |
}; | |
void main() { | |
ivec2 frag_coord = ivec2(gl_GlobalInvocationID.xy + frag_coord_offset); | |
const vec2 global_size = vec2(128, 128); | |
vec2 texcoords_in = (gl_GlobalInvocationID.xy / global_size) * 3. - 1.; | |
imageStore(color_out, frag_coord, texture(sampler2D(tex, tex_sampler), texcoords_in)); | |
} | |
END | |
BUFFER texture FORMAT R8G8B8A8_UNORM | |
BUFFER framebuffer FORMAT B8G8R8A8_UNORM | |
# Define samplers for all floating point border colors. | |
SAMPLER sampler_float_opaque_white \ | |
ADDRESS_MODE_U clamp_to_border \ | |
ADDRESS_MODE_V clamp_to_border \ | |
BORDER_COLOR float_opaque_white | |
SAMPLER sampler_float_opaque_black \ | |
ADDRESS_MODE_U clamp_to_border \ | |
ADDRESS_MODE_V clamp_to_border \ | |
BORDER_COLOR float_opaque_black | |
SAMPLER sampler_float_transparent_black \ | |
ADDRESS_MODE_U clamp_to_border \ | |
ADDRESS_MODE_V clamp_to_border \ | |
BORDER_COLOR float_transparent_black | |
BUFFER ubo_opaque_white DATA_TYPE vec2<uint32> DATA | |
0 0 | |
END | |
BUFFER ubo_opaque_black DATA_TYPE vec2<uint32> DATA | |
128 0 | |
END | |
BUFFER ubo_transparent_black DATA_TYPE vec2<uint32> DATA | |
0 128 | |
END | |
PIPELINE graphics pipeline_texgen | |
ATTACH vert_shader | |
ATTACH frag_shader_red | |
FRAMEBUFFER_SIZE 256 256 | |
BIND BUFFER texture AS color LOCATION 0 | |
END | |
PIPELINE compute pipeline_float_opaque_white | |
ATTACH compute_shader_tex | |
BIND BUFFER texture AS sampled_image DESCRIPTOR_SET 0 BINDING 0 | |
BIND SAMPLER sampler_float_opaque_white DESCRIPTOR_SET 0 BINDING 1 | |
BIND BUFFER framebuffer AS storage_image DESCRIPTOR_SET 0 BINDING 2 | |
BIND BUFFER ubo_opaque_white AS uniform DESCRIPTOR_SET 0 BINDING 3 | |
END | |
DERIVE_PIPELINE pipeline_float_opaque_black FROM pipeline_float_opaque_white | |
BIND SAMPLER sampler_float_opaque_black DESCRIPTOR_SET 0 BINDING 1 | |
BIND BUFFER ubo_opaque_black AS uniform DESCRIPTOR_SET 0 BINDING 3 | |
END | |
DERIVE_PIPELINE pipeline_float_transparent_black FROM pipeline_float_opaque_white | |
BIND SAMPLER sampler_float_transparent_black DESCRIPTOR_SET 0 BINDING 1 | |
BIND BUFFER ubo_transparent_black AS uniform DESCRIPTOR_SET 0 BINDING 3 | |
END | |
# Generate texture: a rectangle at the lower right corner. | |
CLEAR_COLOR pipeline_texgen 0 0 255 255 | |
CLEAR pipeline_texgen | |
RUN pipeline_texgen DRAW_RECT POS 128 128 SIZE 128 128 | |
# Draw the texture with coordinates going beyond 0 and 1 to trigger border color. | |
RUN pipeline_float_opaque_white 128 128 1 | |
RUN pipeline_float_opaque_black 128 128 1 | |
RUN pipeline_float_transparent_black 128 128 1 | |
EXPECT framebuffer IDX 1 1 SIZE 1 1 EQ_RGBA 255 255 255 255 | |
EXPECT framebuffer IDX 129 1 SIZE 1 1 EQ_RGBA 0 0 0 255 | |
EXPECT framebuffer IDX 1 129 SIZE 1 1 EQ_RGBA 0 0 0 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment