10bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 20bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 30bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 40bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// you may not use this file except in compliance with the License. 50bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// You may obtain a copy of the License at 60bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 70bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 80bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 90bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Unless required by applicable law or agreed to in writing, software 100bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 110bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// See the License for the specific language governing permissions and 130bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// limitations under the License. 140bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 150bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#ifndef sw_Config_hpp 160bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define sw_Config_hpp 170bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 180bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#include "Common/Types.hpp" 190bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 200bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define PERF_HUD 0 // Display time spent on vertex, setup and pixel processing for each thread 210bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define PERF_PROFILE 0 // Profile various pipeline stages and display the timing in SwiftConfig 220bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 23fba5b6d7fa0e1597c87c0ec71529c56997290941Alexis Hetu#define ASTC_SUPPORT 0 24fba5b6d7fa0e1597c87c0ec71529c56997290941Alexis Hetu 250bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Worker thread count when not set by SwiftConfig 260bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 0 = process affinity count (recommended) 270bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 1 = rendering on main thread (no worker threads), useful for debugging 280bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#ifndef DEFAULT_THREAD_COUNT 290bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define DEFAULT_THREAD_COUNT 0 300bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif 310bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 320bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensnamespace sw 330bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens{ 340bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens enum 350bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 360bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_PIXEL, 370bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_PIPE, 380bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_INTERP, 390bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_SHADER, 400bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_TEX, 410bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_ROP, 420bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 430bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_TIMERS 440bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 450bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 460bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens struct Profiler 470bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 480bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Profiler(); 490bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 500bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void reset(); 510bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void nextFrame(); 520bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 530bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int framesSec; 540bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int framesTotal; 550bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens double FPS; 560bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 570bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens #if PERF_PROFILE 580bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens double cycles[PERF_TIMERS]; 590bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 600bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperations; 610bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperationsTotal; 620bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperationsFrame; 630bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 640bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperations; 650bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperationsTotal; 660bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperationsFrame; 670bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 680bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTex; 690bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTexTotal; 700bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTexFrame; 710bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens #endif 720bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 730bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 740bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens extern Profiler profiler; 750bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 760bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens enum 770bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 788cb9c9a1578906169204b0dc762f93bb81a98cf3Alexis Hetu OUTLINE_RESOLUTION = 8192, // Maximum vertical resolution of the render target 790bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MIPMAP_LEVELS = 14, 800bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens TEXTURE_IMAGE_UNITS = 16, 810bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens VERTEX_TEXTURE_IMAGE_UNITS = 16, 820bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens TOTAL_IMAGE_UNITS = TEXTURE_IMAGE_UNITS + VERTEX_TEXTURE_IMAGE_UNITS, 8305878213828e4ee4335292319f63a9f875bbd795Alexis Hetu FRAGMENT_UNIFORM_VECTORS = 227, 8405878213828e4ee4335292319f63a9f875bbd795Alexis Hetu VERTEX_UNIFORM_VECTORS = 259, 8505878213828e4ee4335292319f63a9f875bbd795Alexis Hetu MAX_VERTEX_INPUTS = 32, 8605878213828e4ee4335292319f63a9f875bbd795Alexis Hetu MAX_VERTEX_OUTPUTS = 34, 8705878213828e4ee4335292319f63a9f875bbd795Alexis Hetu MAX_FRAGMENT_INPUTS = 32, 880bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_FRAGMENT_UNIFORM_BLOCKS = 12, 890bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_VERTEX_UNIFORM_BLOCKS = 12, 900bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS, // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp 910bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_UNIFORM_BLOCK_SIZE = 16384, 920bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_CLIP_PLANES = 6, 930bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64, 940bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64, 952337a192aa163b1076ba768e414c5fe27f1a9143Meng-Lin Wu MIN_PROGRAM_TEXEL_OFFSET = -8, 962337a192aa163b1076ba768e414c5fe27f1a9143Meng-Lin Wu MAX_PROGRAM_TEXEL_OFFSET = 7, 970e22d3ac1342803e4f6e99dee0b1bc7638f0acdcAlexis Hetu MAX_TEXTURE_LOD = MIPMAP_LEVELS - 2, // Trilinear accesses lod+1 980bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens RENDERTARGETS = 8, 990bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 1000bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens} 1010bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 1020bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif // sw_Config_hpp 103