Welcome to mirror list, hosted at ThFree Co, Russian Federation.

TracyTextureCompression.hpp « server - github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d5db71f475b2c0939e653fd378227e720a6725d0 (plain)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef __TRACY__TEXTURECOMPRESSION_HPP__
#define __TRACY__TEXTURECOMPRESSION_HPP__

#include <atomic>

#include <stdint.h>
#include <stdlib.h>
#include <string.h>

#include "TracySlab.hpp"

struct ZSTD_CCtx_s;
struct ZSTD_DCtx_s;
struct ZSTD_CDict_s;
struct ZSTD_DDict_s;

namespace tracy
{

struct FrameImage;

class TextureCompression
{
public:
    TextureCompression();
    ~TextureCompression();

    void SetDict( struct ZSTD_DDict_s* dict ) { m_dict = dict; }

    uint32_t Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes );
    uint32_t Pack( struct ZSTD_CCtx_s* ctx, const struct ZSTD_CDict_s* dict, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes );

    template<size_t Size>
    const char* Pack( const char* image, uint32_t inBytes, uint32_t& csz, Slab<Size>& slab )
    {
        const auto outsz = Pack( m_cctx, m_buf, m_bufSize, image, inBytes );
        auto ptr = (char*)slab.AllocBig( outsz );
        memcpy( ptr, m_buf, outsz );
        csz = outsz;
        return ptr;
    }

    const char* Unpack( const FrameImage& image );

    void Rdo( char* data, size_t blocks );
    void FixOrder( char* data, size_t blocks );

    uint64_t GetInputBytesCount() const { return m_inputBytes.load( std::memory_order_relaxed ); }
    uint64_t GetOutputBytesCount() const { return m_outputBytes.load( std::memory_order_relaxed ); }

private:
    char* m_buf;
    size_t m_bufSize;
    struct ZSTD_CCtx_s* m_cctx;
    struct ZSTD_DCtx_s* m_dctx;
    struct ZSTD_DDict_s* m_dict;

    std::atomic<uint64_t> m_inputBytes { 0 };
    std::atomic<uint64_t> m_outputBytes { 0 };
};

}

#endif