diff --git a/runtime/kernel/kernel.cpp b/runtime/kernel/kernel.cpp index 43aefd2d63..1f799271af 100644 --- a/runtime/kernel/kernel.cpp +++ b/runtime/kernel/kernel.cpp @@ -1117,6 +1117,8 @@ cl_int Kernel::setArgBuffer(uint32_t argIndex, bool forceNonAuxMode = buffer->getGraphicsAllocation()->getAllocationType() == GraphicsAllocation::AllocationType::BUFFER_COMPRESSED && !kernelArgInfo.pureStatefulBufferAccess; + UNRECOVERABLE_IF(forceNonAuxMode && isBuiltIn); + if (requiresSshForBuffers()) { auto surfaceState = ptrOffset(getSurfaceStateHeap(), kernelArgInfo.offsetHeap); buffer->setArgStateful(surfaceState, forceNonAuxMode); diff --git a/unit_tests/mem_obj/buffer_set_arg_tests.cpp b/unit_tests/mem_obj/buffer_set_arg_tests.cpp index 09bae7d6fc..aa21cea747 100644 --- a/unit_tests/mem_obj/buffer_set_arg_tests.cpp +++ b/unit_tests/mem_obj/buffer_set_arg_tests.cpp @@ -190,6 +190,15 @@ HWTEST_F(BufferSetArgTest, givenNonPureStatefulArgWhenRenderCompressedBufferIsSe EXPECT_TRUE(RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E == surfaceState->getAuxiliarySurfaceMode()); } +HWTEST_F(BufferSetArgTest, givenNonPureStatefulArgWhenSetArgOnBuiltinIsCalledThenAbort) { + buffer->getGraphicsAllocation()->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED); + cl_mem clMem = buffer; + + pKernelInfo->kernelArgInfo.at(0).pureStatefulBufferAccess = false; + pKernel->isBuiltIn = true; + EXPECT_THROW(pKernel->setArgBuffer(0, sizeof(cl_mem), &clMem), std::exception); +} + TEST_F(BufferSetArgTest, setKernelArgBufferFor32BitAddressing) { auto pKernelArg = (void **)(pKernel->getCrossThreadData() + pKernelInfo->kernelArgInfo[0].kernelArgPatchInfoVector[0].crossthreadOffset);