Change fp16_vector_atomic to not require other SPIR-V atomic extensions
This commit is contained in:
parent
78e5d7976e
commit
2518af09c8
2 changed files with 33 additions and 34 deletions
|
|
@ -7849,19 +7849,20 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
|
||||||
opCode = spv::OpAtomicIAdd;
|
opCode = spv::OpAtomicIAdd;
|
||||||
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
||||||
opCode = spv::OpAtomicFAddEXT;
|
opCode = spv::OpAtomicFAddEXT;
|
||||||
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add);
|
if (typeProxy == glslang::EbtFloat16 &&
|
||||||
if (typeProxy == glslang::EbtFloat16) {
|
(opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
|
||||||
if (opType.getVectorSize() == 2 || opType.getVectorSize() == 4) {
|
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
||||||
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
} else {
|
||||||
} else {
|
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add);
|
||||||
|
if (typeProxy == glslang::EbtFloat16) {
|
||||||
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add);
|
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add);
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16AddEXT);
|
builder.addCapability(spv::CapabilityAtomicFloat16AddEXT);
|
||||||
|
} else if (typeProxy == glslang::EbtFloat) {
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat32AddEXT);
|
||||||
|
} else {
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat64AddEXT);
|
||||||
}
|
}
|
||||||
} else if (typeProxy == glslang::EbtFloat) {
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat32AddEXT);
|
|
||||||
} else {
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat64AddEXT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -7874,19 +7875,19 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
|
||||||
case glslang::EOpAtomicCounterMin:
|
case glslang::EOpAtomicCounterMin:
|
||||||
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
||||||
opCode = spv::OpAtomicFMinEXT;
|
opCode = spv::OpAtomicFMinEXT;
|
||||||
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
|
if (typeProxy == glslang::EbtFloat16 &&
|
||||||
if (typeProxy == glslang::EbtFloat16) {
|
(opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
|
||||||
if (opType.getVectorSize() == 2 || opType.getVectorSize() == 4) {
|
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
||||||
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
} else {
|
||||||
} else {
|
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
|
||||||
|
if (typeProxy == glslang::EbtFloat16)
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
|
builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
|
||||||
}
|
else if (typeProxy == glslang::EbtFloat)
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
|
||||||
|
else
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
|
||||||
}
|
}
|
||||||
else if (typeProxy == glslang::EbtFloat)
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
|
|
||||||
else
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
|
|
||||||
} else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
|
} else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
|
||||||
opCode = spv::OpAtomicUMin;
|
opCode = spv::OpAtomicUMin;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -7898,19 +7899,19 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
|
||||||
case glslang::EOpAtomicCounterMax:
|
case glslang::EOpAtomicCounterMax:
|
||||||
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
|
||||||
opCode = spv::OpAtomicFMaxEXT;
|
opCode = spv::OpAtomicFMaxEXT;
|
||||||
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
|
if (typeProxy == glslang::EbtFloat16 &&
|
||||||
if (typeProxy == glslang::EbtFloat16) {
|
(opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
|
||||||
if (opType.getVectorSize() == 2 || opType.getVectorSize() == 4) {
|
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
||||||
builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
|
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
|
} else {
|
||||||
} else {
|
builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
|
||||||
|
if (typeProxy == glslang::EbtFloat16)
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
|
builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
|
||||||
}
|
else if (typeProxy == glslang::EbtFloat)
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
|
||||||
|
else
|
||||||
|
builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
|
||||||
}
|
}
|
||||||
else if (typeProxy == glslang::EbtFloat)
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
|
|
||||||
else
|
|
||||||
builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
|
|
||||||
} else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
|
} else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
|
||||||
opCode = spv::OpAtomicUMax;
|
opCode = spv::OpAtomicUMax;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@ spv.nvAtomicFp16Vec.frag
|
||||||
Capability StorageImageExtendedFormats
|
Capability StorageImageExtendedFormats
|
||||||
Capability StorageUniformBufferBlock16
|
Capability StorageUniformBufferBlock16
|
||||||
Capability AtomicFloat16VectorNV
|
Capability AtomicFloat16VectorNV
|
||||||
Extension "SPV_EXT_shader_atomic_float_add"
|
|
||||||
Extension "SPV_EXT_shader_atomic_float_min_max"
|
|
||||||
Extension "SPV_KHR_16bit_storage"
|
Extension "SPV_KHR_16bit_storage"
|
||||||
Extension "SPV_NV_shader_atomic_fp16_vector"
|
Extension "SPV_NV_shader_atomic_fp16_vector"
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue