mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-04 00:08:16 +02:00
anv: Move i915 specific gem_set_caching to backend
Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25212>
This commit is contained in:
parent
b8a9c72561
commit
fc0acf6d90
5 changed files with 31 additions and 46 deletions
|
|
@ -1534,26 +1534,6 @@ anv_device_alloc_bo(struct anv_device *device,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alloc_flags & ANV_BO_ALLOC_SNOOPED) {
|
|
||||||
assert(alloc_flags & ANV_BO_ALLOC_MAPPED);
|
|
||||||
/* We don't want to change these defaults if it's going to be shared
|
|
||||||
* with another process.
|
|
||||||
*/
|
|
||||||
assert(!(alloc_flags & ANV_BO_ALLOC_EXTERNAL));
|
|
||||||
|
|
||||||
/* Regular objects are created I915_CACHING_CACHED on LLC platforms and
|
|
||||||
* I915_CACHING_NONE on non-LLC platforms. For many internal state
|
|
||||||
* objects, we'd rather take the snooping overhead than risk forgetting
|
|
||||||
* a CLFLUSH somewhere. Userptr objects are always created as
|
|
||||||
* I915_CACHING_CACHED, which on non-LLC means snooped so there's no
|
|
||||||
* need to do this there.
|
|
||||||
*/
|
|
||||||
if (device->info->has_caching_uapi && !device->info->has_llc) {
|
|
||||||
anv_gem_set_caching(device, new_bo.gem_handle,
|
|
||||||
I915_CACHING_CACHED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult result = anv_bo_vma_alloc_or_close(device, &new_bo,
|
VkResult result = anv_bo_vma_alloc_or_close(device, &new_bo,
|
||||||
alloc_flags,
|
alloc_flags,
|
||||||
explicit_address);
|
explicit_address);
|
||||||
|
|
|
||||||
|
|
@ -55,24 +55,6 @@ anv_gem_munmap(struct anv_device *device, void *p, uint64_t size)
|
||||||
munmap(p, size);
|
munmap(p, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
anv_gem_set_caching(struct anv_device *device,
|
|
||||||
uint32_t gem_handle, uint32_t caching)
|
|
||||||
{
|
|
||||||
/* Guard by has_caching_uapi */
|
|
||||||
if (unlikely(device->info->kmd_type != INTEL_KMD_TYPE_I915)) {
|
|
||||||
assert(!"Missing implementation of anv_gem_set_caching\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct drm_i915_gem_caching gem_caching = {
|
|
||||||
.handle = gem_handle,
|
|
||||||
.caching = caching,
|
|
||||||
};
|
|
||||||
|
|
||||||
return intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &gem_caching);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On error, \a timeout_ns holds the remaining time.
|
* On error, \a timeout_ns holds the remaining time.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -132,13 +132,6 @@ anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle,
|
|
||||||
uint32_t caching)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle)
|
anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1791,7 +1791,6 @@ int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle,
|
||||||
int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle);
|
int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle);
|
||||||
int anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle);
|
int anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle);
|
||||||
uint32_t anv_gem_fd_to_handle(struct anv_device *device, int fd);
|
uint32_t anv_gem_fd_to_handle(struct anv_device *device, int fd);
|
||||||
int anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle, uint32_t caching);
|
|
||||||
int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param,
|
int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param,
|
||||||
uint64_t value);
|
uint64_t value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,18 @@
|
||||||
#include "drm-uapi/i915_drm.h"
|
#include "drm-uapi/i915_drm.h"
|
||||||
#include "intel/common/i915/intel_gem.h"
|
#include "intel/common/i915/intel_gem.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
i915_gem_set_caching(struct anv_device *device,
|
||||||
|
uint32_t gem_handle, uint32_t caching)
|
||||||
|
{
|
||||||
|
struct drm_i915_gem_caching gem_caching = {
|
||||||
|
.handle = gem_handle,
|
||||||
|
.caching = caching,
|
||||||
|
};
|
||||||
|
|
||||||
|
return intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &gem_caching);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
i915_gem_create(struct anv_device *device,
|
i915_gem_create(struct anv_device *device,
|
||||||
const struct intel_memory_class_instance **regions,
|
const struct intel_memory_class_instance **regions,
|
||||||
|
|
@ -94,6 +106,25 @@ i915_gem_create(struct anv_device *device,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
*actual_size = gem_create.size;
|
*actual_size = gem_create.size;
|
||||||
|
|
||||||
|
if (alloc_flags & ANV_BO_ALLOC_SNOOPED) {
|
||||||
|
assert(alloc_flags & ANV_BO_ALLOC_MAPPED);
|
||||||
|
/* We don't want to change these defaults if it's going to be shared
|
||||||
|
* with another process.
|
||||||
|
*/
|
||||||
|
assert(!(alloc_flags & ANV_BO_ALLOC_EXTERNAL));
|
||||||
|
|
||||||
|
/* Regular objects are created I915_CACHING_CACHED on LLC platforms and
|
||||||
|
* I915_CACHING_NONE on non-LLC platforms. For many internal state
|
||||||
|
* objects, we'd rather take the snooping overhead than risk forgetting
|
||||||
|
* a CLFLUSH somewhere. Userptr objects are always created as
|
||||||
|
* I915_CACHING_CACHED, which on non-LLC means snooped so there's no
|
||||||
|
* need to do this there.
|
||||||
|
*/
|
||||||
|
if (device->info->has_caching_uapi && !device->info->has_llc)
|
||||||
|
i915_gem_set_caching(device, gem_create.handle, I915_CACHING_CACHED);
|
||||||
|
}
|
||||||
|
|
||||||
return gem_create.handle;
|
return gem_create.handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue