mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-01-08 08:00:44 +01:00
implement gather sampling
This commit is contained in:
parent
074f9f6f3e
commit
ccd72bfe45
@ -2186,7 +2186,6 @@ static void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContex
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto texDim = shaderContext->shader->textureUnitDim[texInstruction->textureFetch.textureIndex];
|
auto texDim = shaderContext->shader->textureUnitDim[texInstruction->textureFetch.textureIndex];
|
||||||
bool isCompare = shaderContext->shader->textureUsesDepthCompare[texInstruction->textureFetch.textureIndex];
|
|
||||||
|
|
||||||
char tempBuffer0[32];
|
char tempBuffer0[32];
|
||||||
char tempBuffer1[32];
|
char tempBuffer1[32];
|
||||||
@ -2246,6 +2245,9 @@ static void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContex
|
|||||||
src->add(" = (");
|
src->add(" = (");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isCompare = shaderContext->shader->textureUsesDepthCompare[texInstruction->textureFetch.textureIndex];
|
||||||
|
bool isGather = (texOpcode == GPU7_TEX_INST_FETCH4);
|
||||||
|
|
||||||
bool unnormalizationHandled = false;
|
bool unnormalizationHandled = false;
|
||||||
bool useTexelCoordinates = false;
|
bool useTexelCoordinates = false;
|
||||||
|
|
||||||
@ -2267,7 +2269,6 @@ static void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContex
|
|||||||
if ((texOpcode == GPU7_TEX_INST_SAMPLE && (texInstruction->textureFetch.unnormalized[0] && texInstruction->textureFetch.unnormalized[1] && texInstruction->textureFetch.unnormalized[2] && texInstruction->textureFetch.unnormalized[3])) ||
|
if ((texOpcode == GPU7_TEX_INST_SAMPLE && (texInstruction->textureFetch.unnormalized[0] && texInstruction->textureFetch.unnormalized[1] && texInstruction->textureFetch.unnormalized[2] && texInstruction->textureFetch.unnormalized[3])) ||
|
||||||
texOpcode == GPU7_TEX_INST_LD)
|
texOpcode == GPU7_TEX_INST_LD)
|
||||||
{
|
{
|
||||||
// texture is likely a RECT
|
|
||||||
if (hasOffset)
|
if (hasOffset)
|
||||||
cemu_assert_unimplemented();
|
cemu_assert_unimplemented();
|
||||||
src->add("read(");
|
src->add("read(");
|
||||||
@ -2276,7 +2277,10 @@ static void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContex
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
src->add("sample");
|
if (isGather)
|
||||||
|
src->add("gather");
|
||||||
|
else
|
||||||
|
src->add("sample");
|
||||||
if (isCompare)
|
if (isCompare)
|
||||||
src->add("_compare");
|
src->add("_compare");
|
||||||
src->addFmt("(samplr{}, ", texInstruction->textureFetch.textureIndex);
|
src->addFmt("(samplr{}, ", texInstruction->textureFetch.textureIndex);
|
||||||
@ -2531,7 +2535,7 @@ static void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContex
|
|||||||
if( texInstruction->dstSel[f] < 4 )
|
if( texInstruction->dstSel[f] < 4 )
|
||||||
{
|
{
|
||||||
uint8 elemIndex = texInstruction->dstSel[f];
|
uint8 elemIndex = texInstruction->dstSel[f];
|
||||||
if (texOpcode == GPU7_TEX_INST_FETCH4)
|
if (isGather)
|
||||||
{
|
{
|
||||||
// 's textureGather() and GPU7's FETCH4 instruction have a different order of elements
|
// 's textureGather() and GPU7's FETCH4 instruction have a different order of elements
|
||||||
// xyzw: top-left, top-right, bottom-right, bottom-left
|
// xyzw: top-left, top-right, bottom-right, bottom-left
|
||||||
|
@ -968,6 +968,8 @@ void MetalRenderer::draw_execute(uint32 baseVertex, uint32 baseInstance, uint32
|
|||||||
|
|
||||||
// Blend color
|
// Blend color
|
||||||
float* blendColorConstant = (float*)LatteGPUState.contextRegister + Latte::REGADDR::CB_BLEND_RED;
|
float* blendColorConstant = (float*)LatteGPUState.contextRegister + Latte::REGADDR::CB_BLEND_RED;
|
||||||
|
|
||||||
|
// TODO: only set when changed
|
||||||
renderCommandEncoder->setBlendColor(blendColorConstant[0], blendColorConstant[1], blendColorConstant[2], blendColorConstant[3]);
|
renderCommandEncoder->setBlendColor(blendColorConstant[0], blendColorConstant[1], blendColorConstant[2], blendColorConstant[3]);
|
||||||
|
|
||||||
// polygon control
|
// polygon control
|
||||||
|
Loading…
Reference in New Issue
Block a user