| // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //    http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 |  | 
 | #ifndef sw_Stream_hpp | 
 | #define sw_Stream_hpp | 
 |  | 
 | #include "Common/Types.hpp" | 
 |  | 
 | namespace sw | 
 | { | 
 | 	class Resource; | 
 |  | 
 | 	enum StreamType ENUM_UNDERLYING_TYPE_UNSIGNED_INT | 
 | 	{ | 
 | 		STREAMTYPE_COLOR,     // 4 normalized unsigned bytes, ZYXW order | 
 | 		STREAMTYPE_UDEC3,     // 3 unsigned 10-bit fields | 
 | 		STREAMTYPE_DEC3N,     // 3 normalized signed 10-bit fields | 
 | 		STREAMTYPE_INDICES,   // 4 unsigned bytes, stored unconverted into X component | 
 | 		STREAMTYPE_FLOAT,     // Normalization ignored | 
 | 		STREAMTYPE_BYTE, | 
 | 		STREAMTYPE_SBYTE, | 
 | 		STREAMTYPE_SHORT, | 
 | 		STREAMTYPE_USHORT, | 
 | 		STREAMTYPE_INT, | 
 | 		STREAMTYPE_UINT, | 
 | 		STREAMTYPE_FIXED,     // Normalization ignored (16.16 format) | 
 | 		STREAMTYPE_HALF,      // Normalization ignored | 
 | 		STREAMTYPE_2_10_10_10_INT, | 
 | 		STREAMTYPE_2_10_10_10_UINT, | 
 |  | 
 | 		STREAMTYPE_LAST = STREAMTYPE_2_10_10_10_UINT | 
 | 	}; | 
 |  | 
 | 	struct StreamResource | 
 | 	{ | 
 | 		Resource *resource; | 
 | 		const void *buffer; | 
 | 		unsigned int stride; | 
 | 	}; | 
 |  | 
 | 	struct Stream : public StreamResource | 
 | 	{ | 
 | 		Stream(Resource *resource = 0, const void *buffer = 0, unsigned int stride = 0) | 
 | 		{ | 
 | 			this->resource = resource; | 
 | 			this->buffer = buffer; | 
 | 			this->stride = stride; | 
 | 		} | 
 |  | 
 | 		Stream &define(StreamType type, unsigned int count, bool normalized = false) | 
 | 		{ | 
 | 			this->type = type; | 
 | 			this->count = count; | 
 | 			this->normalized = normalized; | 
 |  | 
 | 			return *this; | 
 | 		} | 
 |  | 
 | 		Stream &define(const void *buffer, StreamType type, unsigned int count, bool normalized = false) | 
 | 		{ | 
 | 			this->buffer = buffer; | 
 | 			this->type = type; | 
 | 			this->count = count; | 
 | 			this->normalized = normalized; | 
 |  | 
 | 			return *this; | 
 | 		} | 
 |  | 
 | 		Stream &defaults() | 
 | 		{ | 
 | 			static const float4 null = {0, 0, 0, 1}; | 
 |  | 
 | 			resource = 0; | 
 | 			buffer = &null; | 
 | 			stride = 0; | 
 | 			type = STREAMTYPE_FLOAT; | 
 | 			count = 0; | 
 | 			normalized = false; | 
 |  | 
 | 			return *this; | 
 | 		} | 
 |  | 
 | 		operator bool() const   // Returns true if stream contains data | 
 | 		{ | 
 | 			return count != 0; | 
 | 		} | 
 |  | 
 | 		StreamType type; | 
 | 		unsigned char count; | 
 | 		bool normalized; | 
 | 	}; | 
 | } | 
 |  | 
 | #endif   // sw_Stream_hpp |