tests: Add test for render target clear via load op
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Courtney Goeltzenleuchter <courtney@lunarg.com>
diff --git a/tests/golden/RenderPassLoadOpClear.ppm b/tests/golden/RenderPassLoadOpClear.ppm
new file mode 100644
index 0000000..e318f58
--- /dev/null
+++ b/tests/golden/RenderPassLoadOpClear.ppm
Binary files differ
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 5c2d8aa..8bfcfad 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -3978,6 +3978,30 @@
RecordImages(m_renderTargets);
}
+TEST_F(VkRenderTest, RenderPassLoadOpClear)
+{
+ ASSERT_NO_FATAL_FAILURE(InitState());
+ ASSERT_NO_FATAL_FAILURE(InitViewport());
+
+ /* clear via load op to full green */
+ m_clear_via_load_op = true;
+ m_clear_color.useRawValue = false;
+ m_clear_color.color.floatColor[0] = 0;
+ m_clear_color.color.floatColor[1] = 1;
+ m_clear_color.color.floatColor[2] = 0;
+ m_clear_color.color.floatColor[3] = 0;
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ VkCommandBufferObj cmdBuffer(m_device);
+ cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+ ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+ /* This command buffer contains ONLY the load op! */
+ EndCommandBuffer(cmdBuffer);
+ cmdBuffer.QueueCommandBuffer();
+
+ RecordImages(m_renderTargets);
+}
+
int main(int argc, char **argv) {
int result;
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 90a2b07..1b1e3da 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -41,6 +41,7 @@
m_height( 256.0 ), // default window height
m_render_target_fmt( VK_FORMAT_R8G8B8A8_UNORM ),
m_depth_stencil_fmt( VK_FORMAT_UNDEFINED ),
+ m_clear_via_load_op( false ),
m_depth_clear_color( 1.0 ),
m_stencil_clear_color( 0 )
{
@@ -245,7 +246,7 @@
m_renderTargets.push_back(img);
m_colorBindings[i].view = img->targetView();
m_colorBindings[i].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
- load_ops.push_back(VK_ATTACHMENT_LOAD_OP_LOAD);
+ load_ops.push_back(m_clear_via_load_op ? VK_ATTACHMENT_LOAD_OP_CLEAR : VK_ATTACHMENT_LOAD_OP_LOAD);
store_ops.push_back(VK_ATTACHMENT_STORE_OP_STORE);
clear_colors.push_back(m_clear_color);
}
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 2d8c335..285cd80 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -118,6 +118,7 @@
VkFormat m_depth_stencil_fmt;
VkColorAttachmentBindInfo m_colorBindings[8];
VkClearColor m_clear_color;
+ bool m_clear_via_load_op;
float m_depth_clear_color;
uint32_t m_stencil_clear_color;
VkDepthStencilObj *m_depthStencil;