1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci# Copyright 2021 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 tessellationShader 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ciSHADER vertex vert GLSL 19e5c31af7Sopenharmony_ci#version 450 20e5c31af7Sopenharmony_ci 21e5c31af7Sopenharmony_cilayout (location = 0) in vec3 inPosition; 22e5c31af7Sopenharmony_ci 23e5c31af7Sopenharmony_civoid main(void) 24e5c31af7Sopenharmony_ci{ 25e5c31af7Sopenharmony_ci gl_Position = vec4(inPosition, 1.0); 26e5c31af7Sopenharmony_ci} 27e5c31af7Sopenharmony_ciEND 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciSHADER tessellation_control tesc GLSL 30e5c31af7Sopenharmony_ci#version 450 31e5c31af7Sopenharmony_ci 32e5c31af7Sopenharmony_cilayout (vertices = 4) out; 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_civoid main(void) 35e5c31af7Sopenharmony_ci{ 36e5c31af7Sopenharmony_ci gl_TessLevelOuter[0] = 6.0; 37e5c31af7Sopenharmony_ci gl_TessLevelOuter[1] = 2.0; 38e5c31af7Sopenharmony_ci 39e5c31af7Sopenharmony_ci gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; 40e5c31af7Sopenharmony_ci} 41e5c31af7Sopenharmony_ciEND 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ciSHADER tessellation_evaluation tese GLSL 44e5c31af7Sopenharmony_ci#version 450 45e5c31af7Sopenharmony_ci 46e5c31af7Sopenharmony_cilayout (isolines, equal_spacing, cw) in; 47e5c31af7Sopenharmony_ci 48e5c31af7Sopenharmony_civoid main(void) 49e5c31af7Sopenharmony_ci{ 50e5c31af7Sopenharmony_ci vec4 p1 = mix(gl_in[0].gl_Position, 51e5c31af7Sopenharmony_ci gl_in[1].gl_Position, 52e5c31af7Sopenharmony_ci gl_TessCoord.x); 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ci vec4 p2 = mix(gl_in[2].gl_Position, 55e5c31af7Sopenharmony_ci gl_in[3].gl_Position, 56e5c31af7Sopenharmony_ci gl_TessCoord.x); 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci gl_Position = mix(p1, p2, gl_TessCoord.y); 59e5c31af7Sopenharmony_ci} 60e5c31af7Sopenharmony_ciEND 61e5c31af7Sopenharmony_ci 62e5c31af7Sopenharmony_ciSHADER fragment frag GLSL 63e5c31af7Sopenharmony_ci#version 450 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_cilayout (location = 0) out vec4 outColor; 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_civoid main(void) 68e5c31af7Sopenharmony_ci{ 69e5c31af7Sopenharmony_ci outColor = vec4(1, 0, 0, 1); 70e5c31af7Sopenharmony_ci} 71e5c31af7Sopenharmony_ciEND 72e5c31af7Sopenharmony_ci 73e5c31af7Sopenharmony_ciSHADER compute comp_shader GLSL 74e5c31af7Sopenharmony_ci#version 450 75e5c31af7Sopenharmony_cilayout(local_size_x=10,local_size_y=10) in; 76e5c31af7Sopenharmony_ciuniform layout(set=0, binding=0, rgba8) image2D resultImage; 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_cilayout(set = 0, binding = 1) buffer block0 79e5c31af7Sopenharmony_ci{ 80e5c31af7Sopenharmony_ci int counter; 81e5c31af7Sopenharmony_ci}; 82e5c31af7Sopenharmony_ci 83e5c31af7Sopenharmony_civoid main() 84e5c31af7Sopenharmony_ci{ 85e5c31af7Sopenharmony_ci ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 86e5c31af7Sopenharmony_ci vec4 color = imageLoad(resultImage, uv); 87e5c31af7Sopenharmony_ci if(color.r > 0.0) atomicAdd(counter, 1); 88e5c31af7Sopenharmony_ci} 89e5c31af7Sopenharmony_ciEND 90e5c31af7Sopenharmony_ci 91e5c31af7Sopenharmony_ciBUFFER vertexPosition DATA_TYPE vec3<float> DATA 92e5c31af7Sopenharmony_ci-1.0 -1.0 0.0 93e5c31af7Sopenharmony_ci 1.0 -1.0 0.0 94e5c31af7Sopenharmony_ci-1.0 1.0 0.0 95e5c31af7Sopenharmony_ci 1.0 1.0 0.0 96e5c31af7Sopenharmony_ciEND 97e5c31af7Sopenharmony_ci 98e5c31af7Sopenharmony_ciBUFFER counter DATA_TYPE int32 DATA 0 END 99e5c31af7Sopenharmony_ci 100e5c31af7Sopenharmony_ciBUFFER framebuffer FORMAT B8G8R8A8_UNORM 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ciPIPELINE graphics pipeline 103e5c31af7Sopenharmony_ci ATTACH vert 104e5c31af7Sopenharmony_ci ATTACH tesc 105e5c31af7Sopenharmony_ci ATTACH tese 106e5c31af7Sopenharmony_ci ATTACH frag 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_ci PATCH_CONTROL_POINTS 4 109e5c31af7Sopenharmony_ci 110e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 100 100 111e5c31af7Sopenharmony_ci VERTEX_DATA vertexPosition LOCATION 0 112e5c31af7Sopenharmony_ci BIND BUFFER framebuffer AS color LOCATION 0 113e5c31af7Sopenharmony_ciEND 114e5c31af7Sopenharmony_ci 115e5c31af7Sopenharmony_ciCLEAR_COLOR pipeline 0 0 0 255 116e5c31af7Sopenharmony_ciCLEAR pipeline 117e5c31af7Sopenharmony_ci 118e5c31af7Sopenharmony_ciRUN pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 4 119e5c31af7Sopenharmony_ci 120e5c31af7Sopenharmony_ciPIPELINE compute verify_pipeline 121e5c31af7Sopenharmony_ci ATTACH comp_shader 122e5c31af7Sopenharmony_ci BIND BUFFER framebuffer AS storage_image DESCRIPTOR_SET 0 BINDING 0 123e5c31af7Sopenharmony_ci BIND BUFFER counter AS storage DESCRIPTOR_SET 0 BINDING 1 124e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 100 100 125e5c31af7Sopenharmony_ciEND 126e5c31af7Sopenharmony_ci 127e5c31af7Sopenharmony_ci# Count the number of red pixels as the line position might differ between implementations. 128e5c31af7Sopenharmony_ciRUN verify_pipeline 10 10 1 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_ciEXPECT counter IDX 0 TOLERANCE 50 EQ 500 131