Config.hpp revision 2337a192aa163b1076ba768e414c5fe27f1a9143
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 230bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#if defined(_WIN32) 240bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define S3TC_SUPPORT 1 250bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#else 260bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define S3TC_SUPPORT 0 270bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif 280bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 290bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Worker thread count when not set by SwiftConfig 300bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 0 = process affinity count (recommended) 310bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 1 = rendering on main thread (no worker threads), useful for debugging 320bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#ifndef DEFAULT_THREAD_COUNT 330bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#define DEFAULT_THREAD_COUNT 0 340bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif 350bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 360bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensnamespace sw 370bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens{ 380bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens enum 390bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 400bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_PIXEL, 410bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_PIPE, 420bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_INTERP, 430bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_SHADER, 440bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_TEX, 450bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_ROP, 460bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 470bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens PERF_TIMERS 480bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 490bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 500bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens struct Profiler 510bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 520bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens Profiler(); 530bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 540bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void reset(); 550bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens void nextFrame(); 560bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 570bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int framesSec; 580bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int framesTotal; 590bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens double FPS; 600bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 610bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens #if PERF_PROFILE 620bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens double cycles[PERF_TIMERS]; 630bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 640bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperations; 650bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperationsTotal; 660bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t ropOperationsFrame; 670bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 680bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperations; 690bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperationsTotal; 700bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t texOperationsFrame; 710bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 720bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTex; 730bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTexTotal; 740bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens int64_t compressedTexFrame; 750bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens #endif 760bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 770bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 780bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens extern Profiler profiler; 790bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 800bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens enum 810bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens { 820bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens OUTLINE_RESOLUTION = 4096, // Maximum vertical resolution of the render target 830bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MIPMAP_LEVELS = 14, 840bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens TEXTURE_IMAGE_UNITS = 16, 850bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens VERTEX_TEXTURE_IMAGE_UNITS = 16, 860bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens TOTAL_IMAGE_UNITS = TEXTURE_IMAGE_UNITS + VERTEX_TEXTURE_IMAGE_UNITS, 870bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens FRAGMENT_UNIFORM_VECTORS = 224, 880bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens VERTEX_UNIFORM_VECTORS = 256, 89f0aef1a4e9c5c517dc1b2b37abd25bc45c93df6fNicolas Capens MAX_VERTEX_INPUTS = 16, 90ec0936c46c22cfaa1d496749dfcd7c235dca825cNicolas Capens MAX_VERTEX_OUTPUTS = 12, 913b4c93fea93733b5ab29902ce2b3c864e40d156cNicolas Capens MAX_FRAGMENT_INPUTS = 10, 920bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_FRAGMENT_UNIFORM_BLOCKS = 12, 930bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_VERTEX_UNIFORM_BLOCKS = 12, 940bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS, // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp 950bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_UNIFORM_BLOCK_SIZE = 16384, 960bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_CLIP_PLANES = 6, 970bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64, 980bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64, 992337a192aa163b1076ba768e414c5fe27f1a9143Meng-Lin Wu MIN_PROGRAM_TEXEL_OFFSET = -8, 1002337a192aa163b1076ba768e414c5fe27f1a9143Meng-Lin Wu MAX_PROGRAM_TEXEL_OFFSET = 7, 1010bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens RENDERTARGETS = 8, 1020bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens }; 1030bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens} 1040bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 1050bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#endif // sw_Config_hpp 106