@@ -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