From 115c15a12834f093bdfc5bd51846a737db6fe2b9 Mon Sep 17 00:00:00 2001 From: Jaebaek Seo Date: Mon, 28 Jan 2019 16:47:49 -0500 Subject: Vulkan: support tessellation control/eval shader (#249) Fixes #236 --- .../draw_triangle_list_using_tessellation.amber | 148 +++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 tests/cases/draw_triangle_list_using_tessellation.amber (limited to 'tests') diff --git a/tests/cases/draw_triangle_list_using_tessellation.amber b/tests/cases/draw_triangle_list_using_tessellation.amber new file mode 100644 index 0000000..89a5787 --- /dev/null +++ b/tests/cases/draw_triangle_list_using_tessellation.amber @@ -0,0 +1,148 @@ +# 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. + +[require] +tessellationShader + +[vertex shader] +#version 450 + +layout(location = 0) in vec4 position; +layout(location = 1) in vec4 vert_color; +layout(location = 0) out vec4 tsc_color; + +void main() { + gl_Position = position; + tsc_color = vert_color; +} + +[tessellation control shader] +#version 450 +#extension GL_ARB_separate_shader_objects : enable + +layout(vertices = 3) out; + +layout(location = 0) in vec4 tsc_color[]; +layout(location = 0) out vec4 tse_color[]; + +#define ID gl_InvocationID + +void main() +{ + gl_out[ID].gl_Position = gl_in[ID].gl_Position; + tse_color[ID] = tsc_color[ID]; + if (ID == 0) { + gl_TessLevelInner[0] = 5; + gl_TessLevelOuter[0] = 4; + gl_TessLevelOuter[1] = 5; + gl_TessLevelOuter[2] = 6; + } +} + +[tessellation evaluation shader] +#version 450 +#extension GL_ARB_separate_shader_objects : enable + +layout(triangles, equal_spacing, cw) in; + +layout(location = 0) in vec4 tse_color[]; +layout(location = 0) out vec4 frag_color; + +void main() +{ + vec4 p0 = gl_TessCoord.x * gl_in[0].gl_Position; + vec4 p1 = gl_TessCoord.y * gl_in[1].gl_Position; + vec4 p2 = gl_TessCoord.z * gl_in[2].gl_Position; + gl_Position = p0 + p1 + p2; + + vec4 q0 = gl_TessCoord.x * tse_color[0]; + vec4 q1 = gl_TessCoord.y * tse_color[1]; + vec4 q2 = gl_TessCoord.z * tse_color[2]; + frag_color = q0 + q1 + q2; +} + +[fragment shader] +#version 450 + +layout(location = 0) in vec4 frag_color; +layout(location = 0) out vec4 final_color; + +void main() { + final_color = frag_color; +} + +[vertex data] +# position vert_color + 0/R8G8_SNORM 1/R8G8B8_UNORM + +# Red for entire frame +# R8 G8 R8 G8 B8 + -128 -128 255 0 0 + 127 127 255 0 0 + -128 127 255 0 0 + + -128 -128 255 0 0 + 127 127 255 0 0 + 127 -128 255 0 0 + +# Green for half frame +# R8 G8 R8 G8 B8 + 0 -128 0 255 0 + 127 127 0 255 0 + 0 127 0 255 0 + + 0 -128 0 255 0 + 127 127 0 255 0 + 127 -128 0 255 0 + +# Blue for quarter frame +# R8 G8 R8 G8 B8 + -128 0 0 0 255 + 0 127 0 0 255 + -128 127 0 0 255 + + -128 0 0 0 255 + 0 127 0 0 255 + 0 0 0 0 255 + +# Mixed color for quarter frame +# R8 G8 R8 G8 B8 + 0 0 127 127 127 + 127 127 127 127 127 + 0 127 127 127 127 + + 0 0 127 127 127 + 127 127 127 127 127 + 127 0 127 127 127 + +[test] +clear + +draw arrays PATCH_LIST 0 6 +relative probe rect rgb (0.0, 0.0, 1.0, 1.0) (1.0, 0, 0) + +draw arrays PATCH_LIST 6 6 +relative probe rect rgb (0.0, 0.0, 0.5, 1.0) (1.0, 0, 0) +relative probe rect rgb (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0) + +draw arrays PATCH_LIST 12 6 +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0) +relative probe rect rgb (0.5, 0.0, 0.5, 1.0) (0, 1.0, 0) +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0) + +draw arrays PATCH_LIST 18 6 +relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0, 0) +relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0, 1.0, 0) +relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0, 0, 1.0) +relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (0.5, 0.5, 0.5) -- cgit v1.2.3