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 "Common/Types.hpp"
19
20namespace 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 {
54 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
61 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
70 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
80 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
94 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