@@ -662,11 +662,11 @@ namespace IGC
662662 0 , 0 , arg_idx,
663663 zebin::PreDefinedAttrGetter::ArgAddrMode::stateful,
664664 (kernelArg->getArgType () == KernelArg::ArgType::PTR_GLOBAL)?
665- zebin::PreDefinedAttrGetter::ArgAddrSpace::global :
666- zebin::PreDefinedAttrGetter::ArgAddrSpace::constant,
665+ zebin::PreDefinedAttrGetter::ArgAddrSpace::global :
666+ zebin::PreDefinedAttrGetter::ArgAddrSpace::constant,
667667 (kernelArg->getArgType () == KernelArg::ArgType::PTR_GLOBAL)?
668- zebin::PreDefinedAttrGetter::ArgAccessType::readwrite :
669- zebin::PreDefinedAttrGetter::ArgAccessType::readonly
668+ zebin::PreDefinedAttrGetter::ArgAccessType::readwrite :
669+ zebin::PreDefinedAttrGetter::ArgAccessType::readonly
670670 );
671671 // add the corresponding BTI table index
672672 zebin::ZEInfoBuilder::addBindingTableIndex (m_kernelInfo.m_zeBTIArgs ,
@@ -705,7 +705,7 @@ namespace IGC
705705 zebin::PreDefinedAttrGetter::ArgAddrSpace::constant,
706706 (kernelArg->getArgType () == KernelArg::ArgType::PTR_GLOBAL)?
707707 zebin::PreDefinedAttrGetter::ArgAccessType::readwrite :
708- zebin::PreDefinedAttrGetter::ArgAccessType::readonly
708+ zebin::PreDefinedAttrGetter::ArgAccessType::readonly
709709 );
710710 break ;
711711 }
@@ -728,6 +728,81 @@ namespace IGC
728728 case KernelArg::ArgType::IMPLICIT_LOCAL_IDS:
729729 break ;
730730
731+ // Images
732+ case KernelArg::ArgType::IMAGE_1D:
733+ case KernelArg::ArgType::BINDLESS_IMAGE_1D:
734+ case KernelArg::ArgType::IMAGE_1D_BUFFER:
735+ case KernelArg::ArgType::BINDLESS_IMAGE_1D_BUFFER:
736+ case KernelArg::ArgType::IMAGE_2D:
737+ case KernelArg::ArgType::BINDLESS_IMAGE_2D:
738+ case KernelArg::ArgType::IMAGE_3D:
739+ case KernelArg::ArgType::BINDLESS_IMAGE_3D:
740+ case KernelArg::ArgType::IMAGE_CUBE:
741+ case KernelArg::ArgType::BINDLESS_IMAGE_CUBE:
742+ case KernelArg::ArgType::IMAGE_CUBE_DEPTH:
743+ case KernelArg::ArgType::BINDLESS_IMAGE_CUBE_DEPTH:
744+ case KernelArg::ArgType::IMAGE_1D_ARRAY:
745+ case KernelArg::ArgType::BINDLESS_IMAGE_1D_ARRAY:
746+ case KernelArg::ArgType::IMAGE_2D_ARRAY:
747+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_ARRAY:
748+ case KernelArg::ArgType::IMAGE_2D_DEPTH:
749+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_DEPTH:
750+ case KernelArg::ArgType::IMAGE_2D_DEPTH_ARRAY:
751+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_DEPTH_ARRAY:
752+ case KernelArg::ArgType::IMAGE_2D_MSAA:
753+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_MSAA:
754+ case KernelArg::ArgType::IMAGE_2D_MSAA_ARRAY:
755+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_MSAA_ARRAY:
756+ case KernelArg::ArgType::IMAGE_2D_MSAA_DEPTH:
757+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_MSAA_DEPTH:
758+ case KernelArg::ArgType::IMAGE_2D_MSAA_DEPTH_ARRAY:
759+ case KernelArg::ArgType::BINDLESS_IMAGE_2D_MSAA_DEPTH_ARRAY:
760+ case KernelArg::ArgType::IMAGE_CUBE_ARRAY:
761+ case KernelArg::ArgType::BINDLESS_IMAGE_CUBE_ARRAY:
762+ case KernelArg::ArgType::IMAGE_CUBE_DEPTH_ARRAY:
763+ case KernelArg::ArgType::BINDLESS_IMAGE_CUBE_DEPTH_ARRAY:
764+ {
765+ int arg_idx = kernelArg->getAssociatedArgNo ();
766+ SOpenCLKernelInfo::SResourceInfo resInfo = getResourceInfo (arg_idx);
767+
768+ // check if the image is writeable
769+ bool writeable = false ;
770+ if (resInfo.Type == SOpenCLKernelInfo::SResourceInfo::RES_UAV &&
771+ kernelArg->getAccessQual () != IGC::KernelArg::AccessQual::READ_ONLY)
772+ writeable = true ;
773+ IGC_ASSERT_MESSAGE (resInfo.Type == SOpenCLKernelInfo::SResourceInfo::RES_UAV ||
774+ resInfo.Type == SOpenCLKernelInfo::SResourceInfo::RES_SRV, " Unknown resource type" );
775+
776+ // the image arg is either bindless of stateful. check from "kernelArg->needsAllocation()"
777+ // For statefull image argument, the arg has 0 offset and 0 size
778+ zebin::PreDefinedAttrGetter::ArgAddrMode arg_addrmode =
779+ zebin::PreDefinedAttrGetter::ArgAddrMode::stateful;
780+ uint arg_off = 0 ;
781+ uint arg_size = 0 ;
782+
783+ if (kernelArg->needsAllocation ()) {
784+ // set to bindless
785+ arg_addrmode =
786+ zebin::PreDefinedAttrGetter::ArgAddrMode::bindless;
787+ arg_off = payloadPosition;
788+ arg_size = kernelArg->getAllocateSize ();
789+ } else {
790+ // add bti index for this arg if it's stateful
791+ zebin::ZEInfoBuilder::addBindingTableIndex (m_kernelInfo.m_zeBTIArgs ,
792+ getBTI (resInfo), arg_idx);
793+ }
794+
795+ // add the payload argument
796+ zebin::ZEInfoBuilder::addPayloadArgumentByPointer (m_kernelInfo.m_zePayloadArgs ,
797+ arg_off, arg_size, arg_idx, arg_addrmode,
798+ zebin::PreDefinedAttrGetter::ArgAddrSpace::image,
799+ writeable ?
800+ zebin::PreDefinedAttrGetter::ArgAccessType::readwrite :
801+ zebin::PreDefinedAttrGetter::ArgAccessType::readonly
802+ );
803+ }
804+ break ;
805+
731806 // We don't need these in ZEBinary, can safely skip them
732807 case KernelArg::ArgType::IMPLICIT_R0:
733808 case KernelArg::ArgType::R1:
0 commit comments