Hash :
81a244de
Author :
Date :
2022-10-10T15:32:25
Adding a class to perform ASTC texture decompression on the CPU This significantly improves performance by caching and re-using the ASTC decoder context, and using multi-threaded decompression. This code was originally written for gfxstream. Bug: b/250688943 Change-Id: I1727447907f2e25cf9b854ffcc9ccfc04db2fb91 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3929008 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//
// Copyright 2022 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// AstcDecompressorNoOp.cpp: No-op implementation if support for ASTC textures wasn't enabled
#include "image_util/AstcDecompressor.h"
namespace angle
{
namespace
{
class AstcDecompressorNoOp : public AstcDecompressor
{
public:
bool available() const override { return false; }
int32_t decompress(std::shared_ptr<WorkerThreadPool> singleThreadPool,
std::shared_ptr<WorkerThreadPool> multiThreadPool,
uint32_t imgWidth,
uint32_t imgHeight,
uint32_t blockWidth,
uint32_t blockHeight,
const uint8_t *astcData,
size_t astcDataLength,
uint8_t *output) override
{
return -1;
}
const char *getStatusString(int32_t statusCode) const override
{
return "ASTC CPU decomp not available";
}
};
} // namespace
AstcDecompressor &AstcDecompressor::get()
{
static AstcDecompressorNoOp *instance = new AstcDecompressorNoOp();
return *instance;
}
} // namespace angle