Skip to content

Commit

Permalink
Create Texture Engine unit
Browse files Browse the repository at this point in the history
  • Loading branch information
S2S authored and gonetz committed May 10, 2020
1 parent a140f0a commit a405ad8
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
79 changes: 79 additions & 0 deletions src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,8 @@ class ShaderFragmentGlobalVariablesTex : public ShaderPart
"uniform lowp int uScreenSpaceTriangle; \n"
"highp vec2 texCoord0; \n"
"highp vec2 texCoord1; \n"
"highp vec2[5] tcData0; \n"
"highp vec2[5] tcData1; \n"
;

if (config.generalEmulation.enableLegacyBlending != 0) {
Expand Down Expand Up @@ -1083,6 +1085,18 @@ class ShaderFragmentHeaderClampWrapMirror : public ShaderPart
}
};

class ShaderFragmentHeaderTextureEngine : public ShaderPart
{
public:
ShaderFragmentHeaderTextureEngine(const opengl::GLInfo & _glinfo)
{
m_part =
"lowp vec2[5] textureEngine0(in highp vec2 texCoord); \n"
"lowp vec2[5] textureEngine1(in highp vec2 texCoord); \n"
;
}
};

class ShaderFragmentHeaderReadMSTex : public ShaderPart
{
public:
Expand Down Expand Up @@ -2429,6 +2443,59 @@ class ShaderClampWrapMirror : public ShaderPart
}
};

class ShaderTextureEngine : public ShaderPart
{
public:
ShaderTextureEngine(const opengl::GLInfo _glinfo) {
m_part =

"highp vec2[5] textureEngine0(in highp vec2 texCoord) \n"
"{ \n"
" highp vec2[5] tcData; \n" // {tc00, tc01, tc10, tc11, frPart}
" mediump vec2 intPart = floor(texCoord); \n"
" tcData[0] = clampWrapMirror(intPart, uTexWrap0, uTexClamp0, uTexClampEn0, uTexMirrorEn0); \n"
" tcData[3] = clampWrapMirror(intPart + vec2(1.0,1.0), uTexWrap0, uTexClamp0, uTexClampEn0, uTexMirrorEn0); \n"
" tcData[1] = vec2(tcData[0].s, tcData[3].t); \n"
" tcData[2] = vec2(tcData[3].s, tcData[0].t); \n"
" tcData[4] = texCoord - intPart; \n"
" return tcData;"
"} \n"
"highp vec2[5] textureEngine1(in highp vec2 texCoord) \n"
"{ \n"
" highp vec2[5] tcData; \n" // {tc00, tc01, tc10, tc11, frPart}
" mediump vec2 intPart = floor(texCoord); \n"
" tcData[0] = clampWrapMirror(intPart, uTexWrap1, uTexClamp1, uTexClampEn1, uTexMirrorEn1); \n"
" tcData[3] = clampWrapMirror(intPart + vec2(1.0,1.0), uTexWrap1, uTexClamp1, uTexClampEn1, uTexMirrorEn1); \n"
" tcData[1] = vec2(tcData[0].s, tcData[3].t); \n"
" tcData[2] = vec2(tcData[3].s, tcData[0].t); \n"
" tcData[4] = texCoord - intPart; \n"
" return tcData;"
"} \n"
;
}
};


class ShaderFragmentTextureEngineTex0 : public ShaderPart {
public:
ShaderFragmentTextureEngineTex0(const opengl::GLInfo _glinfo)
{
m_part =
"tcData0 = textureEngine0(vTexCoord0); \n"
;
}
};

class ShaderFragmentTextureEngineTex1 : public ShaderPart {
public:
ShaderFragmentTextureEngineTex1(const opengl::GLInfo _glinfo)
{
m_part =
"tcData1 = textureEngine1(vTexCoord1); \n"
;
}
};

/*---------------ShaderPartsEnd-------------*/

