diff options
author | Jeff McGlynn <jwmcglynn@google.com> | 2018-06-20 11:34:20 -0700 |
---|---|---|
committer | Jeff McGlynn <jwmcglynn@google.com> | 2018-06-20 11:50:22 -0700 |
commit | b56a50064caf2a590ba43699e0074690fcd431bf (patch) | |
tree | d81c98f2d097f9b32f23cffef7afa6725a182e66 /src/decoder/types.h | |
parent | ce724a5f1c94f539a6bf956fc6431c37e97961a9 (diff) |
Initial version of astc-codec for open source release
Contains an implementation of an ASTC decoder that is able to pass the
dEQP ASTC LDR tests.
astc-codec has no external dependencies for the main library, only for
test code, and is licensed under the Apache license.
Components:
include/ - Public API that can decode ASTC LDR data into a RGBA UNORM8
buffer.
src/base/ - Base library with common functionality not directly related
to ASTC decoding. Contains a uint128 implementation, BitStream for
reading/writing bits with a primitive (or uint128 type), Optional
implementation (to not take a dependency on C++17), and more.
src/decoder/ - Internal implementation of the ASTC decoder.
src/base/test/, src/decoder/test/ - Unit tests (and a fuzzing test) for
the astc decoder.
src/decoder/testdata/ - Sample ASTC images and golden image results for
testing.
src/decoder/tools/ - A tool to inspect contents of an ASTC file.
third_party/ - Third party libraries, only used for tests.
Change-Id: Ia98e5a7dc847daa3d3a48c5e62d94b8fb1cb98bd
Diffstat (limited to 'src/decoder/types.h')
-rw-r--r-- | src/decoder/types.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/decoder/types.h b/src/decoder/types.h new file mode 100644 index 0000000..728d5ad --- /dev/null +++ b/src/decoder/types.h @@ -0,0 +1,74 @@ +// Copyright 2018 Google LLC +// +// 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 +// +// https://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 ASTC_CODEC_DECODER_ASTC_TYPES_H_ +#define ASTC_CODEC_DECODER_ASTC_TYPES_H_ + +#include <array> +#include <string> +#include <utility> + +namespace astc_codec { + +// The color endpoint mode determines how the values encoded in the ASTC block +// are interpreted in order to create the RGBA values for the given endpoint +// pair. The order of this enum is required to match the ASTC specification in +// Section C.2.14. +enum class ColorEndpointMode { + kLDRLumaDirect = 0, + kLDRLumaBaseOffset, + kHDRLumaLargeRange, + kHDRLumaSmallRange, + kLDRLumaAlphaDirect, + kLDRLumaAlphaBaseOffset, + kLDRRGBBaseScale, + kHDRRGBBaseScale, + kLDRRGBDirect, + kLDRRGBBaseOffset, + kLDRRGBBaseScaleTwoA, + kHDRRGBDirect, + kLDRRGBADirect, + kLDRRGBABaseOffset, + kHDRRGBDirectLDRAlpha, + kHDRRGBDirectHDRAlpha, + + // The total number of color endpoints defined by the ASTC specification. + // This isn't a specific endpoint mode and its sole purpose is to be used + // as a constant number. + kNumColorEndpointModes +}; + +// Returns the class for the given mode as defined in Section C.2.11. +constexpr int EndpointModeClass(ColorEndpointMode mode) { + return static_cast<int>(mode) / 4; +} + +// Returns the number of encoded color values for the given endpoint mode. The +// number of encoded color values and their range determines the size of the +// color data in a physical ASTC block. This information is taken from +// Section C.2.17 of the ASTC specification. +constexpr int NumColorValuesForEndpointMode(ColorEndpointMode mode) { + return (EndpointModeClass(mode) + 1) * 2; +} + +// We define a number of convenience types here that give more logical meaning +// throughout the ASTC utilities. +using RgbColor = std::array<int, 3>; +using RgbaColor = std::array<int, 4>; +using Endpoint = RgbaColor; +using EndpointPair = std::pair<Endpoint, Endpoint>; + +} // namespace astc_codec + +#endif // ASTC_CODEC_DECODER_ASTC_TYPES_H_ |