1#ifndef FFLI_COMPRESSOR_IMPL_H_
2#define FFLI_COMPRESSOR_IMPL_H_
4#include <nn/ffl/FFLiCompressShader.h>
5#include <nn/ffl/FFLiContextState.h>
6#include <nn/ffl/FFLiInvalidate.h>
7#include <nn/ffl/FFLiTemp.h>
8#include <nn/ffl/FFLiTexture.h>
10#include <nn/ffl/detail/FFLiBufferAllocator.h>
11#include <nn/ffl/detail/FFLiCompressDrawer.h>
12#include <nn/ffl/detail/FFLiCompressorDesc.h>
13#include <nn/ffl/detail/FFLiCompressorParam.h>
27 bool SetupCPU(
const void* pShaderData, u32 shaderIndex);
56 u32 bufferSize = GetBufferSize(pShaderData, shaderIndex);
57 void* pBuffer = pAllocator->Allocate(bufferSize);
59 m_BufferAllocator.Init(pBuffer, bufferSize);
70 u32 bufferSize = FFLiContextState::GetBufferSize();
71 bufferSize += FFLiCompressShader::GetBufferSize(pShaderData, shaderIndex);
72 bufferSize += FFLiCompressDrawer::GetBufferSize();
81 GX2InitTexture(&texture, width, height, 1, numMips, T::FORMAT, GX2_SURFACE_DIM_2D);
82 return texture.surface.alignment * 2 + texture.surface.imageSize + texture.surface.mipSize;
88 m_ContextState.Initialize(&m_BufferAllocator);
90 if (!m_CompressShader.SetupCPU(pShaderData, shaderIndex, &m_BufferAllocator))
93 m_CompressDrawer.SetupCPU(&m_BufferAllocator);
100 m_CompressShader.SetupGPU();
102 m_ContextState.Setup();
103 m_ContextState.Bind();
104 FFLiTempSetShaderMode(UseUB() ? GX2_SHADER_MODE_UNIFORM_BLOCK : GX2_SHADER_MODE_UNIFORM_REGISTER);
105 GX2SetTargetChannelMasks(
106 GX2_CHANNEL_MASK_RGBA,
107 GX2_CHANNEL_MASK_NONE,
108 GX2_CHANNEL_MASK_NONE,
109 GX2_CHANNEL_MASK_NONE,
110 GX2_CHANNEL_MASK_NONE,
111 GX2_CHANNEL_MASK_NONE,
112 GX2_CHANNEL_MASK_NONE,
113 GX2_CHANNEL_MASK_NONE
115 GX2SetAlphaTest(GX2_DISABLE, GX2_COMPARE_ALWAYS, 0.0f);
116 GX2SetColorControl(GX2_LOGIC_OP_NONE, 0xFF, GX2_DISABLE, GX2_ENABLE);
117 GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_LESS);
118 GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, GX2_DISABLE, GX2_ENABLE);
124 GX2_BLEND_COMBINE_ADD,
130 GX2_BLEND_COMBINE_ADD
132 m_CompressShader.Bind();
133 FFLiTempSetContextState(NULL);
139 return m_CompressShader.UseUB();
145 m_ContextState.Bind();
147 GX2ColorBuffer* pColorBuffer = &m_ColorBuffer;
149 m_CompressShader.SetTexture(pSrc);
152 for (u32 i = 0; i < pDst->surface.numMips; i++)
154 T::SetupColorBuffer(pColorBuffer, pDst, i);
156 GX2SetColorBuffer(pColorBuffer, GX2_RENDER_TARGET_0);
158 u32 width = FFLiCalculateUnitTextureResolution(pDst->surface.width, i) >> i;
159 u32 height = FFLiCalculateUnitTextureResolution(pDst->surface.height, i) >> i;
160 GX2SetViewport(0.0f, 0.0f, width, height, 0.0f, 1.0f);
161 GX2SetScissor(0, 0, width, height);
163 m_CompressShader.SetUniform(pParam->GetUniform(i));
167 FFLiInvalidateColorBuffer(pColorBuffer);
168 FFLiInvalidateTexture(pDst);
NN_STATIC_ASSERT(sizeof(FFLiAllocator)==4)
FFLiCompressorImpl< FFLiCompressorDescBC3 > FFLiCompressorImplBC3
Definition FFLiCompressorImpl.h:43
FFLiCompressorImpl< FFLiCompressorDescBC1 > FFLiCompressorImplBC1
Definition FFLiCompressorImpl.h:42
Definition FFLiBufferAllocator.h:16
Definition FFLiCompressDrawer.h:9
void SetupGPU()
Definition FFLiCompressDrawer.cpp:42
void Draw()
Definition FFLiCompressDrawer.cpp:60
FFLiCompressDrawer()
Definition FFLiCompressDrawer.cpp:8
Definition FFLiCompressShader.h:12
Definition FFLiCompressorImpl.h:19
FFLiCompressDrawer m_CompressDrawer
Definition FFLiCompressorImpl.h:38
static u32 GetBufferSize(const void *pShaderData, u32 shaderIndex)
Definition FFLiCompressorImpl.h:68
~FFLiCompressorImpl()
Definition FFLiCompressorImpl.h:63
bool SetupCPU(const void *pShaderData, u32 shaderIndex)
Definition FFLiCompressorImpl.h:86
static u32 GetTextureBufferSize(u32 width, u32 height, u32 numMips)
Definition FFLiCompressorImpl.h:78
GX2ColorBuffer m_ColorBuffer
Definition FFLiCompressorImpl.h:39
bool UseUB() const
Definition FFLiCompressorImpl.h:137
FFLiCompressorImpl(FFLiBufferAllocator *pAllocator, const void *pShaderData, u32 shaderIndex)
Definition FFLiCompressorImpl.h:49
FFLiContextState m_ContextState
Definition FFLiCompressorImpl.h:36
void SetupGPU()
Definition FFLiCompressorImpl.h:98
void CompressImpl(GX2Texture *pDst, const GX2Texture *pSrc, const FFLiCompressorParam *pParam)
Definition FFLiCompressorImpl.h:143
FFLiCompressShader m_CompressShader
Definition FFLiCompressorImpl.h:37
FFLiBufferAllocator m_BufferAllocator
Definition FFLiCompressorImpl.h:35
Definition FFLiCompressorParam.h:12
Definition FFLiContextState.h:11
Definition FFLiCompressorDesc.h:9
Definition FFLiCompressorDesc.h:19