static
Expand Down Expand Up @@ -2598,6 +2665,7 @@ graphics::CombinerProgram * CombinerProgramBuilder::buildCombinerProgram(Combine
m_fragmentHeaderDepthCompare->write(ssShader);
m_fragmentHeaderReadMSTex->write(ssShader);
m_fragmentHeaderClampWrapMirror->write(ssShader);
m_fragmentHeaderTextureEngine->write(ssShader);
if (bUseLod)
m_fragmentHeaderMipMap->write(ssShader);
else if (g_cycleType < G_CYC_COPY)
Expand Down Expand Up @@ -2631,9 +2699,15 @@ graphics::CombinerProgram * CombinerProgramBuilder::buildCombinerProgram(Combine

if (bUseTextures) {
if (combinerInputs.usesTile(0))
{
m_fragmentClampWrapMirrorTex0->write(ssShader);
m_fragmentTextureEngineTex0->write(ssShader);
}
if (combinerInputs.usesTile(1))
{
m_fragmentClampWrapMirrorTex1->write(ssShader);
m_fragmentTextureEngineTex1->write(ssShader);
}

if (bUseLod) {
m_fragmentReadTexMipmap->write(ssShader);
Expand Down Expand Up @@ -2673,6 +2747,7 @@ graphics::CombinerProgram * CombinerProgramBuilder::buildCombinerProgram(Combine

if (bUseTextures) {
m_shaderClampWrapMirror->write(ssShader);
m_shaderTextureEngine->write(ssShader);
if (bUseLod)
m_shaderMipmap->write(ssShader);
else {
Expand Down Expand Up @@ -2784,6 +2859,7 @@ CombinerProgramBuilder::CombinerProgramBuilder(const opengl::GLInfo & _glinfo, o
, m_fragmentHeaderCalcLight(new ShaderFragmentHeaderCalcLight(_glinfo))
, m_fragmentHeaderMipMap(new ShaderFragmentHeaderMipMap(_glinfo))
, m_fragmentHeaderClampWrapMirror(new ShaderFragmentHeaderClampWrapMirror(_glinfo))
, m_fragmentHeaderTextureEngine(new ShaderFragmentHeaderTextureEngine(_glinfo))
, m_fragmentHeaderReadMSTex(new ShaderFragmentHeaderReadMSTex(_glinfo))
, m_fragmentHeaderDither(new ShaderFragmentHeaderDither(_glinfo))
, m_fragmentHeaderDepthCompare(new ShaderFragmentHeaderDepthCompare(_glinfo))
Expand All @@ -2796,6 +2872,8 @@ CombinerProgramBuilder::CombinerProgramBuilder(const opengl::GLInfo & _glinfo, o
, m_fragmentReadTex1(new ShaderFragmentReadTex1(_glinfo))
, m_fragmentClampWrapMirrorTex0(new ShaderFragmentClampWrapMirrorTex0(_glinfo))
, m_fragmentClampWrapMirrorTex1(new ShaderFragmentClampWrapMirrorTex1(_glinfo))
, m_fragmentTextureEngineTex0(new ShaderFragmentTextureEngineTex0(_glinfo))
, m_fragmentTextureEngineTex1(new ShaderFragmentTextureEngineTex1(_glinfo))
, m_fragmentReadTexCopyMode(new ShaderFragmentReadTexCopyMode(_glinfo))
, m_fragmentReadTexMipmap(new ShaderFragmentReadTexMipmap(_glinfo))
, m_fragmentCallN64Depth(new ShaderFragmentCallN64Depth(_glinfo))
Expand All @@ -2811,6 +2889,7 @@ CombinerProgramBuilder::CombinerProgramBuilder(const opengl::GLInfo & _glinfo, o
, m_shaderN64DepthCompare(new ShaderN64DepthCompare(_glinfo))
, m_shaderN64DepthRender(new ShaderN64DepthRender(_glinfo))
, m_shaderClampWrapMirror(new ShaderClampWrapMirror(_glinfo))
, m_shaderTextureEngine(new ShaderTextureEngine(_glinfo))
, m_useProgram(_useProgram)
, m_combinerOptionsBits(graphics::CombinerProgram::getShaderCombinerOptionsBits())
{
Expand Down
4 changes: 4 additions & 0 deletions src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ namespace glsl {
ShaderPartPtr m_fragmentHeaderCalcLight;
ShaderPartPtr m_fragmentHeaderMipMap;
ShaderPartPtr m_fragmentHeaderClampWrapMirror;
ShaderPartPtr m_fragmentHeaderTextureEngine;
ShaderPartPtr m_fragmentHeaderReadMSTex;
ShaderPartPtr m_fragmentHeaderDither;
ShaderPartPtr m_fragmentHeaderDepthCompare;
Expand All @@ -75,6 +76,8 @@ namespace glsl {
ShaderPartPtr m_fragmentReadTex1;
ShaderPartPtr m_fragmentClampWrapMirrorTex0;
ShaderPartPtr m_fragmentClampWrapMirrorTex1;
ShaderPartPtr m_fragmentTextureEngineTex0;
ShaderPartPtr m_fragmentTextureEngineTex1;
ShaderPartPtr m_fragmentReadTexCopyMode;
ShaderPartPtr m_fragmentReadTexMipmap;
ShaderPartPtr m_fragmentCallN64Depth;
Expand All @@ -91,6 +94,7 @@ namespace glsl {
ShaderPartPtr m_shaderN64DepthCompare;
ShaderPartPtr m_shaderN64DepthRender;
ShaderPartPtr m_shaderClampWrapMirror;
ShaderPartPtr m_shaderTextureEngine;

std::unique_ptr<CombinerProgramUniformFactory> m_uniformFactory;

Expand Down

0 comments on commit a405ad8

Please sign in to comment.