SWDEV-299127 - Support External Mipmap
Support hipExternalMemoryGetMappedMipmappedArray(). Add ImageExternalBuffer to differiate ImageBuffer. Currently we only support tiling_optimal mode as vulkan driver doesn't provide tiling information. Change-Id: I7e3524cdde53e4df9f728894bcebf4bd3f58d4d9
This commit is contained in:
@@ -71,25 +71,4 @@ namespace amd
|
||||
|
||||
virtual ~ExternalBuffer() {}
|
||||
};
|
||||
|
||||
// to be modified once image requirments are known, for now, implement like buffer
|
||||
class ExternalImage final : public Buffer, public ExternalMemory
|
||||
{
|
||||
protected:
|
||||
// Initializes device memory array, which is located after ExternalImage object in memory
|
||||
void initDeviceMemory() {
|
||||
deviceMemories_ =
|
||||
reinterpret_cast<DeviceMemory*>(reinterpret_cast<char*>(this) + sizeof(ExternalImage));
|
||||
memset(deviceMemories_, 0, context_().devices().size() * sizeof(DeviceMemory));
|
||||
}
|
||||
|
||||
public:
|
||||
ExternalImage(Context& amdContext, size_t size_in_bytes, amd::Os::FileDesc handle,
|
||||
ExternalMemory::HandleType handle_type)
|
||||
: Buffer(amdContext, 0, size_in_bytes), ExternalMemory(handle, handle_type) {
|
||||
setInteropObj(this);
|
||||
}
|
||||
|
||||
virtual ~ExternalImage() {}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ Memory::Memory(Memory& parent, Flags flags, size_t origin, size_t size, Type typ
|
||||
flags_(flags),
|
||||
version_(parent.getVersion()),
|
||||
lastWriter_(parent.getLastWriter()),
|
||||
interopObj_(parent.getInteropObj()),
|
||||
interopObj_(nullptr),
|
||||
vDev_(NULL),
|
||||
mapCount_(0),
|
||||
svmHostAddress_(parent.getSvmPtr()),
|
||||
@@ -606,10 +606,11 @@ Image::Image(Context& context, Type type, Flags flags, const Format& format, siz
|
||||
}
|
||||
|
||||
Image::Image(Buffer& buffer, Type type, Flags flags, const Format& format, size_t width,
|
||||
size_t height, size_t depth, size_t rowPitch, size_t slicePitch)
|
||||
: Memory(buffer, flags, 0, buffer.getSize(), type),
|
||||
size_t height, size_t depth, size_t rowPitch, size_t slicePitch, uint mipLevels,
|
||||
size_t offset)
|
||||
: Memory(buffer, flags, offset, buffer.getSize(), type),
|
||||
impl_(format, Coord3D(width, height, depth), rowPitch, slicePitch),
|
||||
mipLevels_(1),
|
||||
mipLevels_(mipLevels),
|
||||
baseMipLevel_(0) {
|
||||
initDimension();
|
||||
}
|
||||
|
||||
@@ -566,7 +566,7 @@ class Image : public Memory {
|
||||
size_t depth, size_t rowPitch, size_t slicePitch, uint mipLevels = 1);
|
||||
|
||||
Image(Buffer& buffer, Type type, Flags flags, const Format& format, size_t width, size_t height,
|
||||
size_t depth, size_t rowPitch, size_t slicePitch);
|
||||
size_t depth, size_t rowPitch, size_t slicePitch, uint mipLevels = 1, size_t offset = 0);
|
||||
|
||||
//! Validate image dimensions with supported sizes
|
||||
static bool validateDimensions(
|
||||
|
||||
Reference in New Issue
Block a user