sna: Detect available instruction sets at runtime
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
56fd91fc83
commit
aa045d80ec
|
|
@ -48,6 +48,7 @@ libsna_la_SOURCES = \
|
|||
sna_accel.c \
|
||||
sna_blt.c \
|
||||
sna_composite.c \
|
||||
sna_cpu.c \
|
||||
sna_damage.c \
|
||||
sna_damage.h \
|
||||
sna_display.c \
|
||||
|
|
|
|||
|
|
@ -207,6 +207,18 @@ struct sna {
|
|||
#define SNA_TEAR_FREE 0x10
|
||||
#define SNA_FORCE_SHADOW 0x20
|
||||
|
||||
unsigned cpu_features;
|
||||
#define MMX 0x1
|
||||
#define SSE 0x2
|
||||
#define SSE2 0x4
|
||||
#define SSE3 0x8
|
||||
#define SSSE3 0x10
|
||||
#define SSE4a 0x20
|
||||
#define SSE4_1 0x40
|
||||
#define SSE4_2 0x80
|
||||
#define AVX 0x100
|
||||
#define AVX2 0x200
|
||||
|
||||
unsigned watch_flush;
|
||||
|
||||
struct timeval timer_tv;
|
||||
|
|
@ -855,6 +867,8 @@ inline static bool is_clipped(const RegionRec *r,
|
|||
r->extents.y2 - r->extents.y1 != d->height);
|
||||
}
|
||||
|
||||
unsigned sna_cpu_detect(void);
|
||||
|
||||
void sna_threads_init(void);
|
||||
int sna_use_threads (int width, int height, int threshold);
|
||||
void sna_threads_run(void (*func)(void *arg), void *arg);
|
||||
|
|
|
|||
|
|
@ -1371,7 +1371,7 @@ static bool
|
|||
sna_pixmap_create_mappable_gpu(PixmapPtr pixmap)
|
||||
{
|
||||
struct sna *sna = to_sna_from_pixmap(pixmap);
|
||||
struct sna_pixmap *priv = sna_pixmap(pixmap);;
|
||||
struct sna_pixmap *priv = sna_pixmap(pixmap);
|
||||
unsigned create;
|
||||
|
||||
if (wedged(sna))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright (c) 2013 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* Authors:
|
||||
* Chris Wilson <chris@chris-wilson.co.uk>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "sna.h"
|
||||
|
||||
#include <cpuid.h>
|
||||
|
||||
unsigned sna_cpu_detect(void)
|
||||
{
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
unsigned features = 0;
|
||||
|
||||
__cpuid(0, eax, ebx, ecx, edx);
|
||||
|
||||
if (eax & bit_SSE3)
|
||||
features |= SSE3;
|
||||
|
||||
if (eax & bit_SSSE3)
|
||||
features |= SSSE3;
|
||||
|
||||
if (eax & bit_SSE4_1)
|
||||
features |= SSE4_1;
|
||||
|
||||
if (eax & bit_SSE4_2)
|
||||
features |= SSE4_2;
|
||||
|
||||
if (eax & bit_AVX)
|
||||
features |= AVX;
|
||||
|
||||
if (edx & bit_MMX)
|
||||
features |= MMX;
|
||||
|
||||
if (edx & bit_SSE)
|
||||
features |= SSE;
|
||||
|
||||
if (edx & bit_SSE2)
|
||||
features |= SSE2;
|
||||
|
||||
if (edx & bit_SSE4a)
|
||||
features |= SSE4a;
|
||||
|
||||
__cpuid(7, eax, ebx, ecx, edx);
|
||||
|
||||
if (eax & bit_AVX2)
|
||||
features |= AVX2;
|
||||
|
||||
return features;
|
||||
}
|
||||
|
|
@ -487,6 +487,8 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
|
|||
|
||||
sna->info = (void *)((uintptr_t)scrn->driverPrivate & ~1);
|
||||
scrn->driverPrivate = sna;
|
||||
|
||||
sna->cpu_features = sna_cpu_detect();
|
||||
}
|
||||
sna = to_sna(scrn);
|
||||
sna->scrn = scrn;
|
||||
|
|
|
|||
Loading…
Reference in New Issue