From 6b92e632dadd25dc07469054f7ab0d4889332b15 Mon Sep 17 00:00:00 2001 From: Aaron Ruby Date: Thu, 9 May 2024 12:57:06 -0400 Subject: [PATCH] gfxstream: Change createResource to use stride instead of bpp Reviewed-by: Aaron Ruby Acked-by: Yonggang Luo Acked-by: Adam Jackson Part-of: --- src/gfxstream/guest/android/GrallocEmulated.cpp | 3 ++- src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h | 4 ++-- .../guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp | 4 ++-- src/gfxstream/guest/platform/include/VirtGpu.h | 5 +++-- src/gfxstream/guest/platform/linux/LinuxVirtGpu.h | 5 +++-- src/gfxstream/guest/platform/linux/LinuxVirtGpuDevice.cpp | 8 ++++---- src/gfxstream/guest/vulkan_enc/ResourceTracker.cpp | 5 +++-- 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/gfxstream/guest/android/GrallocEmulated.cpp b/src/gfxstream/guest/android/GrallocEmulated.cpp index 4aa7e9ab71b..f96b71774c1 100644 --- a/src/gfxstream/guest/android/GrallocEmulated.cpp +++ b/src/gfxstream/guest/android/GrallocEmulated.cpp @@ -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; diff --git a/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h b/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h index e8f2dfdddf2..48e6dfa4c57 100644 --- a/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h +++ b/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpu.h @@ -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; diff --git a/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp b/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp index cd18f029972..3d8c081c3c4 100644 --- a/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp +++ b/src/gfxstream/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp @@ -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; } diff --git a/src/gfxstream/guest/platform/include/VirtGpu.h b/src/gfxstream/guest/platform/include/VirtGpu.h index 915467d10f8..aeacfff7a6c 100644 --- a/src/gfxstream/guest/platform/include/VirtGpu.h +++ b/src/gfxstream/guest/platform/include/VirtGpu.h @@ -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; diff --git a/src/gfxstream/guest/platform/linux/LinuxVirtGpu.h b/src/gfxstream/guest/platform/linux/LinuxVirtGpu.h index 4ee8d2ad4d1..28357f027a8 100644 --- a/src/gfxstream/guest/platform/linux/LinuxVirtGpu.h +++ b/src/gfxstream/guest/platform/linux/LinuxVirtGpu.h @@ -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); diff --git a/src/gfxstream/guest/platform/linux/LinuxVirtGpuDevice.cpp b/src/gfxstream/guest/platform/linux/LinuxVirtGpuDevice.cpp index e7299e62925..fc03ade428e 100644 --- a/src/gfxstream/guest/platform/linux/LinuxVirtGpuDevice.cpp +++ b/src/gfxstream/guest/platform/linux/LinuxVirtGpuDevice.cpp @@ -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); diff --git a/src/gfxstream/guest/vulkan_enc/ResourceTracker.cpp b/src/gfxstream/guest/vulkan_enc/ResourceTracker.cpp index 485f94efa03..2fcda238753 100644 --- a/src/gfxstream/guest/vulkan_enc/ResourceTracker.cpp +++ b/src/gfxstream/guest/vulkan_enc/ResourceTracker.cpp @@ -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;