Commit 3571ad49 by Tobin Ehlis Committed by Commit Bot

Vulkan:Adding Cmd Buffer Reset tests

Resetting cmd buffers in various ways to understand VK driver perf on various devices. Also includes some changes to get the chromium APK wrapper for angle_white_box_perftests compiling. Bug: angleproject:3137 Change-Id: I56bd163cdd6605ce09effe509a9c7ac5e0008e7a Reviewed-on: https://chromium-review.googlesource.com/c/1456482 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 0a87f08d
......@@ -214,11 +214,16 @@ void ANGLEPerfTest::run()
// Do another warmup run. Seems to consistently improve results.
doRunLoop(kMaximumRunTimeSeconds);
double totalTime = 0.0;
for (unsigned int trial = 0; trial < kNumTrials; ++trial)
{
doRunLoop(kMaximumRunTimeSeconds);
printResults();
totalTime += printResults();
}
double average = totalTime / kNumTrials;
std::ostringstream averageString;
averageString << "for " << kNumTrials << " runs";
printResult("average", average, averageString.str(), false);
}
void ANGLEPerfTest::doRunLoop(double maxRunTime)
......@@ -268,7 +273,7 @@ void ANGLEPerfTest::SetUp() {}
void ANGLEPerfTest::TearDown() {}
void ANGLEPerfTest::printResults()
double ANGLEPerfTest::printResults()
{
double elapsedTimeSeconds[2] = {
mTimer->getElapsedTime(),
......@@ -283,6 +288,7 @@ void ANGLEPerfTest::printResults()
// If measured gpu time is non-zero, print that too.
size_t clocksToOutput = mGPUTimeNs > 0 ? 2 : 1;
double retValue = 0.0;
for (size_t i = 0; i < clocksToOutput; ++i)
{
double secondsPerStep = elapsedTimeSeconds[i] / static_cast<double>(mNumStepsPerformed);
......@@ -292,14 +298,17 @@ void ANGLEPerfTest::printResults()
if (secondsPerIteration > 1e-3)
{
double microSecondsPerIteration = secondsPerIteration * kMicroSecondsPerSecond;
retValue = microSecondsPerIteration;
printResult(clockNames[i], microSecondsPerIteration, "us", true);
}
else
{
double nanoSecPerIteration = secondsPerIteration * kNanoSecondsPerSecond;
retValue = nanoSecPerIteration;
printResult(clockNames[i], nanoSecPerIteration, "ns", true);
}
}
return retValue;
}
double ANGLEPerfTest::normalizedTime(size_t value) const
......
......@@ -97,7 +97,7 @@ class ANGLEPerfTest : public testing::Test, angle::NonCopyable
bool mSkipTest;
private:
void printResults();
double printResults();
unsigned int mStepsToRun;
unsigned int mNumStepsPerformed;
......
......@@ -4,10 +4,14 @@
#include "perf_test.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdio.h>
#include <vector>
#if defined(ANDROID)
# include <android/log.h>
#endif
namespace {
namespace base {
......@@ -73,8 +77,15 @@ void PrintResultsImpl(const std::string& measurement,
const std::string& units,
bool important) {
fflush(stdout);
#if defined(ANDROID)
__android_log_print(
ANDROID_LOG_INFO, "ANGLE", "%s",
ResultsToString(measurement, modifier, trace, values, prefix, suffix, units, important)
.c_str());
#else
printf("%s", ResultsToString(measurement, modifier, trace, values,
prefix, suffix, units, important).c_str());
#endif // defined(ANDROID)
fflush(stdout);
}
......
......@@ -705,7 +705,7 @@ VkResult init_device(struct sample_info &info)
return res;
}
void init_command_pool(struct sample_info &info)
void init_command_pool(struct sample_info &info, VkCommandPoolCreateFlags cmd_pool_create_flags)
{
/* DEPENDS on init_swapchain_extension() */
VkResult res;
......@@ -714,7 +714,7 @@ void init_command_pool(struct sample_info &info)
cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
cmd_pool_info.pNext = NULL;
cmd_pool_info.queueFamilyIndex = info.graphics_queue_family_index;
cmd_pool_info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
cmd_pool_info.flags = cmd_pool_create_flags;
res = vkCreateCommandPool(info.device, &cmd_pool_info, NULL, &info.cmd_pool);
assert(res == VK_SUCCESS);
......@@ -1736,22 +1736,6 @@ void init_viewports_array(struct sample_info &info, int index)
#endif
}
void init_viewports2(struct sample_info &info)
{
#ifdef __ANDROID__
// Disable dynamic viewport on Android. Some drive has an issue with the dynamic viewport
// feature.
#else
info.viewport.height = (float)info.height;
info.viewport.width = (float)info.width;
info.viewport.minDepth = (float)0.0f;
info.viewport.maxDepth = (float)1.0f;
info.viewport.x = 0;
info.viewport.y = 0;
vkCmdSetViewport(info.cmd2, 0, NUM_VIEWPORTS, &info.viewport);
#endif
}
void init_viewports2_array(struct sample_info &info, int index)
{
#ifdef __ANDROID__
......@@ -1855,11 +1839,25 @@ void destroy_command_buffer_array(struct sample_info &info, int numBuffers)
vkFreeCommandBuffers(info.device, info.cmd_pool, numBuffers, info.cmds.data());
}
void reset_command_buffer2_array(struct sample_info &info,
VkCommandBufferResetFlags cmd_buffer_reset_flags)
{
for (auto cb : info.cmd2s)
{
vkResetCommandBuffer(cb, cmd_buffer_reset_flags);
}
}
void destroy_command_buffer2_array(struct sample_info &info, int numBuffers)
{
vkFreeCommandBuffers(info.device, info.cmd_pool, numBuffers, info.cmd2s.data());
}
void reset_command_pool(struct sample_info &info, VkCommandPoolResetFlags cmd_pool_reset_flags)
{
vkResetCommandPool(info.device, info.cmd_pool, cmd_pool_reset_flags);
}
void destroy_command_pool(struct sample_info &info)
{
vkDestroyCommandPool(info.device, info.cmd_pool, NULL);
......
......@@ -61,8 +61,8 @@ ANGLE_REENABLE_EXTRA_SEMI_WARNING
# define VK_USE_PLATFORM_ANDROID_KHR
# include <android/log.h>
# include <unistd.h>
# include "OSWindow.h"
# include "android/third_party/android_native_app_glue.h"
# include "util/OSWindow.h"
# include "util/android/third_party/android_native_app_glue.h"
#else
# include <unistd.h>
# include "vulkan/vk_sdk_platform.h"
......@@ -214,7 +214,6 @@ struct sample_info
std::vector<float> MVP;
VkCommandBuffer cmd; // Buffer for initialization commands
VkCommandBuffer cmd2; // Place to hold secondary command buffer
std::vector<VkCommandBuffer> cmds; // Place to hold a lot of buffers
std::vector<VkCommandBuffer> cmd2s; // Place to hold a lot of 2nd buffers
VkPipelineLayout pipeline_layout;
......@@ -510,7 +509,7 @@ VkBool32 demo_check_layers(const std::vector<layer_properties> &layer_props,
void init_connection(struct sample_info &info);
void init_window(struct sample_info &info);
void init_swapchain_extension(struct sample_info &info);
void init_command_pool(struct sample_info &info);
void init_command_pool(struct sample_info &info, VkCommandPoolCreateFlags cmd_pool_create_flags);
void init_command_buffer(struct sample_info &info);
void init_command_buffer_array(struct sample_info &info, int numBuffers);
void init_command_buffer2_array(struct sample_info &info, int numBuffers);
......@@ -562,6 +561,9 @@ void destroy_swap_chain(struct sample_info &info);
void destroy_command_buffer(struct sample_info &info);
void destroy_command_buffer_array(struct sample_info &info, int numBuffers);
void destroy_command_buffer2_array(struct sample_info &info, int numBuffers);
void reset_command_buffer2_array(struct sample_info &info,
VkCommandBufferResetFlags cmd_buffer_reset_flags);
void reset_command_pool(struct sample_info &info, VkCommandPoolResetFlags cmd_pool_reset_flags);
void destroy_command_pool(struct sample_info &info);
void destroy_device(struct sample_info &info);
void destroy_instance(struct sample_info &info);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment