gfxstream: Change createResource to use stride instead of bpp

Reviewed-by: Aaron Ruby <aruby@blackberry.com>
Acked-by: Yonggang Luo <luoyonggang@gmail.com>
Acked-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27246>
This commit is contained in:
Aaron Ruby 2024-05-09 12:57:06 -04:00 committed by Marge Bot
parent 24cb362a9c
commit 6b92e632da
7 changed files with 19 additions and 15 deletions

View file

@ -266,9 +266,10 @@ AHardwareBuffer* EmulatedGralloc::allocate(uint32_t width, uint32_t height, uint
const uint32_t bind =
(drmFormat == DRM_FORMAT_R8_BLOB) ? VIRGL_BIND_LINEAR : VIRGL_BIND_RENDER_TARGET;
const uint32_t stride = width * (*bpp);
auto resource =
device->createResource(width, height, *virglFormat, PIPE_TEXTURE_2D, bind, *bpp);
device->createResource(width, height, stride, *virglFormat, PIPE_TEXTURE_2D, bind);
if (!resource) {
ALOGE("Failed to allocate: failed to create virtio resource.");
return nullptr;

View file

@ -56,8 +56,8 @@ class FuchsiaVirtGpuDevice : public VirtGpuDevice {
struct VirtGpuCaps getCaps(void) override;
VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) override;
VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t format,
uint32_t target, uint32_t bind, uint32_t bpp) override;
VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
uint32_t format, uint32_t target, uint32_t bind) override;
VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle) override;
int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob) override;

View file

@ -75,8 +75,8 @@ VirtGpuResourcePtr FuchsiaVirtGpuDevice::createBlob(const struct VirtGpuCreateBl
}
VirtGpuResourcePtr FuchsiaVirtGpuDevice::createResource(uint32_t width, uint32_t height,
uint32_t virglFormat, uint32_t target,
uint32_t bind, uint32_t bpp) {
uint32_t stride, uint32_t virglFormat,
uint32_t target, uint32_t bind) {
ALOGE("%s: unimplemented", __func__);
return nullptr;
}

View file

@ -178,8 +178,9 @@ class VirtGpuDevice {
virtual struct VirtGpuCaps getCaps(void) = 0;
virtual VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) = 0;
virtual VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t virglFormat,
uint32_t target, uint32_t bind, uint32_t bpp) = 0;
virtual VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
uint32_t virglFormat, uint32_t target,
uint32_t bind) = 0;
virtual VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle) = 0;
virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob) = 0;

View file

@ -68,8 +68,9 @@ class LinuxVirtGpuDevice : public VirtGpuDevice {
virtual struct VirtGpuCaps getCaps(void);
VirtGpuResourcePtr createBlob(const struct VirtGpuCreateBlob& blobCreate) override;
VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t virglFormat,
uint32_t target, uint32_t bind, uint32_t bpp) override;
VirtGpuResourcePtr createResource(uint32_t width, uint32_t height, uint32_t stride,
uint32_t virglFormat, uint32_t target,
uint32_t bind) override;
virtual VirtGpuResourcePtr importBlob(const struct VirtGpuExternalHandle& handle);
virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuResource* blob);

View file

@ -150,8 +150,8 @@ struct VirtGpuCaps LinuxVirtGpuDevice::getCaps(void) { return mCaps; }
int64_t LinuxVirtGpuDevice::getDeviceHandle(void) { return mDeviceHandle; }
VirtGpuResourcePtr LinuxVirtGpuDevice::createResource(uint32_t width, uint32_t height,
uint32_t virglFormat, uint32_t target,
uint32_t bind, uint32_t bpp) {
uint32_t stride, uint32_t virglFormat,
uint32_t target, uint32_t bind) {
drm_virtgpu_resource_create create = {
.target = target,
.format = virglFormat,
@ -162,8 +162,8 @@ VirtGpuResourcePtr LinuxVirtGpuDevice::createResource(uint32_t width, uint32_t h
.array_size = 1U,
.last_level = 0,
.nr_samples = 0,
.size = width * height * bpp,
.stride = width * bpp,
.size = stride * height,
.stride = stride,
};
int ret = drmIoctl(mDeviceHandle, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE, &create);

View file

@ -3816,9 +3816,10 @@ VkResult ResourceTracker::on_vkAllocateMemory(void* context, VkResult input_resu
__func__, imageCreateInfo.format);
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
const uint32_t stride = imageCreateInfo.extent.width * bpp;
colorBufferBlob = instance->createResource(imageCreateInfo.extent.width,
imageCreateInfo.extent.height, virglFormat,
target, bind, bpp);
imageCreateInfo.extent.height, stride,
virglFormat, target, bind);
if (!colorBufferBlob) {
mesa_loge("%s: Failed to create colorBuffer resource for Image memory\n", __func__);
return VK_ERROR_OUT_OF_DEVICE_MEMORY;