Skip to content

Commit 51b40f9

Browse files
skarczewsys_zuul
authored andcommitted
Fix for bindless sampler: ldraw case
Change-Id: Ib7f4e727579a11ed020d3e1ad454addefcbbcb18
1 parent 303c4f1 commit 51b40f9

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15998,36 +15998,38 @@ SamplerDescriptor EmitPass::GetSamplerVariable(Value* sampleOp)
1599815998
unsigned int samplerIdx = 0;
1599915999
BufferType sampType = BUFFER_TYPE_UNKNOWN;
1600016000

16001-
if (isa<GenIntrinsicInst>(sampleOp)) // from GetBufferPtr
16001+
if (GenIntrinsicInst* sample = dyn_cast<GenIntrinsicInst>(sampleOp))
16002+
{
16003+
if (sample->getIntrinsicID() == GenISAIntrinsic::GenISA_GetBufferPtr)
16004+
{
16005+
Value* bufTyVal = cast<GenIntrinsicInst>(sampleOp)->getOperand(1);
16006+
assert(isa<ConstantInt>(bufTyVal));
16007+
sampType = (BufferType)(cast<ConstantInt>(bufTyVal)->getZExtValue());
16008+
sampler.m_sampler = GetSymbol(sampleOp);
16009+
assert(sampType == SAMPLER);
16010+
sampler.m_samplerType = ESAMPLER_NORMAL;
16011+
return sampler;
16012+
}
16013+
}
16014+
16015+
bool isBindless = false;
16016+
bool directIdx = false;
16017+
16018+
sampType = DecodeAS4GFXResource(
16019+
sampleOp->getType()->getPointerAddressSpace(),
16020+
directIdx, samplerIdx);
16021+
isBindless = (sampType == BINDLESS_SAMPLER);
16022+
sampler.m_samplerType =
16023+
isBindless ? ESAMPLER_BINDLESS : ESAMPLER_NORMAL;
16024+
16025+
if (isBindless || !directIdx)
1600216026
{
16003-
Value* bufTyVal = cast<GenIntrinsicInst>(sampleOp)->getOperand(1);
16004-
assert(isa<ConstantInt>(bufTyVal));
16005-
sampType = (BufferType)(cast<ConstantInt>(bufTyVal)->getZExtValue());
1600616027
sampler.m_sampler = GetSymbol(sampleOp);
16007-
assert(sampType == SAMPLER);
16008-
sampler.m_samplerType = ESAMPLER_NORMAL;
1600916028
}
1601016029
else
1601116030
{
16012-
bool isBindless = false;
16013-
bool directIdx = false;
16014-
16015-
sampType = DecodeAS4GFXResource(
16016-
sampleOp->getType()->getPointerAddressSpace(),
16017-
directIdx, samplerIdx);
16018-
isBindless = (sampType == BINDLESS_SAMPLER);
16019-
sampler.m_samplerType =
16020-
isBindless ? ESAMPLER_BINDLESS : ESAMPLER_NORMAL;
16021-
16022-
if (isBindless || !directIdx)
16023-
{
16024-
sampler.m_sampler = GetSymbol(sampleOp);
16025-
}
16026-
else
16027-
{
16028-
sampler.m_sampler = m_currShader->ImmToVariable(
16029-
samplerIdx, ISA_TYPE_UD);
16030-
}
16031+
sampler.m_sampler = m_currShader->ImmToVariable(
16032+
samplerIdx, ISA_TYPE_UD);
1603116033
}
1603216034
return sampler;
1603316035
}

0 commit comments

Comments
 (0)