• Stars
    star
    132
  • Rank 274,205 (Top 6 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 2 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Brotli-G SDK provides an improved lossless compression ratio with GPU decompression support than the standard Brotli compression algorithm maintained by the IETF (also known as RFC7932)

Brotli-G SDK

This project contains the specifications and reference implementations for the Brotli-G compression format:

Brotli-G Bitstream Spec

The use of this technical documentation is goverened by the License.

Source

  • src/decoder/BrotliGCompute.hlsl - start here to read the HLSL source of the GPU decompressor
  • src/decoder/PageDecoder.cpp - start here to read the source of the CPU decompressor
  • src/BrotligDecoder.cpp - this contains the code driving the CPU decompressor
  • src/encoder/PageEncoder.cpp - start here to read the source of the compressor
  • src/BrotligEncoder.cpp - entry point for the compressor

Getting Started

The repo uses CMake build system. Install CMake >= 3.11 if not installed.

Building

Run "Build.bat" from a Visual Studio Developer Command Prompt to generate build files. Open the build files in compiler of choice and compile. Outputs are static libraries build\external\brotli\Release\brotli.lib and build\Release\brotlig.lib.

Usage

To use in a visual studio project, include inc external and external\brotli\c\include as include directories and link build\external\brotli\Release\brotli.lib and build\Release\brotlig.lib as external libraries.

Relevant header files:

  • inc/BrotligEncoder.h - function declarations for Brotli-G compressor
  • inc/BrotligDecoder.h - function declarations for Brotli-G CPU decompressor
  • inc/BrotliG.h - Brotli-G API header file for both compressor and CPU decompressor
  • inc/DataStream.h - data structures for Brotli-G datastream

Code examples:

// Compression
void Compress(size_t srcSize, uint8_t* src, size_t& dstSize, uint8_t*& dst)
{
    dstSize = BrotliG::MaxCompressedSize(srcSize);
    dst = new uint8_t[dstSize];
	
    size_t actualSize = 0;
	
    BrotliG::Encode(
			srcSize, 		// input size (bytes) 
			src, 			// input data
			&actualSize,		// actual compressed size (bytes) 
			dst, 			// compressed output
			65536,			// page size (bytes)
			nullptr			// handle to an application defined progress function
		);
	
    dstSize = actualSize;
}
// CPU Decompression
void DecompressCPU(size_t srcSize, uint8_t* src, size_t& dstSize, uint8_t*& dst)
{
   dstSize = BrotliG::DecompressedSize(src);
   dst = new uint8_t[dstSize];
   
   size_t actualSize = 0;
	
   BrotliG::DecodeCPU(
			srcSize, 		// compressed size (bytes) 
			src, 			// compressed data
			&actualSize,		// decompressed size (bytes) 
			dst, 			// decompressed output
			nullptr			// handle to an application defined progress function
		);
		
   dstSize = actualSize;
}

Example root signature for BrotliGCompute.hlsl:

CD3DX12_ROOT_PARAMETER1 rootParameters[RootParametersCount];
rootParameters[RootSRVInput].InitAsShaderResourceView(0);		// Compressed data buffer (SRV input)
rootParameters[RootUAVControl].InitAsUnorderedAccessView(0);		// Compressed metadata buffer (UAV input)
rootParameters[RootUAVOutput].InitAsUnorderedAccessView(1);		// Decompressed data buffer (UAV output)

Sample

Source code of a sample demostrating the usage of Brotli-G APIs is provided in the sample directory.Build.bat builds the sample by default.

Sample build output bin\Release\brotlig.exe.

Using the sample:

  • Brotli-G CPU compression: brotlig.exe <filepath>
  • Brotli-G CPU deccompression: brotlig.exe <filepath>.brotlig
  • Brotli-G GPU decompression: brotlig.exe -gpu <filepath>.brotlig
  • Help: brotlig.exe

More Repositories

1

VulkanMemoryAllocator

Easy to integrate Vulkan memory allocation library
C
2,214
star
2

RadeonRays_SDK

Radeon Rays is ray intersection acceleration library for hardware and software multiplatforms using CPU and GPU
C++
1,032
star
3

V-EZ

C
839
star
4

Cauldron

A simple framework for rapid prototyping on Vulkan or Direct3D 12
C++
821
star
5

D3D12MemoryAllocator

Easy to integrate memory allocation library for Direct3D 12
C++
740
star
6

FidelityFX-SDK

The main repository for the FidelityFX SDK.
C++
685
star
7

AMF

The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing
C++
516
star
8

RadeonProRenderBlenderAddon

This hardware-agnostic rendering plug-in for Blender uses accurate ray-tracing technology to produce images and animations of your scenes, and provides real-time interactive rendering and continuous adjustment of effects.
Python
481
star
9

Capsaicin

AMD ARR team rendering framework
C
363
star
10

BlenderUSDHydraAddon

This add-on allows you to assemble and compose USD data with Blender data and render it all using various renderers via Hydra.
Python
350
star
11

RadeonProRender-Baikal

C++
334
star
12

RenderPipelineShaders

Render Pipeline Shaders SDK
C++
268
star
13

AGS_SDK

AMD GPU Services (AGS) library and samples
C++
232
star
14

RadeonProRenderSDK

AMD Radeonโ„ข ProRender is a powerful physically-based path traced rendering engine that enables creative professionals to produce stunningly photorealistic images.
C
220
star
15

RadeonProRenderUSD

This plug-in allows GPU or CPU accelerated viewport rendering on all OpenCL 1.2 hardware for the open source USD and Hydra system. You can build this plug-in as a USDView plug-in or a Houdini plug-in.
C++
212
star
16

Orochi

C++
197
star
17

MxGPU-Virtualization

C
176
star
18

Radeon-ReLive-VR

157
star
19

OCL-SDK

140
star
20

HelloD3D12

Introductory DirectX 12 sample
C
138
star
21

TAN

AMD TrueAudio Next is a software development kit for GPU accelerated audio signal processing
C++
133
star
22

ForwardPlus11

AMD Forward+ sample based on DirectX 11
C++
131
star
23

display-library

AMD Display Library SDK
HTML
115
star
24

HelloVulkan

Introductory Vulkan sample
C
115
star
25

glTFSample

A simple demo to show off the capabilities of the Cauldron framework
C++
112
star
26

GPUParticles11

AMD GPU particles sample based on DirectX 11
C++
105
star
27

LiquidVR

The LiquidVRโ„ข SDK is a platform based on DirectX 11 designed to simplify and optimize VR development
C++
102
star
28

HIPRT

C++
91
star
29

RadeonML

C
81
star
30

TiledLighting11

AMD compute-based tiled lighting sample based on DirectX 11
C++
71
star
31

Tessellation

OpenGL sample that demonstrates terrain tessellation on the GPU
C++
61
star
32

GameEngineIntegrations

Information about example integrations of GPUOpen technology into game engines
55
star
33

cpu-core-counts

A sample demonstrating how to correctly detect physical core and logical processor counts on AMD processors.
C++
53
star
34

HIPRTSDK

C
53
star
35

RadeonImageFilter

C++
49
star
36

RadeonProRenderMayaPlugin

This hardware-agnostic rendering plug-in for Maya uses accurate ray-tracing technology to produce images and animations of your scenes, and provides real-time interactive rendering and continuous adjustment of effects.
C++
46
star
37

SSAA11

AMD supersample anti-aliasing (SSAA) sample based on DirectX 11
C++
41
star
38

RapidFire_SDK

RapidFire SDK - interface for cloud gaming and virtualization (VDI)
C++
36
star
39

MLAA11

AMD morphological anti-aliasing (MLAA) sample based on DirectX 11
C++
35
star
40

SilhouetteTessellation11

AMD tessellation sample based on DirectX 11
C++
34
star
41

SPARSEtextures

OpenGL sample demonstrating the GL_AMD_sparse_texture extension introduced by the AMD FirePro W and Radeon HD 7000 series
C++
30
star
42

ADLX

AMD Device Library eXtra
HTML
29
star
43

SeparableFilter11

AMD separable filter sample based on DirectX 11
C++
27
star
44

CrossfireAPI11

AMD Crossfire API sample for DirectX 11
C++
26
star
45

DepthBoundsTest11

AMD depth bounds test DirectX 11 driver extension sample
C++
23
star
46

RenderStudioKit

C++
23
star
47

RadeonProRenderUE

C++
21
star
48

Vulkan-Samples

based on Khronos Vulkan-Samples
C++
19
star
49

DOPPEngine

C++
18
star
50

Framelock

OpenGL sample that demonstrates how to enable Framelock in an application
C++
18
star
51

FreesyncPremiumProSample

A simple demo to show Freesync Premium Pro integration into DX12 and Vulkan API.
C++
18
star
52

DirectGMA_P2P

Samples showing FIrePro DirectGMA features in OpenGL and OpenCL
C++
17
star
53

VkMBCNT

Vulkan mbcnt sample that shows how to use the AMD_shader_ballot extension and mbcnt to perform a fast reduction within a wavefront
C++
16
star
54

Cauldron-Media

A selection of media files needed by Cauldron samples
16
star
55

RadeonProRenderANARI

C++
15
star
56

UnityIntegrations

Examples that demonstrate game integration with some of the libraries and SDKs available on GPUOpen.
C
15
star
57

OutOfOrderRasterization

Vulkan sample built on the Anvil framework
15
star
58

Barycentrics11

Barycentric coordinates GCN shader extension sample for DirectX 11
HLSL
14
star
59

DOPP

C++
14
star
60

Barycentrics12

Barycentric coordinates GCN shader extension sample for DirectX 12
C++
12
star
61

DirectStorageSample

Demonstrating the advantages of using DirectStorage over standard file I/O asset loading. Includes the API and changes required to make such a pipeline work.
C++
11
star
62

RadeonProRenderMaxPlugin

C++
10
star
63

VkD3DDeviceMapping

Simple example to show how to map devices between Vulkan and Direct3D
C++
8
star
64

WorkGraphComputeRasterizer

A compute/workgraph workload running inside the Cauldron framework
C++
8
star
65

RadeonProRender-Tests

7
star
66

WorkGraphsHelloWorkGraphs

C++
5
star
67

WorkGraphsDirectX-Graphics-Samples

A fork of https://github.com/microsoft/DirectX-Graphics-Samples modified to include a sample for Work Graphs
C++
5
star
68

RadeonProRenderMayaUSD

C++
2
star
69

RadeonProRenderSharedComponents

C++
2
star
70

RadeonProRenderSDKKernels

2
star
71

CapsaicinTestMedia

Capsaicin Framework test media assets
1
star