@@ -829,6 +829,51 @@ bool isType(const T1 *Ty, unsigned Bits = 0) {
829829 return static_cast <const T2 *>(Ty)->getBitWidth () == Bits;
830830}
831831
832+ class SPIRVTypeBufferSurfaceINTEL : public SPIRVType {
833+ public:
834+ const static Op OC = OpTypeBufferSurfaceINTEL;
835+ const static SPIRVWord FixedWC = 2 ;
836+ SPIRVTypeBufferSurfaceINTEL (SPIRVModule *M, SPIRVId TheId,
837+ SPIRVAccessQualifierKind TheAccess)
838+ : SPIRVType(M, FixedWC + 1 , OC, TheId), AccessKind(TheAccess) {
839+ validate ();
840+ }
841+ SPIRVTypeBufferSurfaceINTEL (SPIRVModule *M, SPIRVId TheId)
842+ : SPIRVType(M, FixedWC, OC, TheId) {
843+ validate ();
844+ }
845+ SPIRVTypeBufferSurfaceINTEL () : SPIRVType(OC) {}
846+
847+ SPIRVCapVec getRequiredCapability () const override {
848+ return getVec (CapabilityVectorComputeINTEL);
849+ }
850+
851+ llvm::Optional<ExtensionID> getRequiredExtension () const override {
852+ return {ExtensionID::SPV_INTEL_vector_compute};
853+ }
854+
855+ bool hasAccessQualifier () const { return AccessKind.hasValue (); }
856+ SPIRVAccessQualifierKind getAccessQualifier () const {
857+ assert (hasAccessQualifier ());
858+ return AccessKind.getValue ();
859+ }
860+
861+ protected:
862+ _SPIRV_DEF_ENCDEC2 (Id, AccessKind)
863+ void validate () const override {
864+ assert (OpCode == OC);
865+ assert (WordCount == FixedWC + (AccessKind ? 1 : 0 ));
866+ }
867+ void setWordCount (SPIRVWord TheWC) override {
868+ if (TheWC > FixedWC)
869+ AccessKind = SPIRVAccessQualifierKind::AccessQualifierMax;
870+ WordCount = TheWC;
871+ }
872+
873+ private:
874+ llvm::Optional<SPIRVAccessQualifierKind> AccessKind;
875+ };
876+
832877// SPV_INTEL_device_side_avc_motion_estimation extension types
833878class SPIRVTypeVmeImageINTEL : public SPIRVType {
834879public:
0 commit comments