1ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill//
2ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill// Use of this source code is governed by a BSD-style license that can be
4ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill// found in the LICENSE file.
5ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill//
6ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill
7ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill#include "SimpleBenchmark.h"
833ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill#include "BufferSubData.h"
9bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill#include "TexSubImage.h"
1033ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
1133ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie MadillEGLint platforms[] =
1233ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill{
1333ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
1433ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE
1533ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill};
1633ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
1733ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie MadillGLenum vertexTypes[] = { GL_FLOAT };
1882cceb2de7958c7706768f21052a2e3409511fb8Jamie MadillGLint componentCounts[] = { 4 };
1933ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie MadillGLboolean vertexNorms[] = { GL_FALSE };
2082cceb2de7958c7706768f21052a2e3409511fb8Jamie MadillGLsizeiptr updateSizes[] = { 0, 300 };
2133ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie MadillGLsizeiptr bufferSizes[] = { 1024 * 1024 };
2233ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madillunsigned int iterationCounts[] = { 10 };
2382cceb2de7958c7706768f21052a2e3409511fb8Jamie Madillunsigned int updatesEveryNFrames[] = { 1, 4 };
24ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill
25ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madillint main(int argc, char **argv)
26ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill{
27bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    std::vector<BufferSubDataParams> subDataParams;
2833ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
2933ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    for (size_t platIt = 0; platIt < ArraySize(platforms); platIt++)
3033ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    {
3133ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill        for (size_t typeIt = 0; typeIt < ArraySize(vertexTypes); typeIt++)
3233ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill        {
3333ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill            for (size_t compIt = 0; compIt < ArraySize(componentCounts); compIt++)
3433ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill            {
3533ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                for (size_t normIt = 0; normIt < ArraySize(vertexNorms); normIt++)
3633ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                {
3733ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    // No normalized float data
3833ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    if (vertexTypes[typeIt] == GL_FLOAT && vertexNorms[normIt] == GL_TRUE)
3933ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    {
4033ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                        continue;
4133ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    }
4233ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
4333ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    for (size_t updateIt = 0; updateIt < ArraySize(updateSizes); updateIt++)
4433ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    {
4533ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                        for (size_t bufszIt = 0; bufszIt < ArraySize(bufferSizes); bufszIt++)
4633ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                        {
4733ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                            for (size_t itIt = 0; itIt < ArraySize(iterationCounts); itIt++)
4833ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                            {
4982cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                for (size_t nfrIt = 0; nfrIt < ArraySize(updatesEveryNFrames); nfrIt++)
5082cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                {
5182cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    BufferSubDataParams params;
5282cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.requestedRenderer = platforms[platIt];
5382cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.vertexType = vertexTypes[typeIt];
5482cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.vertexComponentCount = componentCounts[compIt];
5582cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.vertexNormalized = vertexNorms[normIt];
5682cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.updateSize = updateSizes[updateIt];
5782cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.bufferSize = bufferSizes[bufszIt];
5882cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.iterations = iterationCounts[itIt];
5982cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    params.updatesEveryNFrames = updatesEveryNFrames[nfrIt];
6033ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
6182cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    if (updateSizes[updateIt] == 0)
6282cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    {
6382cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        if (nfrIt > 0)
6482cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        {
6582cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                            continue;
6682cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        }
6782cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        else
6882cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        {
6982cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                            params.updatesEveryNFrames = 1;
7082cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                        }
7182cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                    }
7282cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill
73bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill                                    subDataParams.push_back(params);
7482cceb2de7958c7706768f21052a2e3409511fb8Jamie Madill                                }
7533ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                            }
7633ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                        }
7733ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                    }
7833ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill                }
7933ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill            }
8033ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill        }
8133ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    }
8233ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill
8333ea2f977647e5e3a71cd0d6af6c9eef82afe9e3Jamie Madill    // Enumerates permutations
84bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    RunBenchmarks<BufferSubDataBenchmark>(subDataParams);
85bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill
86bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    std::vector<TexSubImageParams> subImageParams;
87bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill
88bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    for (size_t platIt = 0; platIt < ArraySize(platforms); platIt++)
89bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    {
90bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        TexSubImageParams params;
91bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill
92bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.requestedRenderer = platforms[platIt];
93bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.imageWidth = 1024;
94bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.imageHeight = 1024;
95bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.subImageHeight = 64;
96bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.subImageWidth = 64;
97bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        params.iterations = 10;
98bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill
99bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill        subImageParams.push_back(params);
100bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    }
101bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill
102bbffd5562e33a6cf6f6f1bb5be6cfa30df8f36ecJamie Madill    RunBenchmarks<TexSubImageBenchmark>(subImageParams);
103ffcc2e624763712ff9495bc4b343f40713bcc5a3Jamie Madill}
104