From 0a5353a39854fd60c6ed23c82c34ed7df6f2c82d Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 19 Jan 2021 17:20:59 +0000 Subject: [PATCH] Test inverse viewport height in VK_Mesh_Zoo, with rendering and picking --- util/test/demos/vk/vk_mesh_zoo.cpp | 27 +++++++++++++++++++++++--- util/test/demos/vk/vk_overlay_test.cpp | 3 +-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/util/test/demos/vk/vk_mesh_zoo.cpp b/util/test/demos/vk/vk_mesh_zoo.cpp index aa8aeb9a8..3ade7dc77 100644 --- a/util/test/demos/vk/vk_mesh_zoo.cpp +++ b/util/test/demos/vk/vk_mesh_zoo.cpp @@ -57,7 +57,7 @@ void main() vertOutCol2.xy = pos.xy; - gl_Position = pos * vec4(1, -1, 1, 1); + gl_Position = pos * vec4(1, -1 * offset.w, 1, 1); #if defined(USE_POINTS) gl_PointSize = 1.0f; #endif @@ -82,10 +82,14 @@ void main() int main() { + optDevExts.push_back(VK_KHR_MAINTENANCE1_EXTENSION_NAME); + // initialise, create window, create context, etc if(!Init()) return 3; + bool KHR_maintenance1 = hasExt(VK_KHR_MAINTENANCE1_EXTENSION_NAME); + const DefaultA2V test[] = { // single color quad {Vec3f(50.0f, 250.0f, 0.2f), Vec4f(0.0f, 1.0f, 0.0f, 1.0f), Vec2f(0.0f, 0.0f)}, @@ -198,7 +202,7 @@ void main() Vec4f cbufferdata[] = { Vec4f(2.0f / (float)screenWidth, 2.0f / (float)screenHeight, 1.0f, 1.0f), - Vec4f(-1.0f, -1.0f, 0.0f, 0.0f), + Vec4f(-1.0f, -1.0f, 1.0f, 1.0f), }; AllocatedBuffer cb( @@ -235,10 +239,27 @@ void main() vkCmdDraw(cmd, 3, 1, 10, 0); - setMarker(cmd, "Quad"); + // if we have KHR_maintenance1, invert the viewport for the quad draw + if(KHR_maintenance1) + { + VkViewport v = mainWindow->viewport; + v.y += v.height; + v.height = -v.height; + vkCmdSetViewport(cmd, 0, 1, &v); + cbufferdata[1].w = -1.0f; + vkCmdPushConstants(cmd, layout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, + 0, sizeof(cbufferdata), &cbufferdata); + } + setMarker(cmd, "Quad"); vkCmdDraw(cmd, 6, 2, 0, 0); + cbufferdata[1].w = 1.0f; + + vkCmdSetViewport(cmd, 0, 1, &mainWindow->viewport); + vkCmdPushConstants(cmd, layout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, + sizeof(cbufferdata), &cbufferdata); + setMarker(cmd, "Points"); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, pointspipe); diff --git a/util/test/demos/vk/vk_overlay_test.cpp b/util/test/demos/vk/vk_overlay_test.cpp index eed9b261b..1be54b4d9 100644 --- a/util/test/demos/vk/vk_overlay_test.cpp +++ b/util/test/demos/vk/vk_overlay_test.cpp @@ -93,8 +93,7 @@ void main() if(!Init()) return 3; - bool KHR_maintenance1 = std::find(devExts.begin(), devExts.end(), - VK_KHR_MAINTENANCE1_EXTENSION_NAME) != devExts.end(); + bool KHR_maintenance1 = hasExt(VK_KHR_MAINTENANCE1_EXTENSION_NAME); VkPipelineLayout layout = createPipelineLayout(vkh::PipelineLayoutCreateInfo());