#!amber # Copyright 2021 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. DEVICE_FEATURE tessellationShader SHADER vertex vert GLSL #version 450 layout (location = 0) in vec3 inPosition; void main(void) { gl_Position = vec4(inPosition, 1.0); } END SHADER tessellation_control tesc GLSL #version 450 layout (vertices = 4) out; void main(void) { gl_TessLevelOuter[0] = 6.0; gl_TessLevelOuter[1] = 2.0; gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; } END SHADER tessellation_evaluation tese GLSL #version 450 layout (isolines, equal_spacing, cw) in; void main(void) { vec4 p1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x); vec4 p2 = mix(gl_in[2].gl_Position, gl_in[3].gl_Position, gl_TessCoord.x); gl_Position = mix(p1, p2, gl_TessCoord.y); } END SHADER fragment frag GLSL #version 450 layout (location = 0) out vec4 outColor; void main(void) { outColor = vec4(1, 0, 0, 1); } END SHADER compute comp_shader GLSL #version 450 layout(local_size_x=10,local_size_y=10) in; uniform layout(set=0, binding=0, rgba8) image2D resultImage; layout(set = 0, binding = 1) buffer block0 { int counter; }; void main() { ivec2 uv = ivec2(gl_GlobalInvocationID.xy); vec4 color = imageLoad(resultImage, uv); if(color.r > 0.0) atomicAdd(counter, 1); } END BUFFER vertexPosition DATA_TYPE vec3 DATA -1.0 -1.0 0.0 1.0 -1.0 0.0 -1.0 1.0 0.0 1.0 1.0 0.0 END BUFFER counter DATA_TYPE int32 DATA 0 END BUFFER framebuffer FORMAT B8G8R8A8_UNORM PIPELINE graphics pipeline ATTACH vert ATTACH tesc ATTACH tese ATTACH frag PATCH_CONTROL_POINTS 4 FRAMEBUFFER_SIZE 100 100 VERTEX_DATA vertexPosition LOCATION 0 BIND BUFFER framebuffer AS color LOCATION 0 END CLEAR_COLOR pipeline 0 0 0 255 CLEAR pipeline RUN pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 4 PIPELINE compute verify_pipeline ATTACH comp_shader BIND BUFFER framebuffer AS storage_image DESCRIPTOR_SET 0 BINDING 0 BIND BUFFER counter AS storage DESCRIPTOR_SET 0 BINDING 1 FRAMEBUFFER_SIZE 100 100 END # Count the number of red pixels as the line position might differ between implementations. RUN verify_pipeline 10 10 1 EXPECT counter IDX 0 TOLERANCE 50 EQ 500