mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 13:20:14 +01:00
tu: Plumb through raytracing fuse
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28447>
This commit is contained in:
parent
9249a189ca
commit
4a5b234d5e
4 changed files with 42 additions and 0 deletions
|
|
@ -118,6 +118,7 @@ struct tu_physical_device
|
|||
int32_t reserved_set_idx;
|
||||
|
||||
bool has_set_iova;
|
||||
bool has_raytracing;
|
||||
uint64_t va_start;
|
||||
uint64_t va_size;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
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
|
||||
tu_drm_get_va_prop(const struct tu_physical_device *dev,
|
||||
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->va_size);
|
||||
device->has_raytracing = tu_drm_get_raytracing(device);
|
||||
|
||||
device->has_preemption = tu_drm_has_preemption(device);
|
||||
|
||||
|
|
|
|||
|
|
@ -299,6 +299,19 @@ virtio_device_get_suspend_count(struct tu_device *dev, uint64_t *suspend_count)
|
|||
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
|
||||
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;
|
||||
|
||||
/* TODO add a cap for this */
|
||||
device->has_raytracing = tu_drm_get_raytracing(vdrm);
|
||||
|
||||
device->syncobj_type = vk_drm_syncobj_get_type(fd);
|
||||
/* we don't support DRM_CAP_SYNCOBJ_TIMELINE, but drm-shim does */
|
||||
if (!(device->syncobj_type.features & VK_SYNC_FEATURE_TIMELINE))
|
||||
|
|
|
|||
|
|
@ -1382,6 +1382,17 @@ static const struct tu_knl kgsl_knl_funcs = {
|
|||
.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
|
||||
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_base = gmem_iova;
|
||||
|
||||
device->has_raytracing = tu_kgsl_get_raytracing(fd);
|
||||
|
||||
device->submitqueue_priority_count = 1;
|
||||
|
||||
device->timeline_type = vk_sync_timeline_get_type(&vk_kgsl_sync_type);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue