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