Set non-aux mode for non-pure stateful kernel arguments
Change-Id: Id59fc3ae966a1f6632a24cbcfca3fb0aef0dd76d
This commit is contained in:
parent
6f251f5ea1
commit
bd9ac40bab
|
@ -148,7 +148,7 @@ void gtpinNotifyKernelSubmit(cl_kernel kernel, void *pCmdQueue) {
|
|||
void *pSurfaceState = gtpinHelper.getSurfaceState(pKernel, gtpinBTI);
|
||||
cl_mem buffer = (cl_mem)resource;
|
||||
auto pBuffer = castToObjectOrAbort<Buffer>(buffer);
|
||||
pBuffer->setArgStateful(pSurfaceState);
|
||||
pBuffer->setArgStateful(pSurfaceState, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1109,9 +1109,12 @@ cl_int Kernel::setArgBuffer(uint32_t argIndex,
|
|||
this->patchInfoDataList.push_back(patchInfoData);
|
||||
}
|
||||
|
||||
bool forceNonAuxMode = buffer->getGraphicsAllocation()->getAllocationType() == GraphicsAllocation::AllocationType::BUFFER_COMPRESSED &&
|
||||
!kernelArgInfo.pureStatefulBufferAccess;
|
||||
|
||||
if (requiresSshForBuffers()) {
|
||||
auto surfaceState = ptrOffset(getSurfaceStateHeap(), kernelArgInfo.offsetHeap);
|
||||
buffer->setArgStateful(surfaceState);
|
||||
buffer->setArgStateful(surfaceState, forceNonAuxMode);
|
||||
}
|
||||
|
||||
return CL_SUCCESS;
|
||||
|
|
|
@ -451,7 +451,7 @@ void Buffer::setSurfaceState(const Device *device,
|
|||
GraphicsAllocation *gfxAlloc,
|
||||
cl_mem_flags flags) {
|
||||
auto buffer = Buffer::createBufferHwFromDevice(device, flags, svmSize, svmPtr, svmPtr, gfxAlloc, false, false, false);
|
||||
buffer->setArgStateful(surfaceState);
|
||||
buffer->setArgStateful(surfaceState, false);
|
||||
buffer->graphicsAllocation = nullptr;
|
||||
delete buffer;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ class Buffer : public MemObj {
|
|||
bool isValidSubBufferOffset(size_t offset);
|
||||
uint64_t setArgStateless(void *memory, uint32_t patchSize) { return setArgStateless(memory, patchSize, false); }
|
||||
uint64_t setArgStateless(void *memory, uint32_t patchSize, bool set32BitAddressing);
|
||||
virtual void setArgStateful(void *memory) = 0;
|
||||
virtual void setArgStateful(void *memory, bool forceNonAuxMode) = 0;
|
||||
bool bufferRectPitchSet(const size_t *bufferOrigin,
|
||||
const size_t *region,
|
||||
size_t &bufferRowPitch,
|
||||
|
@ -158,7 +158,7 @@ class BufferHw : public Buffer {
|
|||
: Buffer(context, flags, size, memoryStorage, hostPtr, gfxAllocation,
|
||||
zeroCopy, isHostPtrSVM, isObjectRedescribed) {}
|
||||
|
||||
void setArgStateful(void *memory) override;
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override;
|
||||
|
||||
static Buffer *create(Context *context,
|
||||
cl_mem_flags flags,
|
||||
|
|
|
@ -41,7 +41,7 @@ union SURFACE_STATE_BUFFER_LENGTH {
|
|||
};
|
||||
|
||||
template <typename GfxFamily>
|
||||
void BufferHw<GfxFamily>::setArgStateful(void *memory) {
|
||||
void BufferHw<GfxFamily>::setArgStateful(void *memory, bool forceNonAuxMode) {
|
||||
using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE;
|
||||
using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT;
|
||||
using AUXILIARY_SURFACE_MODE = typename RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE;
|
||||
|
@ -86,7 +86,7 @@ void BufferHw<GfxFamily>::setArgStateful(void *memory) {
|
|||
|
||||
Gmm *gmm = graphicsAllocation ? graphicsAllocation->gmm : nullptr;
|
||||
|
||||
if (gmm && gmm->isRenderCompressed) {
|
||||
if (gmm && gmm->isRenderCompressed && !forceNonAuxMode) {
|
||||
// Its expected to not program pitch/qpitch/baseAddress for Aux surface in CCS scenarios
|
||||
surfaceState->setCoherencyType(RENDER_SURFACE_STATE::COHERENCY_TYPE_GPU_COHERENT);
|
||||
surfaceState->setAuxiliarySurfaceMode(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E);
|
||||
|
|
|
@ -94,7 +94,7 @@ class MockObject<Buffer> : public Buffer {
|
|||
return this->isValid();
|
||||
}
|
||||
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
}
|
||||
|
||||
cl_ulong validMagic;
|
||||
|
@ -291,7 +291,7 @@ class MockBuffer : public MockBufferStorage, public Buffer {
|
|||
MockBuffer() : MockBufferStorage(), Buffer(nullptr, CL_MEM_USE_HOST_PTR, sizeof(data), &data, &data, &mockGfxAllocation, true, false, false) {
|
||||
}
|
||||
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
}
|
||||
|
||||
void setFakeOwnership() {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "runtime/gmm_helper/gmm.h"
|
||||
#include "runtime/helpers/ptr_math.h"
|
||||
#include "runtime/kernel/kernel.h"
|
||||
#include "runtime/memory_manager/surface.h"
|
||||
|
@ -168,6 +169,27 @@ HWTEST_F(BufferSetArgTest, givenSetArgBufferWithNullArgStatelessThenDontProgramN
|
|||
EXPECT_EQ(memcmp(sshOriginal, surfaceStateHeap, sizeof(surfaceStateHeap)), 0);
|
||||
}
|
||||
|
||||
HWTEST_F(BufferSetArgTest, givenNonPureStatefulArgWhenRenderCompressedBufferIsSetThenSetNonAuxMode) {
|
||||
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
||||
|
||||
auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(pKernel->getSurfaceStateHeap(), pKernelInfo->kernelArgInfo[0].offsetHeap));
|
||||
buffer->getGraphicsAllocation()->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED);
|
||||
buffer->getGraphicsAllocation()->gmm = new Gmm(buffer->getGraphicsAllocation()->getUnderlyingBuffer(), buffer->getSize(), false);
|
||||
buffer->getGraphicsAllocation()->gmm->isRenderCompressed = true;
|
||||
pKernelInfo->requiresSshForBuffers = true;
|
||||
cl_mem clMem = buffer;
|
||||
|
||||
pKernelInfo->kernelArgInfo.at(0).pureStatefulBufferAccess = false;
|
||||
cl_int ret = pKernel->setArgBuffer(0, sizeof(cl_mem), &clMem);
|
||||
EXPECT_EQ(CL_SUCCESS, ret);
|
||||
EXPECT_TRUE(RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE == surfaceState->getAuxiliarySurfaceMode());
|
||||
|
||||
pKernelInfo->kernelArgInfo.at(0).pureStatefulBufferAccess = true;
|
||||
ret = pKernel->setArgBuffer(0, sizeof(cl_mem), &clMem);
|
||||
EXPECT_EQ(CL_SUCCESS, ret);
|
||||
EXPECT_TRUE(RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E == surfaceState->getAuxiliarySurfaceMode());
|
||||
}
|
||||
|
||||
TEST_F(BufferSetArgTest, setKernelArgBufferFor32BitAddressing) {
|
||||
auto pKernelArg = (void **)(pKernel->getCrossThreadData() +
|
||||
pKernelInfo->kernelArgInfo[0].kernelArgPatchInfoVector[0].crossthreadOffset);
|
||||
|
|
|
@ -1162,7 +1162,7 @@ HWTEST_F(BufferSetSurfaceTests, givenBufferSetSurfaceThatAddressIsForcedTo32bitW
|
|||
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
||||
RENDER_SURFACE_STATE surfaceState = {};
|
||||
|
||||
buffer->setArgStateful(&surfaceState);
|
||||
buffer->setArgStateful(&surfaceState, false);
|
||||
|
||||
auto surfBaseAddress = surfaceState.getSurfaceBaseAddress();
|
||||
auto bufferAddress = buffer->getGraphicsAllocation()->getGpuAddress();
|
||||
|
@ -1197,7 +1197,7 @@ HWTEST_F(BufferSetSurfaceTests, givenBufferWithOffsetWhenSetArgStatefulIsCalledT
|
|||
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
||||
RENDER_SURFACE_STATE surfaceState = {};
|
||||
|
||||
subBuffer->setArgStateful(&surfaceState);
|
||||
subBuffer->setArgStateful(&surfaceState, false);
|
||||
|
||||
auto surfBaseAddress = surfaceState.getSurfaceBaseAddress();
|
||||
auto bufferAddress = buffer->getGraphicsAllocation()->getGpuAddress();
|
||||
|
@ -1223,7 +1223,7 @@ HWTEST_F(BufferSetSurfaceTests, givenRenderCompressedGmmResourceWhenSurfaceState
|
|||
buffer->getGraphicsAllocation()->gmm = gmm;
|
||||
gmm->isRenderCompressed = true;
|
||||
|
||||
buffer->setArgStateful(&surfaceState);
|
||||
buffer->setArgStateful(&surfaceState, false);
|
||||
|
||||
EXPECT_EQ(0u, surfaceState.getAuxiliarySurfaceBaseAddress());
|
||||
EXPECT_TRUE(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E == surfaceState.getAuxiliarySurfaceMode());
|
||||
|
@ -1243,7 +1243,7 @@ HWTEST_F(BufferSetSurfaceTests, givenNonRenderCompressedGmmResourceWhenSurfaceSt
|
|||
buffer->getGraphicsAllocation()->gmm = gmm;
|
||||
gmm->isRenderCompressed = false;
|
||||
|
||||
buffer->setArgStateful(&surfaceState);
|
||||
buffer->setArgStateful(&surfaceState, false);
|
||||
|
||||
EXPECT_EQ(0u, surfaceState.getAuxiliarySurfaceBaseAddress());
|
||||
EXPECT_TRUE(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE == surfaceState.getAuxiliarySurfaceMode());
|
||||
|
|
|
@ -58,7 +58,7 @@ class MockBuffer : public MockBufferStorage, public Buffer {
|
|||
this->graphicsAllocation = &this->mockGfxAllocation;
|
||||
}
|
||||
}
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
Buffer::setSurfaceState(device.get(), memory, getSize(), getCpuAddress(), (externalAlloc != nullptr) ? externalAlloc : &mockGfxAllocation);
|
||||
}
|
||||
GraphicsAllocation *externalAlloc = nullptr;
|
||||
|
@ -71,7 +71,7 @@ class AlignedBuffer : public MockBufferStorage, public Buffer {
|
|||
}
|
||||
AlignedBuffer(GraphicsAllocation *gfxAllocation) : MockBufferStorage(), Buffer(nullptr, CL_MEM_USE_HOST_PTR, sizeof(data) / 2, alignUp(&data, 64), alignUp(&data, 64), gfxAllocation, true, false, false) {
|
||||
}
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
Buffer::setSurfaceState(device.get(), memory, getSize(), getCpuAddress(), &mockGfxAllocation);
|
||||
}
|
||||
};
|
||||
|
@ -83,7 +83,7 @@ class UnalignedBuffer : public MockBufferStorage, public Buffer {
|
|||
}
|
||||
UnalignedBuffer(GraphicsAllocation *gfxAllocation) : MockBufferStorage(true), Buffer(nullptr, CL_MEM_USE_HOST_PTR, sizeof(data) / 2, alignUp(&data, 4), alignUp(&data, 4), gfxAllocation, false, false, false) {
|
||||
}
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
Buffer::setSurfaceState(device.get(), memory, getSize(), getCpuAddress(), &mockGfxAllocation);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1682,7 +1682,7 @@ class DrmMockBuffer : public Buffer {
|
|||
gfxAllocation(alloc) {
|
||||
}
|
||||
|
||||
void setArgStateful(void *memory) override {
|
||||
void setArgStateful(void *memory, bool forceNonAuxMode) override {
|
||||
}
|
||||
|
||||
protected:
|
||||
|
|
Loading…
Reference in New Issue