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