summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/i915/i915_screen.c2
-rw-r--r--src/gallium/drivers/ilo/ilo_screen.c24
-rw-r--r--src/gallium/winsys/intel/drm/intel_drm_winsys.c10
-rw-r--r--src/gallium/winsys/intel/intel_winsys.h3
4 files changed, 38 insertions, 1 deletions
diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c
index 3af0b151b5a..0dfd3bb7b1f 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -301,7 +301,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
if (!os_get_total_physical_memory(&system_memory))
return 0;
- return MIN2(gpu_mappable_megabytes, (int) (system_memory >> 20));
+ return MIN2(gpu_mappable_megabytes, (int)(system_memory >> 20));
}
case PIPE_CAP_UMA:
return 1;
diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
index 991d2d0de36..ad59d6dfb94 100644
--- a/src/gallium/drivers/ilo/ilo_screen.c
+++ b/src/gallium/drivers/ilo/ilo_screen.c
@@ -25,6 +25,7 @@
* Chia-I Wu <olv@lunarg.com>
*/
+#include "os/os_misc.h"
#include "util/u_format_s3tc.h"
#include "vl/vl_decoder.h"
#include "vl/vl_video_buffer.h"
@@ -436,6 +437,29 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
return 0;
+ case PIPE_CAP_VENDOR_ID:
+ return 0x8086;
+ case PIPE_CAP_DEVICE_ID:
+ return is->dev.devid;
+ case PIPE_CAP_ACCELERATED:
+ return true;
+ case PIPE_CAP_VIDEO_MEMORY: {
+ /* Once a batch uses more than 75% of the maximum mappable size, we
+ * assume that there's some fragmentation, and we start doing extra
+ * flushing, etc. That's the big cliff apps will care about.
+ */
+ const int gpu_mappable_megabytes =
+ intel_winsys_get_aperture_size(is->winsys) * 3 / 4;
+ uint64_t system_memory;
+
+ if (!os_get_total_physical_memory(&system_memory))
+ return 0;
+
+ return MIN2(gpu_mappable_megabytes, (int)(system_memory >> 20));
+ }
+ case PIPE_CAP_UMA:
+ return true;
+
default:
return 0;
}
diff --git a/src/gallium/winsys/intel/drm/intel_drm_winsys.c b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
index b7a2c4ee79b..b394e5fe756 100644
--- a/src/gallium/winsys/intel/drm/intel_drm_winsys.c
+++ b/src/gallium/winsys/intel/drm/intel_drm_winsys.c
@@ -223,6 +223,16 @@ intel_winsys_get_info(const struct intel_winsys *winsys)
return &winsys->info;
}
+int
+intel_winsys_get_aperture_size(const struct intel_winsys *winsys)
+{
+ size_t aper_size, mappable_size;
+
+ drm_intel_get_aperture_sizes(winsys->fd, &mappable_size, &aper_size);
+
+ return aper_size >> 20;
+}
+
struct intel_context *
intel_winsys_create_context(struct intel_winsys *winsys)
{
diff --git a/src/gallium/winsys/intel/intel_winsys.h b/src/gallium/winsys/intel/intel_winsys.h
index 197eae8cd5c..4bf9a16ee93 100644
--- a/src/gallium/winsys/intel/intel_winsys.h
+++ b/src/gallium/winsys/intel/intel_winsys.h
@@ -91,6 +91,9 @@ intel_winsys_destroy(struct intel_winsys *winsys);
const struct intel_winsys_info *
intel_winsys_get_info(const struct intel_winsys *winsys);
+int
+intel_winsys_get_aperture_size(const struct intel_winsys *winsys);
+
/**
* Create a logical context for use with the render ring.
*/