tu: Plumb through raytracing fuse

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28447>
This commit is contained in:
Connor Abbott 2024-04-25 08:10:06 -04:00 committed by Marge Bot
parent 9249a189ca
commit 4a5b234d5e
4 changed files with 42 additions and 0 deletions

View file

@ -118,6 +118,7 @@ struct tu_physical_device
int32_t reserved_set_idx; int32_t reserved_set_idx;
bool has_set_iova; bool has_set_iova;
bool has_raytracing;
uint64_t va_start; uint64_t va_start;
uint64_t va_size; uint64_t va_size;

View file

@ -77,6 +77,17 @@ tu_drm_get_gmem_base(const struct tu_physical_device *dev, uint64_t *base)
return tu_drm_get_param(dev->local_fd, MSM_PARAM_GMEM_BASE, base); return tu_drm_get_param(dev->local_fd, MSM_PARAM_GMEM_BASE, base);
} }
static bool
tu_drm_get_raytracing(const struct tu_physical_device *dev)
{
uint64_t value;
int ret = tu_drm_get_param(dev->local_fd, MSM_PARAM_RAYTRACING, &value);
if (ret)
return false;
return value;
}
static int static int
tu_drm_get_va_prop(const struct tu_physical_device *dev, tu_drm_get_va_prop(const struct tu_physical_device *dev,
uint64_t *va_start, uint64_t *va_size) uint64_t *va_start, uint64_t *va_size)
@ -1039,6 +1050,7 @@ tu_knl_drm_msm_load(struct tu_instance *instance,
device->has_set_iova = !tu_drm_get_va_prop(device, &device->va_start, device->has_set_iova = !tu_drm_get_va_prop(device, &device->va_start,
&device->va_size); &device->va_size);
device->has_raytracing = tu_drm_get_raytracing(device);
device->has_preemption = tu_drm_has_preemption(device); device->has_preemption = tu_drm_has_preemption(device);

View file

@ -299,6 +299,19 @@ virtio_device_get_suspend_count(struct tu_device *dev, uint64_t *suspend_count)
return ret; return ret;
} }
static bool
tu_drm_get_raytracing(struct vdrm_device *vdrm)
{
uint64_t value;
int ret = tu_drm_get_param(vdrm, MSM_PARAM_RAYTRACING, &value);
if (ret)
return false;
return value;
}
static VkResult static VkResult
virtio_device_check_status(struct tu_device *device) virtio_device_check_status(struct tu_device *device)
{ {
@ -1214,6 +1227,9 @@ tu_knl_drm_virtio_load(struct tu_instance *instance,
device->submitqueue_priority_count = caps.u.msm.priorities; device->submitqueue_priority_count = caps.u.msm.priorities;
/* TODO add a cap for this */
device->has_raytracing = tu_drm_get_raytracing(vdrm);
device->syncobj_type = vk_drm_syncobj_get_type(fd); device->syncobj_type = vk_drm_syncobj_get_type(fd);
/* we don't support DRM_CAP_SYNCOBJ_TIMELINE, but drm-shim does */ /* we don't support DRM_CAP_SYNCOBJ_TIMELINE, but drm-shim does */
if (!(device->syncobj_type.features & VK_SYNC_FEATURE_TIMELINE)) if (!(device->syncobj_type.features & VK_SYNC_FEATURE_TIMELINE))

View file

@ -1382,6 +1382,17 @@ static const struct tu_knl kgsl_knl_funcs = {
.queue_wait_fence = kgsl_queue_wait_fence, .queue_wait_fence = kgsl_queue_wait_fence,
}; };
static bool
tu_kgsl_get_raytracing(int fd)
{
uint32_t value;
int ret = get_kgsl_prop(fd, KGSL_PROP_IS_RAYTRACING_ENABLED, &value, sizeof(value));
if (ret)
return false;
return value;
}
VkResult VkResult
tu_knl_kgsl_load(struct tu_instance *instance, int fd) tu_knl_kgsl_load(struct tu_instance *instance, int fd)
{ {
@ -1458,6 +1469,8 @@ tu_knl_kgsl_load(struct tu_instance *instance, int fd)
device->gmem_size = debug_get_num_option("TU_GMEM", info.gmem_sizebytes); device->gmem_size = debug_get_num_option("TU_GMEM", info.gmem_sizebytes);
device->gmem_base = gmem_iova; device->gmem_base = gmem_iova;
device->has_raytracing = tu_kgsl_get_raytracing(fd);
device->submitqueue_priority_count = 1; device->submitqueue_priority_count = 1;
device->timeline_type = vk_sync_timeline_get_type(&vk_kgsl_sync_type); device->timeline_type = vk_sync_timeline_get_type(&vk_kgsl_sync_type);