mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
i965: Wire up initial support for DRI_RENDERER_QUERY extension
v2: Use sysconf instead of sysinfo for improved portability. Suggested by Ken. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
2fe6fbd19f
commit
1e4ce08f38
1 changed files with 83 additions and 0 deletions
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/framebuffer.h"
|
||||
|
|
@ -857,6 +858,87 @@ static struct __DRIimageExtensionRec intelImageExtension = {
|
|||
.createImageFromDmaBufs = intel_create_image_from_dma_bufs
|
||||
};
|
||||
|
||||
static int
|
||||
brw_query_renderer_integer(__DRIscreen *psp, int param, int *value)
|
||||
{
|
||||
const struct intel_screen *const intelScreen =
|
||||
(struct intel_screen *) psp->driverPrivate;
|
||||
|
||||
switch (param) {
|
||||
case __DRI2_RENDERER_VENDOR_ID:
|
||||
value[0] = 0x8086;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_DEVICE_ID:
|
||||
value[0] = intelScreen->deviceID;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_ACCELERATED:
|
||||
value[0] = 1;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_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.
|
||||
*
|
||||
* Can only map 2G onto the GPU through the GTT.
|
||||
*/
|
||||
const unsigned gpu_mappable_megabytes = 2 * 1024 * 3 / 4;
|
||||
|
||||
const long system_memory_pages = sysconf(_SC_PHYS_PAGES);
|
||||
const long system_page_size = sysconf(_SC_PAGE_SIZE);
|
||||
|
||||
if (system_memory_pages <= 0 || system_page_size <= 0)
|
||||
return -1;
|
||||
|
||||
const uint64_t system_memory_bytes = (uint64_t) system_memory_pages
|
||||
* (uint64_t) system_page_size;
|
||||
|
||||
const unsigned system_memory_megabytes =
|
||||
(unsigned) (system_memory_bytes / 1024);
|
||||
|
||||
value[0] = MIN2(system_memory_megabytes, gpu_mappable_megabytes);
|
||||
return 0;
|
||||
}
|
||||
case __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE:
|
||||
value[0] = 1;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_PREFERRED_PROFILE:
|
||||
value[0] = (psp->max_gl_core_version != 0)
|
||||
? (1U << __DRI_API_OPENGL_CORE) : (1U << __DRI_API_OPENGL);
|
||||
return 0;
|
||||
default:
|
||||
return driQueryRendererIntegerCommon(psp, param, value);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
brw_query_renderer_string(__DRIscreen *psp, int param, const char **value)
|
||||
{
|
||||
const struct intel_screen *intelScreen =
|
||||
(struct intel_screen *) psp->driverPrivate;
|
||||
|
||||
switch (param) {
|
||||
case __DRI2_RENDERER_VENDOR_ID:
|
||||
value[0] = brw_vendor_string;
|
||||
return 0;
|
||||
case __DRI2_RENDERER_DEVICE_ID:
|
||||
value[0] = brw_get_renderer_string(intelScreen->deviceID);
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static struct __DRI2rendererQueryExtensionRec intelRendererQueryExtension = {
|
||||
.base = { __DRI2_RENDERER_QUERY, 1 },
|
||||
|
||||
.queryInteger = brw_query_renderer_integer,
|
||||
.queryString = brw_query_renderer_string
|
||||
};
|
||||
|
||||
static const struct __DRIrobustnessExtensionRec dri2Robustness = {
|
||||
{ __DRI2_ROBUSTNESS, 1 }
|
||||
};
|
||||
|
|
@ -865,6 +947,7 @@ static const __DRIextension *intelScreenExtensions[] = {
|
|||
&intelTexBufferExtension.base,
|
||||
&intelFlushExtension.base,
|
||||
&intelImageExtension.base,
|
||||
&intelRendererQueryExtension.base,
|
||||
&dri2ConfigQueryExtension.base,
|
||||
&dri2Robustness.base,
|
||||
NULL
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue