[spirv] Implement proj sample variants

This commit is contained in:
Joshua Ashton 2019-05-03 00:53:44 +01:00 committed by Philip Rebohle
parent f503ba4c8b
commit 7aecd46f93
2 changed files with 106 additions and 0 deletions

View File

@ -2903,6 +2903,44 @@ namespace dxvk {
putImageOperands(operands);
return resultId;
}
uint32_t SpirvModule::opImageSampleProjImplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
const SpirvImageOperands& operands) {
uint32_t resultId = this->allocateId();
m_code.putIns(spv::OpImageSampleProjImplicitLod,
5 + getImageOperandWordCount(operands));
m_code.putWord(resultType);
m_code.putWord(resultId);
m_code.putWord(sampledImage);
m_code.putWord(coordinates);
putImageOperands(operands);
return resultId;
}
uint32_t SpirvModule::opImageSampleProjExplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
const SpirvImageOperands& operands) {
uint32_t resultId = this->allocateId();
m_code.putIns(spv::OpImageSampleProjExplicitLod,
5 + getImageOperandWordCount(operands));
m_code.putWord(resultType);
m_code.putWord(resultId);
m_code.putWord(sampledImage);
m_code.putWord(coordinates);
putImageOperands(operands);
return resultId;
}
uint32_t SpirvModule::opImageSampleDrefImplicitLod(
@ -2946,6 +2984,48 @@ namespace dxvk {
return resultId;
}
uint32_t SpirvModule::opImageSampleProjDrefImplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
uint32_t reference,
const SpirvImageOperands& operands) {
uint32_t resultId = this->allocateId();
m_code.putIns(spv::OpImageSampleProjDrefImplicitLod,
6 + getImageOperandWordCount(operands));
m_code.putWord(resultType);
m_code.putWord(resultId);
m_code.putWord(sampledImage);
m_code.putWord(coordinates);
m_code.putWord(reference);
putImageOperands(operands);
return resultId;
}
uint32_t SpirvModule::opImageSampleProjDrefExplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
uint32_t reference,
const SpirvImageOperands& operands) {
uint32_t resultId = this->allocateId();
m_code.putIns(spv::OpImageSampleProjDrefExplicitLod,
6 + getImageOperandWordCount(operands));
m_code.putWord(resultType);
m_code.putWord(resultId);
m_code.putWord(sampledImage);
m_code.putWord(coordinates);
m_code.putWord(reference);
putImageOperands(operands);
return resultId;
}
uint32_t SpirvModule::opGroupNonUniformBallot(
uint32_t resultType,

View File

@ -1001,6 +1001,18 @@ namespace dxvk {
uint32_t sampledImage,
uint32_t coordinates,
const SpirvImageOperands& operands);
uint32_t opImageSampleProjImplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
const SpirvImageOperands& operands);
uint32_t opImageSampleProjExplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
const SpirvImageOperands& operands);
uint32_t opImageSampleDrefImplicitLod(
uint32_t resultType,
@ -1016,6 +1028,20 @@ namespace dxvk {
uint32_t reference,
const SpirvImageOperands& operands);
uint32_t opImageSampleProjDrefImplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
uint32_t reference,
const SpirvImageOperands& operands);
uint32_t opImageSampleProjDrefExplicitLod(
uint32_t resultType,
uint32_t sampledImage,
uint32_t coordinates,
uint32_t reference,
const SpirvImageOperands& operands);
uint32_t opGroupNonUniformBallot(
uint32_t resultType,
uint32_t execution,