1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef sw_Stream_hpp 16 #define sw_Stream_hpp 17 18 #include "System/Types.hpp" 19 20 namespace sw 21 { 22 class Resource; 23 24 enum StreamType ENUM_UNDERLYING_TYPE_UNSIGNED_INT 25 { 26 STREAMTYPE_COLOR, // 4 normalized unsigned bytes, ZYXW order 27 STREAMTYPE_UDEC3, // 3 unsigned 10-bit fields 28 STREAMTYPE_DEC3N, // 3 normalized signed 10-bit fields 29 STREAMTYPE_INDICES, // 4 unsigned bytes, stored unconverted into X component 30 STREAMTYPE_FLOAT, // Normalization ignored 31 STREAMTYPE_BYTE, 32 STREAMTYPE_SBYTE, 33 STREAMTYPE_SHORT, 34 STREAMTYPE_USHORT, 35 STREAMTYPE_INT, 36 STREAMTYPE_UINT, 37 STREAMTYPE_FIXED, // Normalization ignored (16.16 format) 38 STREAMTYPE_HALF, // Normalization ignored 39 STREAMTYPE_2_10_10_10_INT, 40 STREAMTYPE_2_10_10_10_UINT, 41 42 STREAMTYPE_LAST = STREAMTYPE_2_10_10_10_UINT 43 }; 44 45 struct StreamResource 46 { 47 Resource *resource; 48 const void *buffer; 49 unsigned int stride; 50 }; 51 52 struct Stream : public StreamResource 53 { Streamsw::Stream54 Stream(Resource *resource = 0, const void *buffer = 0, unsigned int stride = 0) 55 { 56 this->resource = resource; 57 this->buffer = buffer; 58 this->stride = stride; 59 } 60 definesw::Stream61 Stream &define(StreamType type, unsigned int count, bool normalized = false) 62 { 63 this->type = type; 64 this->count = count; 65 this->normalized = normalized; 66 67 return *this; 68 } 69 definesw::Stream70 Stream &define(const void *buffer, StreamType type, unsigned int count, bool normalized = false) 71 { 72 this->buffer = buffer; 73 this->type = type; 74 this->count = count; 75 this->normalized = normalized; 76 77 return *this; 78 } 79 defaultssw::Stream80 Stream &defaults() 81 { 82 static const float4 null = {0, 0, 0, 1}; 83 84 resource = 0; 85 buffer = &null; 86 stride = 0; 87 type = STREAMTYPE_FLOAT; 88 count = 0; 89 normalized = false; 90 91 return *this; 92 } 93 operator boolsw::Stream94 operator bool() const // Returns true if stream contains data 95 { 96 return count != 0; 97 } 98 99 StreamType type; 100 unsigned char count; 101 bool normalized; 102 }; 103 } 104 105 #endif // sw_Stream_hpp 106