diff options
| author | Jasper St. Pierre <jstpierre@mecheye.net> | 2013-12-07 15:14:29 -0500 |
|---|---|---|
| committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2013-12-31 14:03:19 -0500 |
| commit | 34692ab826abc8f8faa61bdb2280b742424528f1 (patch) | |
| tree | b0eedc645badbea316ff59c125eaf808b28777ec /Source/Core/VideoBackends/D3D/TextureEncoder.h | |
| parent | 43e618682e8093602fc83dfa902ee7ae3fd3a4f6 (diff) | |
Remove unnecessary Src/ folders
Diffstat (limited to 'Source/Core/VideoBackends/D3D/TextureEncoder.h')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/TextureEncoder.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/D3D/TextureEncoder.h b/Source/Core/VideoBackends/D3D/TextureEncoder.h new file mode 100644 index 0000000000..d97434d380 --- /dev/null +++ b/Source/Core/VideoBackends/D3D/TextureEncoder.h @@ -0,0 +1,122 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#ifndef _TEXTUREENCODER_H +#define _TEXTUREENCODER_H + +#include "VideoCommon.h" + +namespace DX11 +{ + +// 4-bit format: 8x8 texels / cache line +// 8-bit format: 8x4 texels / cache line +// 16-bit format: 4x4 texels / cache line +// 32-bit format: 4x4 texels / 2 cache lines +// Compressed format: 8x8 texels / cache line + +// Document EFB encoding formats here with examples of where they are used. + +// Format: 0 - R4 +// Used in The Legend of Zelda: The Wind Waker for character shadows (srcFormat 1, +// isIntensity 1, scaleByHalf 1). + +// Format: 1 - R8 +// FIXME: Unseen. May or may not be a duplicate of format 8. + +// Format: 2 - A4 R4 +// FIXME: Unseen. + +// Format: 3 - A8 R8 +// FIXME: Unseen. + +// Format: 4 - R5 G6 B5 +// Used in Wind Waker for most render-to-texture effects like heat shimmer and +// depth-of-field. + +// Format: 5 - 1 R5 G5 B5 or 0 A3 R4 G4 B4 +// Used in Twilight Princess for character shadows. + +// Format: 6 - A8 R8 A8 R8 | G8 B8 G8 B8 +// Used in Twilight Princess for bloom effect. + +// Format: 7 - A8 +// Used in Metroid Prime 2 for the scan visor. + +// Format: 8 - R8 +// Used in Twilight Princess for the map. + +// Format: 9 - G8 +// FIXME: Unseen. + +// Format: A - B8 +// Used in Metroid Prime 2 for the scan visor. + +// Format: B - G8 R8 +// Used in Wind Waker for depth-of-field. Usually used with srcFormat 3 to +// render depth textures. The bytes are swapped, so games have to correct it +// in RAM before using it as a texture. + +// Format: C - B8 G8 +// FIXME: Unseen. + +const unsigned int BLOCK_WIDTHS[16] = { + 8, // R4 + 8, // R8 (FIXME: duplicate of R8 below?) + 8, // A4 R4 + 4, // A8 R8 + 4, // R5 G6 B5 + 4, // 1 R5 G5 B5 or 0 A3 R4 G4 B4 + 4, // A8 R8 A8 R8 | G8 B8 G8 B8 (two cache lines) + 8, // A8 + 8, // R8 (FIXME: duplicate of R8 above?) + 8, // G8 + 8, // B8 + 4, // G8 R8 + 4, // B8 G8 + 0, 0, 0 // Unknown formats +}; + +const unsigned int BLOCK_HEIGHTS[16] = { + 8, // R4 + 4, // R8 (FIXME: duplicate of R8 below?) + 4, // A4 R4 + 4, // A8 R8 + 4, // R5 G6 B5 + 4, // 1 R5 G5 B5 or 0 A3 R4 G4 B4 + 4, // A8 R8 A8 R8 | G8 B8 G8 B8 (two cache lines) + 4, // A8 + 4, // R8 (FIXME: duplicate of R8 above?) + 4, // G8 + 4, // B8 + 4, // G8 R8 + 4, // B8 G8 + 0, 0, 0 // Unknown formats +}; + +// Maximum number of bytes that can occur in a texture block-row generated by +// the encoder +static const UINT MAX_BYTES_PER_BLOCK_ROW = (EFB_WIDTH/4)*64; +// The maximum amount of data that the texture encoder can generate in one call +static const UINT MAX_BYTES_PER_ENCODE = MAX_BYTES_PER_BLOCK_ROW*(EFB_HEIGHT/4); + +class TextureEncoder +{ + +public: + + virtual ~TextureEncoder() { } + + virtual void Init() = 0; + virtual void Shutdown() = 0; + // Returns size in bytes of encoded block of memory + virtual size_t Encode(u8* dst, unsigned int dstFormat, + unsigned int srcFormat, const EFBRectangle& srcRect, bool isIntensity, + bool scaleByHalf) = 0; + +}; + +} + +#endif |
