Add GLSL_EXT_shader_tile_image
This commit is contained in:
committed by
arcady-lunarg
parent
a3310b7cff
commit
0bbec2e8f6
@@ -39,6 +39,7 @@ static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_ato
|
||||
static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add";
|
||||
static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max";
|
||||
static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
|
||||
static const char* const E_SPV_EXT_shader_tile_image = "SPV_EXT_shader_tile_image";
|
||||
static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader";
|
||||
|
||||
#endif // #ifndef GLSLextEXT_H
|
||||
|
||||
@@ -351,6 +351,7 @@ spv::Dim TranslateDimensionality(const glslang::TSampler& sampler)
|
||||
case glslang::EsdRect: return spv::DimRect;
|
||||
case glslang::EsdBuffer: return spv::DimBuffer;
|
||||
case glslang::EsdSubpass: return spv::DimSubpassData;
|
||||
case glslang::EsdAttachmentEXT: return spv::DimTileImageDataEXT;
|
||||
default:
|
||||
assert(0);
|
||||
return spv::Dim2D;
|
||||
@@ -1311,6 +1312,11 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
|
||||
return spv::StorageClassInput;
|
||||
if (type.getQualifier().isPipeOutput())
|
||||
return spv::StorageClassOutput;
|
||||
if (type.getQualifier().storage == glslang::EvqTileImageEXT || type.isAttachmentEXT()) {
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT);
|
||||
return spv::StorageClassTileImageEXT;
|
||||
}
|
||||
|
||||
if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
|
||||
type.getQualifier().storage == glslang::EvqUniform) {
|
||||
@@ -1682,6 +1688,24 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
|
||||
builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
|
||||
}
|
||||
|
||||
if (glslangIntermediate->getNonCoherentColorAttachmentReadEXT()) {
|
||||
builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT);
|
||||
builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentColorAttachmentReadEXT);
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
}
|
||||
|
||||
if (glslangIntermediate->getNonCoherentDepthAttachmentReadEXT()) {
|
||||
builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
|
||||
builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentDepthAttachmentReadEXT);
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
}
|
||||
|
||||
if (glslangIntermediate->getNonCoherentStencilAttachmentReadEXT()) {
|
||||
builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
|
||||
builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentStencilAttachmentReadEXT);
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
}
|
||||
|
||||
if (glslangIntermediate->isDepthReplacing())
|
||||
builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
|
||||
|
||||
@@ -5752,6 +5776,17 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
||||
return result;
|
||||
}
|
||||
|
||||
if (cracked.attachmentEXT) {
|
||||
if (opIt != arguments.end()) {
|
||||
spv::IdImmediate sample = { true, *opIt };
|
||||
operands.push_back(sample);
|
||||
}
|
||||
spv::Id result = builder.createOp(spv::OpColorAttachmentReadEXT, resultType(), operands);
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
builder.setPrecision(result, precision);
|
||||
return result;
|
||||
}
|
||||
|
||||
spv::IdImmediate coord = { true, *(opIt++) };
|
||||
operands.push_back(coord);
|
||||
if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
|
||||
@@ -7172,6 +7207,19 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
|
||||
unaryOp = spv::OpCopyObject;
|
||||
break;
|
||||
|
||||
case glslang::EOpDepthAttachmentReadEXT:
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
|
||||
unaryOp = spv::OpDepthAttachmentReadEXT;
|
||||
decorations.precision = spv::NoPrecision;
|
||||
break;
|
||||
case glslang::EOpStencilAttachmentReadEXT:
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
|
||||
unaryOp = spv::OpStencilAttachmentReadEXT;
|
||||
decorations.precision = spv::DecorationRelaxedPrecision;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -9262,6 +9310,30 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
|
||||
return builder.createOp(spv::OpReadClockKHR, typeId, args);
|
||||
}
|
||||
#endif
|
||||
case glslang::EOpStencilAttachmentReadEXT:
|
||||
case glslang::EOpDepthAttachmentReadEXT:
|
||||
{
|
||||
builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
|
||||
|
||||
spv::Decoration precision;
|
||||
spv::Op spv_op;
|
||||
if (op == glslang::EOpStencilAttachmentReadEXT)
|
||||
{
|
||||
precision = spv::DecorationRelaxedPrecision;
|
||||
spv_op = spv::OpStencilAttachmentReadEXT;
|
||||
builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
|
||||
}
|
||||
else
|
||||
{
|
||||
precision = spv::NoPrecision;
|
||||
spv_op = spv::OpDepthAttachmentReadEXT;
|
||||
builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
|
||||
}
|
||||
|
||||
std::vector<spv::Id> args; // Dummy args
|
||||
spv::Id result = builder.createOp(spv_op, typeId, args);
|
||||
return builder.setPrecision(result, precision);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -215,6 +215,10 @@ const char* ExecutionModeString(int mode)
|
||||
case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL";
|
||||
case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL";
|
||||
|
||||
case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT";
|
||||
case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT";
|
||||
case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT";
|
||||
|
||||
case ExecutionModeCeiling:
|
||||
default: return "Bad";
|
||||
}
|
||||
@@ -247,6 +251,7 @@ const char* StorageClassString(int StorageClass)
|
||||
case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
|
||||
case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";
|
||||
case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV";
|
||||
case StorageClassTileImageEXT: return "TileImageEXT";
|
||||
default: return "Bad";
|
||||
}
|
||||
}
|
||||
@@ -464,6 +469,7 @@ const char* DimensionString(int dim)
|
||||
case 4: return "Rect";
|
||||
case 5: return "Buffer";
|
||||
case 6: return "SubpassData";
|
||||
case DimTileImageDataEXT: return "TileImageDataEXT";
|
||||
|
||||
default: return "Bad";
|
||||
}
|
||||
@@ -992,6 +998,10 @@ const char* CapabilityString(int info)
|
||||
case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT";
|
||||
case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT";
|
||||
|
||||
case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT";
|
||||
case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT";
|
||||
case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT";
|
||||
|
||||
case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
|
||||
|
||||
case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
|
||||
@@ -1502,6 +1512,10 @@ const char* OpcodeString(int op)
|
||||
case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
|
||||
case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
|
||||
|
||||
case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT";
|
||||
case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT";
|
||||
case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT";
|
||||
|
||||
default:
|
||||
return "Bad";
|
||||
}
|
||||
@@ -3268,6 +3282,11 @@ void Parameterize()
|
||||
InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'");
|
||||
InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
|
||||
InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);
|
||||
|
||||
InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'");
|
||||
InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
|
||||
InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
|
||||
InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
|
||||
}
|
||||
|
||||
}; // end spv namespace
|
||||
|
||||
@@ -156,6 +156,9 @@ enum ExecutionMode {
|
||||
ExecutionModeSubgroupsPerWorkgroupId = 37,
|
||||
ExecutionModeLocalSizeId = 38,
|
||||
ExecutionModeLocalSizeHintId = 39,
|
||||
ExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
|
||||
ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
|
||||
ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
|
||||
ExecutionModeSubgroupUniformControlFlowKHR = 4421,
|
||||
ExecutionModePostDepthCoverage = 4446,
|
||||
ExecutionModeDenormPreserve = 4459,
|
||||
@@ -214,6 +217,7 @@ enum StorageClass {
|
||||
StorageClassAtomicCounter = 10,
|
||||
StorageClassImage = 11,
|
||||
StorageClassStorageBuffer = 12,
|
||||
StorageClassTileImageEXT = 4172,
|
||||
StorageClassCallableDataKHR = 5328,
|
||||
StorageClassCallableDataNV = 5328,
|
||||
StorageClassIncomingCallableDataKHR = 5329,
|
||||
@@ -244,6 +248,7 @@ enum Dim {
|
||||
DimRect = 4,
|
||||
DimBuffer = 5,
|
||||
DimSubpassData = 6,
|
||||
DimTileImageDataEXT = 4173,
|
||||
DimMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@@ -984,6 +989,9 @@ enum Capability {
|
||||
CapabilityShaderViewportIndex = 70,
|
||||
CapabilityUniformDecoration = 71,
|
||||
CapabilityCoreBuiltinsARM = 4165,
|
||||
CapabilityTileImageColorReadAccessEXT = 4166,
|
||||
CapabilityTileImageDepthReadAccessEXT = 4167,
|
||||
CapabilityTileImageStencilReadAccessEXT = 4168,
|
||||
CapabilityFragmentShadingRateKHR = 4422,
|
||||
CapabilitySubgroupBallotKHR = 4423,
|
||||
CapabilityDrawParameters = 4427,
|
||||
@@ -1598,6 +1606,9 @@ enum Op {
|
||||
OpPtrEqual = 401,
|
||||
OpPtrNotEqual = 402,
|
||||
OpPtrDiff = 403,
|
||||
OpColorAttachmentReadEXT = 4160,
|
||||
OpDepthAttachmentReadEXT = 4161,
|
||||
OpStencilAttachmentReadEXT = 4162,
|
||||
OpTerminateInvocation = 4416,
|
||||
OpSubgroupBallotKHR = 4421,
|
||||
OpSubgroupFirstInvocationKHR = 4422,
|
||||
@@ -2313,6 +2324,9 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
|
||||
case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
|
||||
case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
|
||||
case OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
|
||||
case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
|
||||
|
||||
Reference in New Issue
Block a user