mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-04 12:07:12 +00:00 
			
		
		
		
	Initial import of intel-graphics-tools with some microbenchmarks.
This commit is contained in:
		
						commit
						8c64183a46
					
				
							
								
								
									
										32
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
*.la
 | 
			
		||||
*.lo
 | 
			
		||||
*.o
 | 
			
		||||
*~
 | 
			
		||||
aclocal.m4
 | 
			
		||||
autom4te.cache
 | 
			
		||||
compile
 | 
			
		||||
config.guess
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
config.sub
 | 
			
		||||
configure
 | 
			
		||||
configure.lineno
 | 
			
		||||
depcomp
 | 
			
		||||
doltcompile
 | 
			
		||||
doltlibtool
 | 
			
		||||
install-sh
 | 
			
		||||
libtool
 | 
			
		||||
ltmain.sh
 | 
			
		||||
missing
 | 
			
		||||
shave
 | 
			
		||||
shave-libtool
 | 
			
		||||
stamp-h1
 | 
			
		||||
cscope.*
 | 
			
		||||
benchmarks/intel_upload_blit_large
 | 
			
		||||
benchmarks/intel_upload_blit_small
 | 
			
		||||
							
								
								
									
										25
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
# Copyright © 2005 Adam Jackson.
 | 
			
		||||
# Copyright © 2009 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
 | 
			
		||||
#  on the rights to use, copy, modify, merge, publish, distribute, sub
 | 
			
		||||
#  license, 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 NON-INFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
#  ADAM JACKSON 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.
 | 
			
		||||
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
SUBDIRS = tests tools benchmarks
 | 
			
		||||
							
								
								
									
										25
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								README
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
This is a collection of tools for development and testing of the Intel DRM
 | 
			
		||||
driver.  There are many macro-level test suites that get used against our
 | 
			
		||||
driver, including xtest, rendercheck, piglit, and oglconform, but failures
 | 
			
		||||
from those can be difficult to track down to kernel changes, and many require
 | 
			
		||||
complicated build procedures or specific testing environments to get useful
 | 
			
		||||
results.
 | 
			
		||||
 | 
			
		||||
Thus, intel-graphics-tools was a project I started to collect some low-level
 | 
			
		||||
tools I intended to build.  There are 3 subdirectories:
 | 
			
		||||
 | 
			
		||||
benchmarks/
 | 
			
		||||
	This should be a collection of useful microbenchmarks.  The hope is
 | 
			
		||||
	that people can use these to tune some pieces of DRM code in relevant
 | 
			
		||||
	ways.
 | 
			
		||||
 | 
			
		||||
tests/
 | 
			
		||||
	This is a set of automated tests to run against the DRM to validate
 | 
			
		||||
	changes.  Hopefully this can cover the relevant cases we need to
 | 
			
		||||
	worry about, including backwards compatibility.
 | 
			
		||||
 | 
			
		||||
tools/
 | 
			
		||||
	This is a collection of debugging tools that had previously been
 | 
			
		||||
	built with the 2D driver but not shipped.  Some distros were hacking
 | 
			
		||||
	up the 2D build to ship them.  Instead, here's a separate package for
 | 
			
		||||
	people debugging the driver.
 | 
			
		||||
							
								
								
									
										12
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
 | 
			
		||||
srcdir=`dirname $0`
 | 
			
		||||
test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
ORIGDIR=`pwd`
 | 
			
		||||
cd $srcdir
 | 
			
		||||
 | 
			
		||||
autoreconf -v --install || exit 1
 | 
			
		||||
cd $ORIGDIR || exit $?
 | 
			
		||||
 | 
			
		||||
$srcdir/configure --enable-maintainer-mode "$@"
 | 
			
		||||
							
								
								
									
										14
									
								
								benchmarks/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								benchmarks/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
bin_PROGRAMS = \
 | 
			
		||||
	intel_upload_blit_large \
 | 
			
		||||
	intel_upload_blit_small
 | 
			
		||||
 | 
			
		||||
BENCHMARK_LIBS = \
 | 
			
		||||
	../lib/libintel_tools.la \
 | 
			
		||||
	$(DRM_LIBS)
 | 
			
		||||
 | 
			
		||||
intel_upload_blit_large_LDADD = $(BENCHMARK_LIBS)
 | 
			
		||||
intel_upload_blit_small_LDADD = $(BENCHMARK_LIBS)
 | 
			
		||||
 | 
			
		||||
AM_CFLAGS = $(DRM_CFLAGS) $(WARN_CFLAGS) \
 | 
			
		||||
	-I$(srcdir)/.. \
 | 
			
		||||
	-I$(srcdir)/../lib
 | 
			
		||||
							
								
								
									
										157
									
								
								benchmarks/intel_upload_blit_large.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								benchmarks/intel_upload_blit_large.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,157 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2009 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:
 | 
			
		||||
 *    Eric Anholt <eric@anholt.net>
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Roughly simulates repeatedly uploading frames of images, by uploading
 | 
			
		||||
 * the data all at once with pwrite, and then blitting it to another buffer.
 | 
			
		||||
 *
 | 
			
		||||
 * You might think of this like a movie player, but that wouldn't be entirely
 | 
			
		||||
 * accurate, since the access patterns of the memory would be different
 | 
			
		||||
 * (generally, smaller source image, upscaled, an thus different memory access
 | 
			
		||||
 * pattern in both texel fetch for the stretching and the destination writes).
 | 
			
		||||
 * However, some things like swfdec would be doing something like this since
 | 
			
		||||
 * they compute their data in host memory and upload the full sw rendered
 | 
			
		||||
 * frame.
 | 
			
		||||
 *
 | 
			
		||||
 * Additionally, those applications should be rendering at the screen refresh
 | 
			
		||||
 * rate, while this test has no limits, and so can get itself into the
 | 
			
		||||
 * working set larger than aperture size performance disaster.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include "drm.h"
 | 
			
		||||
#include "i915_drm.h"
 | 
			
		||||
#include "drmtest.h"
 | 
			
		||||
#include "intel_bufmgr.h"
 | 
			
		||||
#include "intel_batchbuffer.h"
 | 
			
		||||
 | 
			
		||||
#define OBJECT_WIDTH	1280
 | 
			
		||||
#define OBJECT_HEIGHT	720
 | 
			
		||||
 | 
			
		||||
static double
 | 
			
		||||
get_time_in_secs(void)
 | 
			
		||||
{
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
 | 
			
		||||
	gettimeofday(&tv, NULL);
 | 
			
		||||
 | 
			
		||||
	return (double)tv.tv_sec + tv.tv_usec / 1000000.0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	  drm_intel_bo *dst_bo, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t data[width * height];
 | 
			
		||||
	drm_intel_bo *src_bo;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	/* Generate some junk.  Real workloads would be doing a lot more
 | 
			
		||||
	 * work to generate the junk.
 | 
			
		||||
	 */
 | 
			
		||||
	for (i = 0; i < width * height; i++) {
 | 
			
		||||
		data[i] = (uint32_t)random();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Upload the junk. */
 | 
			
		||||
	src_bo = drm_intel_bo_alloc(bufmgr, "src", sizeof(data), 4096);
 | 
			
		||||
	drm_intel_bo_subdata(src_bo, 0, sizeof(data), data);
 | 
			
		||||
 | 
			
		||||
	/* Render the junk to the dst. */
 | 
			
		||||
	BEGIN_BATCH(8);
 | 
			
		||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
			
		||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
			
		||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
			
		||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
			
		||||
		  (0xcc << 16) | /* copy ROP */
 | 
			
		||||
		  (width * 4) /* dst pitch */);
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
	drm_intel_bo_unreference(src_bo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int fd;
 | 
			
		||||
	int object_size = OBJECT_WIDTH * OBJECT_HEIGHT * 4;
 | 
			
		||||
	double start_time, end_time;
 | 
			
		||||
	drm_intel_bo *dst_bo;
 | 
			
		||||
	drm_intel_bufmgr *bufmgr;
 | 
			
		||||
	struct intel_batchbuffer *batch;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	fd = drm_open_any();
 | 
			
		||||
 | 
			
		||||
	bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
 | 
			
		||||
	drm_intel_bufmgr_gem_enable_reuse(bufmgr);
 | 
			
		||||
 | 
			
		||||
	batch = intel_batchbuffer_alloc(bufmgr);
 | 
			
		||||
 | 
			
		||||
	dst_bo = drm_intel_bo_alloc(bufmgr, "dst", object_size, 4096);
 | 
			
		||||
 | 
			
		||||
	/* Prep loop to get us warmed up. */
 | 
			
		||||
	for (i = 0; i < 60; i++) {
 | 
			
		||||
		do_render(bufmgr, batch, dst_bo, OBJECT_WIDTH, OBJECT_HEIGHT);
 | 
			
		||||
	}
 | 
			
		||||
	drm_intel_bo_wait_rendering(dst_bo);
 | 
			
		||||
 | 
			
		||||
	/* Do the actual timing. */
 | 
			
		||||
	start_time = get_time_in_secs();
 | 
			
		||||
	for (i = 0; i < 200; i++) {
 | 
			
		||||
		do_render(bufmgr, batch, dst_bo, OBJECT_WIDTH, OBJECT_HEIGHT);
 | 
			
		||||
	}
 | 
			
		||||
	drm_intel_bo_wait_rendering(dst_bo);
 | 
			
		||||
	end_time = get_time_in_secs();
 | 
			
		||||
 | 
			
		||||
	printf("%d iterations in %.03f secs: %.01f MB/sec\n", i,
 | 
			
		||||
	       end_time - start_time,
 | 
			
		||||
	       (double)OBJECT_WIDTH * OBJECT_HEIGHT * 4 /
 | 
			
		||||
	       (end_time - start_time));
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_free(batch);
 | 
			
		||||
	drm_intel_bufmgr_destroy(bufmgr);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										172
									
								
								benchmarks/intel_upload_blit_small.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								benchmarks/intel_upload_blit_small.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,172 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2009 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:
 | 
			
		||||
 *    Eric Anholt <eric@anholt.net>
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Roughly simulates Mesa's current vertex buffer behavior: do a series of
 | 
			
		||||
 * small pwrites on a moderately-sized buffer, then render using it.
 | 
			
		||||
 *
 | 
			
		||||
 * The vertex buffer uploads
 | 
			
		||||
 *
 | 
			
		||||
 * You might think of this like a movie player, but that wouldn't be entirely
 | 
			
		||||
 * accurate, since the access patterns of the memory would be different
 | 
			
		||||
 * (generally, smaller source image, upscaled, an thus different memory access
 | 
			
		||||
 * pattern in both texel fetch for the stretching and the destination writes).
 | 
			
		||||
 * However, some things like swfdec would be doing something like this since
 | 
			
		||||
 * they compute their data in host memory and upload the full sw rendered
 | 
			
		||||
 * frame.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include "drm.h"
 | 
			
		||||
#include "i915_drm.h"
 | 
			
		||||
#include "drmtest.h"
 | 
			
		||||
#include "intel_bufmgr.h"
 | 
			
		||||
#include "intel_batchbuffer.h"
 | 
			
		||||
 | 
			
		||||
/* Happens to be 128k, the size of the VBOs used by i965's Mesa driver. */
 | 
			
		||||
#define OBJECT_WIDTH	256
 | 
			
		||||
#define OBJECT_HEIGHT	128
 | 
			
		||||
 | 
			
		||||
static double
 | 
			
		||||
get_time_in_secs(void)
 | 
			
		||||
{
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
 | 
			
		||||
	gettimeofday(&tv, NULL);
 | 
			
		||||
 | 
			
		||||
	return (double)tv.tv_sec + tv.tv_usec / 1000000.0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
do_render(drm_intel_bufmgr *bufmgr, struct intel_batchbuffer *batch,
 | 
			
		||||
	  drm_intel_bo *dst_bo, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t data[64];
 | 
			
		||||
	drm_intel_bo *src_bo;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	src_bo = drm_intel_bo_alloc(bufmgr, "src", width * height * 4, 4096);
 | 
			
		||||
 | 
			
		||||
	/* Upload some junk.  Real workloads would be doing a lot more
 | 
			
		||||
	 * work to generate the junk.
 | 
			
		||||
	 */
 | 
			
		||||
	for (i = 0; i < width * height;) {
 | 
			
		||||
		int size, j;
 | 
			
		||||
 | 
			
		||||
		/* Choose a size from 1 to 64 dwords to upload.
 | 
			
		||||
		 * Normal workloads have a distribution of sizes with a
 | 
			
		||||
		 * large tail (something in your scene's going to have a big
 | 
			
		||||
		 * pile of vertices, most likely), but I'm trying to get at
 | 
			
		||||
		 * the cost of the small uploads here.
 | 
			
		||||
		 */
 | 
			
		||||
		size = random() % 64 + 1;
 | 
			
		||||
		if (i + size > width * height)
 | 
			
		||||
			size = width * height - i;
 | 
			
		||||
 | 
			
		||||
		for (j = 0; j < size; j++)
 | 
			
		||||
			data[j] = (uint32_t)random();
 | 
			
		||||
 | 
			
		||||
		/* Upload the junk. */
 | 
			
		||||
		drm_intel_bo_subdata(src_bo, i * 4, size * 4, data);
 | 
			
		||||
 | 
			
		||||
		i += size;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Render the junk to the dst. */
 | 
			
		||||
	BEGIN_BATCH(8);
 | 
			
		||||
	OUT_BATCH(XY_SRC_COPY_BLT_CMD |
 | 
			
		||||
		  XY_SRC_COPY_BLT_WRITE_ALPHA |
 | 
			
		||||
		  XY_SRC_COPY_BLT_WRITE_RGB);
 | 
			
		||||
	OUT_BATCH((3 << 24) | /* 32 bits */
 | 
			
		||||
		  (0xcc << 16) | /* copy ROP */
 | 
			
		||||
		  (width * 4) /* dst pitch */);
 | 
			
		||||
	OUT_BATCH(0); /* dst x1,y1 */
 | 
			
		||||
	OUT_BATCH((height << 16) | width); /* dst x2,y2 */
 | 
			
		||||
	OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
 | 
			
		||||
	OUT_BATCH(0); /* src x1,y1 */
 | 
			
		||||
	OUT_BATCH(width * 4); /* src pitch */
 | 
			
		||||
	OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
 | 
			
		||||
	ADVANCE_BATCH();
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_flush(batch);
 | 
			
		||||
 | 
			
		||||
	drm_intel_bo_unreference(src_bo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int fd;
 | 
			
		||||
	int object_size = OBJECT_WIDTH * OBJECT_HEIGHT * 4;
 | 
			
		||||
	double start_time, end_time;
 | 
			
		||||
	drm_intel_bo *dst_bo;
 | 
			
		||||
	drm_intel_bufmgr *bufmgr;
 | 
			
		||||
	struct intel_batchbuffer *batch;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	fd = drm_open_any();
 | 
			
		||||
 | 
			
		||||
	bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
 | 
			
		||||
	drm_intel_bufmgr_gem_enable_reuse(bufmgr);
 | 
			
		||||
 | 
			
		||||
	batch = intel_batchbuffer_alloc(bufmgr);
 | 
			
		||||
 | 
			
		||||
	dst_bo = drm_intel_bo_alloc(bufmgr, "dst", object_size, 4096);
 | 
			
		||||
 | 
			
		||||
	/* Prep loop to get us warmed up. */
 | 
			
		||||
	for (i = 0; i < 20; i++) {
 | 
			
		||||
		do_render(bufmgr, batch, dst_bo, OBJECT_WIDTH, OBJECT_HEIGHT);
 | 
			
		||||
	}
 | 
			
		||||
	drm_intel_bo_wait_rendering(dst_bo);
 | 
			
		||||
 | 
			
		||||
	/* Do the actual timing. */
 | 
			
		||||
	start_time = get_time_in_secs();
 | 
			
		||||
	for (i = 0; i < 1000; i++) {
 | 
			
		||||
		do_render(bufmgr, batch, dst_bo, OBJECT_WIDTH, OBJECT_HEIGHT);
 | 
			
		||||
	}
 | 
			
		||||
	drm_intel_bo_wait_rendering(dst_bo);
 | 
			
		||||
	end_time = get_time_in_secs();
 | 
			
		||||
 | 
			
		||||
	printf("%d iterations in %.03f secs: %.01f MB/sec\n", i,
 | 
			
		||||
	       end_time - start_time,
 | 
			
		||||
	       (double)OBJECT_WIDTH * OBJECT_HEIGHT * 4 /
 | 
			
		||||
	       (end_time - start_time));
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_free(batch);
 | 
			
		||||
	drm_intel_bufmgr_destroy(bufmgr);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
#  Copyright 2005 Adam Jackson.
 | 
			
		||||
#
 | 
			
		||||
#  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
 | 
			
		||||
#  on the rights to use, copy, modify, merge, publish, distribute, sub
 | 
			
		||||
#  license, 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 NON-INFRINGEMENT.  IN NO EVENT SHALL
 | 
			
		||||
#  ADAM JACKSON 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.
 | 
			
		||||
#
 | 
			
		||||
# Process this file with autoconf to produce a configure script
 | 
			
		||||
 | 
			
		||||
AC_PREREQ(2.57)
 | 
			
		||||
AC_INIT([xf86-video-intel],
 | 
			
		||||
        2.6.99.1,
 | 
			
		||||
        [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
 | 
			
		||||
        xf86-video-intel)
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_SRCDIR([Makefile.am])
 | 
			
		||||
AM_CONFIG_HEADER([config.h])
 | 
			
		||||
AC_CONFIG_AUX_DIR(.)
 | 
			
		||||
 | 
			
		||||
AM_INIT_AUTOMAKE([dist-bzip2])
 | 
			
		||||
 | 
			
		||||
AM_MAINTAINER_MODE
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_FILES([
 | 
			
		||||
	shave
 | 
			
		||||
	shave-libtool
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Checks for programs.
 | 
			
		||||
AC_DISABLE_STATIC
 | 
			
		||||
AC_PROG_LIBTOOL
 | 
			
		||||
DOLT
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AM_PROG_CC_C_O
 | 
			
		||||
 | 
			
		||||
PKG_CHECK_MODULES(DRM, [libdrm_intel >= 2.4.5])
 | 
			
		||||
PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
 | 
			
		||||
 | 
			
		||||
dnl Use lots of warning flags with GCC
 | 
			
		||||
 | 
			
		||||
WARN_CFLAGS=""
 | 
			
		||||
 | 
			
		||||
if test "x$GCC" = "xyes"; then
 | 
			
		||||
	WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
 | 
			
		||||
	-Wmissing-prototypes -Wmissing-declarations \
 | 
			
		||||
	-Wnested-externs -fno-strict-aliasing"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_SUBST([WARN_CFLAGS])
 | 
			
		||||
 | 
			
		||||
SHAVE_INIT([.], [enable])
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT([
 | 
			
		||||
	Makefile
 | 
			
		||||
	benchmarks/Makefile
 | 
			
		||||
	lib/Makefile
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										2872
									
								
								i810_reg.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2872
									
								
								i810_reg.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								lib/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
libintel_tools_la_SOURCES = \
 | 
			
		||||
	intel_batchbuffer.c \
 | 
			
		||||
	intel_batchbuffer.h \
 | 
			
		||||
	drmtest.c \
 | 
			
		||||
	drmtest.h
 | 
			
		||||
 | 
			
		||||
noinst_LTLIBRARIES = libintel_tools.la
 | 
			
		||||
 | 
			
		||||
AM_CFLAGS = $(DRM_CFLAGS) $(WARN_CFLAGS) \
 | 
			
		||||
	-I$(srcdir)/..
 | 
			
		||||
							
								
								
									
										84
									
								
								lib/drmtest.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lib/drmtest.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2007 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:
 | 
			
		||||
 *    Eric Anholt <eric@anholt.net>
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include "drmtest.h"
 | 
			
		||||
 | 
			
		||||
/** Open the first DRM device we can find, searching up to 16 device nodes */
 | 
			
		||||
int drm_open_any(void)
 | 
			
		||||
{
 | 
			
		||||
	char name[20];
 | 
			
		||||
	int i, fd;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 16; i++) {
 | 
			
		||||
		sprintf(name, "/dev/dri/card%d", i);
 | 
			
		||||
		fd = open(name, O_RDWR);
 | 
			
		||||
		if (fd != -1)
 | 
			
		||||
			return fd;
 | 
			
		||||
	}
 | 
			
		||||
	abort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open the first DRM device we can find where we end up being the master.
 | 
			
		||||
 */
 | 
			
		||||
int drm_open_any_master(void)
 | 
			
		||||
{
 | 
			
		||||
	char name[20];
 | 
			
		||||
	int i, fd;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 16; i++) {
 | 
			
		||||
		drm_client_t client;
 | 
			
		||||
		int ret;
 | 
			
		||||
 | 
			
		||||
		sprintf(name, "/dev/dri/card%d", i);
 | 
			
		||||
		fd = open(name, O_RDWR);
 | 
			
		||||
		if (fd == -1)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		/* Check that we're the only opener and authed. */
 | 
			
		||||
		client.idx = 0;
 | 
			
		||||
		ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
 | 
			
		||||
		assert (ret == 0);
 | 
			
		||||
		if (!client.auth) {
 | 
			
		||||
			close(fd);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		client.idx = 1;
 | 
			
		||||
		ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
 | 
			
		||||
		if (ret != -1 || errno != EINVAL) {
 | 
			
		||||
			close(fd);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		return fd;
 | 
			
		||||
	}
 | 
			
		||||
	fprintf(stderr, "Couldn't find an un-controlled DRM device\n");
 | 
			
		||||
	abort();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								lib/drmtest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								lib/drmtest.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2007 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:
 | 
			
		||||
 *    Eric Anholt <eric@anholt.net>
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include "xf86drm.h"
 | 
			
		||||
 | 
			
		||||
int drm_open_any(void);
 | 
			
		||||
int drm_open_any_master(void);
 | 
			
		||||
							
								
								
									
										139
									
								
								lib/intel_batchbuffer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								lib/intel_batchbuffer.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,139 @@
 | 
			
		||||
/**************************************************************************
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas.
 | 
			
		||||
 * All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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, sub license, 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 NON-INFRINGEMENT.
 | 
			
		||||
 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
 | 
			
		||||
 * 
 | 
			
		||||
 **************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include "drm.h"
 | 
			
		||||
#include "intel_batchbuffer.h"
 | 
			
		||||
#include "intel_bufmgr.h"
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_reset(struct intel_batchbuffer *batch)
 | 
			
		||||
{
 | 
			
		||||
	if (batch->bo != NULL) {
 | 
			
		||||
		drm_intel_bo_unreference(batch->bo);
 | 
			
		||||
		batch->bo = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!batch->buffer)
 | 
			
		||||
		batch->buffer = malloc(BATCH_SZ);
 | 
			
		||||
 | 
			
		||||
	batch->bo = drm_intel_bo_alloc(batch->bufmgr, "batchbuffer",
 | 
			
		||||
				       BATCH_SZ, 4096);
 | 
			
		||||
 | 
			
		||||
	batch->map = batch->buffer;
 | 
			
		||||
	batch->size = BATCH_SZ;
 | 
			
		||||
	batch->ptr = batch->map;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct intel_batchbuffer *
 | 
			
		||||
intel_batchbuffer_alloc(drm_intel_bufmgr *bufmgr)
 | 
			
		||||
{
 | 
			
		||||
	struct intel_batchbuffer *batch = calloc(sizeof(*batch), 1);
 | 
			
		||||
 | 
			
		||||
	batch->bufmgr = bufmgr;
 | 
			
		||||
	intel_batchbuffer_reset(batch);
 | 
			
		||||
 | 
			
		||||
	return batch;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_free(struct intel_batchbuffer *batch)
 | 
			
		||||
{
 | 
			
		||||
	free (batch->buffer);
 | 
			
		||||
 | 
			
		||||
	drm_intel_bo_unreference(batch->bo);
 | 
			
		||||
	batch->bo = NULL;
 | 
			
		||||
	free(batch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_flush(struct intel_batchbuffer *batch)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int used = batch->ptr - batch->map;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (used == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/* Round batchbuffer usage to 2 DWORDs. */
 | 
			
		||||
	if ((used & 4) == 0) {
 | 
			
		||||
		*(uint32_t *) (batch->ptr) = 0; /* noop */
 | 
			
		||||
		batch->ptr += 4;
 | 
			
		||||
		used = batch->ptr - batch->map;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Mark the end of the buffer. */
 | 
			
		||||
	*(uint32_t *) (batch->ptr) = MI_BATCH_BUFFER_END; /* noop */
 | 
			
		||||
	batch->ptr += 4;
 | 
			
		||||
	used = batch->ptr - batch->map;
 | 
			
		||||
 | 
			
		||||
	drm_intel_bo_subdata(batch->bo, 0, used, batch->buffer);
 | 
			
		||||
 | 
			
		||||
	batch->map = NULL;
 | 
			
		||||
	batch->ptr = NULL;
 | 
			
		||||
 | 
			
		||||
	ret = drm_intel_bo_exec(batch->bo, used, NULL, 0, 0);
 | 
			
		||||
	assert(ret == 0);
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_reset(batch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*  This is the only way buffers get added to the validate list.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 | 
			
		||||
                             drm_intel_bo *buffer, uint32_t delta,
 | 
			
		||||
			     uint32_t read_domains, uint32_t write_domain)
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (batch->ptr - batch->map > batch->bo->size)
 | 
			
		||||
		printf("bad relocation ptr %p map %p offset %d size %ld\n",
 | 
			
		||||
		       batch->ptr, batch->map, batch->ptr - batch->map,
 | 
			
		||||
		       batch->bo->size);
 | 
			
		||||
 | 
			
		||||
	ret = drm_intel_bo_emit_reloc(batch->bo, batch->ptr - batch->map,
 | 
			
		||||
				      buffer, delta,
 | 
			
		||||
				      read_domains, write_domain);
 | 
			
		||||
	intel_batchbuffer_emit_dword(batch, buffer->offset + delta);
 | 
			
		||||
	assert(ret == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
intel_batchbuffer_data(struct intel_batchbuffer *batch,
 | 
			
		||||
                       const void *data, unsigned int bytes)
 | 
			
		||||
{
 | 
			
		||||
	assert((bytes & 3) == 0);
 | 
			
		||||
	intel_batchbuffer_require_space(batch, bytes);
 | 
			
		||||
	memcpy(batch->ptr, data, bytes);
 | 
			
		||||
	batch->ptr += bytes;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										117
									
								
								lib/intel_batchbuffer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								lib/intel_batchbuffer.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,117 @@
 | 
			
		||||
#ifndef INTEL_BATCHBUFFER_H
 | 
			
		||||
#define INTEL_BATCHBUFFER_H
 | 
			
		||||
 | 
			
		||||
#include "intel_bufmgr.h"
 | 
			
		||||
#include "i810_reg.h"
 | 
			
		||||
 | 
			
		||||
#define BATCH_SZ 4096
 | 
			
		||||
#define BATCH_RESERVED 16
 | 
			
		||||
 | 
			
		||||
struct intel_batchbuffer
 | 
			
		||||
{
 | 
			
		||||
	drm_intel_bufmgr *bufmgr;
 | 
			
		||||
 | 
			
		||||
	drm_intel_bo *bo;
 | 
			
		||||
 | 
			
		||||
	uint8_t *buffer;
 | 
			
		||||
 | 
			
		||||
	uint8_t *map;
 | 
			
		||||
	uint8_t *ptr;
 | 
			
		||||
 | 
			
		||||
	/* debug stuff */
 | 
			
		||||
	struct {
 | 
			
		||||
		uint8_t *start_ptr;
 | 
			
		||||
		unsigned int total;
 | 
			
		||||
	} emit;
 | 
			
		||||
 | 
			
		||||
	unsigned int size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct intel_batchbuffer *intel_batchbuffer_alloc(drm_intel_bufmgr *bufmgr);
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_free(struct intel_batchbuffer *batch);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_flush(struct intel_batchbuffer *batch);
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_reset(struct intel_batchbuffer *batch);
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_data(struct intel_batchbuffer *batch,
 | 
			
		||||
                            const void *data, unsigned int bytes);
 | 
			
		||||
 | 
			
		||||
void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
 | 
			
		||||
				  drm_intel_bo *buffer,
 | 
			
		||||
				  uint32_t delta,
 | 
			
		||||
				  uint32_t read_domains,
 | 
			
		||||
				  uint32_t write_domain);
 | 
			
		||||
 | 
			
		||||
/* Inline functions - might actually be better off with these
 | 
			
		||||
 * non-inlined.  Certainly better off switching all command packets to
 | 
			
		||||
 * be passed as structs rather than dwords, but that's a little bit of
 | 
			
		||||
 * work...
 | 
			
		||||
 */
 | 
			
		||||
static inline int
 | 
			
		||||
intel_batchbuffer_space(struct intel_batchbuffer *batch)
 | 
			
		||||
{
 | 
			
		||||
	return (batch->size - BATCH_RESERVED) - (batch->ptr - batch->map);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, uint32_t dword)
 | 
			
		||||
{
 | 
			
		||||
	assert(batch->map);
 | 
			
		||||
	assert(intel_batchbuffer_space(batch) >= 4);
 | 
			
		||||
	*(uint32_t *) (batch->ptr) = dword;
 | 
			
		||||
	batch->ptr += 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
 | 
			
		||||
                                unsigned int sz)
 | 
			
		||||
{
 | 
			
		||||
	assert(sz < batch->size - 8);
 | 
			
		||||
	if (intel_batchbuffer_space(batch) < sz)
 | 
			
		||||
		intel_batchbuffer_flush(batch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Here are the crusty old macros, to be removed:
 | 
			
		||||
 */
 | 
			
		||||
#define BATCH_LOCALS
 | 
			
		||||
 | 
			
		||||
#define BEGIN_BATCH(n) do {						\
 | 
			
		||||
	intel_batchbuffer_require_space(batch, (n)*4);			\
 | 
			
		||||
	assert(batch->emit.start_ptr == NULL);				\
 | 
			
		||||
	batch->emit.total = (n) * 4;					\
 | 
			
		||||
	batch->emit.start_ptr = batch->ptr;				\
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define OUT_BATCH(d) intel_batchbuffer_emit_dword(batch, d)
 | 
			
		||||
 | 
			
		||||
#define OUT_RELOC(buf, read_domains, write_domain, delta) do {		\
 | 
			
		||||
	assert((delta) >= 0);						\
 | 
			
		||||
	intel_batchbuffer_emit_reloc(batch, buf, delta,			\
 | 
			
		||||
				     read_domains, write_domain);	\
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define ADVANCE_BATCH() do {						\
 | 
			
		||||
	unsigned int _n = batch->ptr - batch->emit.start_ptr;		\
 | 
			
		||||
	assert(batch->emit.start_ptr != NULL);				\
 | 
			
		||||
	if (_n != batch->emit.total) {					\
 | 
			
		||||
		fprintf(stderr,						\
 | 
			
		||||
			"ADVANCE_BATCH: %d of %d dwords emitted\n",	\
 | 
			
		||||
			_n, batch->emit.total);				\
 | 
			
		||||
		abort();						\
 | 
			
		||||
	}								\
 | 
			
		||||
	batch->emit.start_ptr = NULL;					\
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch)
 | 
			
		||||
{
 | 
			
		||||
	intel_batchbuffer_require_space(batch, 4);
 | 
			
		||||
	intel_batchbuffer_emit_dword(batch, MI_FLUSH);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										178
									
								
								m4/dolt.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								m4/dolt.m4
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,178 @@
 | 
			
		||||
dnl dolt, a replacement for libtool
 | 
			
		||||
dnl Copyright © 2007-2008 Josh Triplett <josh@freedesktop.org>
 | 
			
		||||
dnl Copying and distribution of this file, with or without modification,
 | 
			
		||||
dnl are permitted in any medium without royalty provided the copyright
 | 
			
		||||
dnl notice and this notice are preserved.
 | 
			
		||||
dnl
 | 
			
		||||
dnl To use dolt, invoke the DOLT macro immediately after the libtool macros.
 | 
			
		||||
dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it
 | 
			
		||||
dnl installed when running autoconf on your project.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([DOLT], [
 | 
			
		||||
AC_REQUIRE([AC_CANONICAL_HOST])
 | 
			
		||||
# dolt, a replacement for libtool
 | 
			
		||||
# Josh Triplett <josh@freedesktop.org>
 | 
			
		||||
AC_PATH_PROG(DOLT_BASH, bash)
 | 
			
		||||
AC_MSG_CHECKING([if dolt supports this host])
 | 
			
		||||
dolt_supported=yes
 | 
			
		||||
if test x$DOLT_BASH = x; then
 | 
			
		||||
    dolt_supported=no
 | 
			
		||||
fi
 | 
			
		||||
if test x$GCC != xyes; then
 | 
			
		||||
    dolt_supported=no
 | 
			
		||||
fi
 | 
			
		||||
case $host in
 | 
			
		||||
i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux* \
 | 
			
		||||
|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*)
 | 
			
		||||
    pic_options='-fPIC'
 | 
			
		||||
    ;;
 | 
			
		||||
i?86-apple-darwin*)
 | 
			
		||||
    pic_options='-fno-common'
 | 
			
		||||
    ;;
 | 
			
		||||
*)
 | 
			
		||||
    dolt_supported=no
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
if test x$dolt_supported = xno ; then
 | 
			
		||||
    AC_MSG_RESULT([no, falling back to libtool])
 | 
			
		||||
    LTCOMPILE='$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)'
 | 
			
		||||
    LTCXXCOMPILE='$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)'
 | 
			
		||||
else
 | 
			
		||||
    AC_MSG_RESULT([yes, replacing libtool])
 | 
			
		||||
 | 
			
		||||
dnl Start writing out doltcompile.
 | 
			
		||||
    cat <<__DOLTCOMPILE__EOF__ >doltcompile
 | 
			
		||||
#!$DOLT_BASH
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
args=("$[]@")
 | 
			
		||||
for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do
 | 
			
		||||
    if test x"${args@<:@$arg@:>@}" = x-o ; then
 | 
			
		||||
        objarg=$((arg+1))
 | 
			
		||||
        break
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
if test x$objarg = x ; then
 | 
			
		||||
    echo 'Error: no -o on compiler command line' 1>&2
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
lo="${args@<:@$objarg@:>@}"
 | 
			
		||||
obj="${lo%.lo}"
 | 
			
		||||
if test x"$lo" = x"$obj" ; then
 | 
			
		||||
    echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
objbase="${obj##*/}"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
 | 
			
		||||
dnl Write out shared compilation code.
 | 
			
		||||
    if test x$enable_shared = xyes; then
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
libobjdir="${obj%$objbase}.libs"
 | 
			
		||||
if test ! -d "$libobjdir" ; then
 | 
			
		||||
    mkdir_out="$(mkdir "$libobjdir" 2>&1)"
 | 
			
		||||
    mkdir_ret=$?
 | 
			
		||||
    if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then
 | 
			
		||||
	echo "$mkdir_out" 1>&2
 | 
			
		||||
        exit $mkdir_ret
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
pic_object="$libobjdir/$objbase.o"
 | 
			
		||||
args@<:@$objarg@:>@="$pic_object"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    cat <<__DOLTCOMPILE__EOF__ >>doltcompile
 | 
			
		||||
"\${args@<:@@@:>@}" $pic_options -DPIC || exit \$?
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
dnl Write out static compilation code.
 | 
			
		||||
dnl Avoid duplicate compiler output if also building shared objects.
 | 
			
		||||
    if test x$enable_static = xyes; then
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
non_pic_object="$obj.o"
 | 
			
		||||
args@<:@$objarg@:>@="$non_pic_object"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
        if test x$enable_shared = xyes; then
 | 
			
		||||
            cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $?
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
        else
 | 
			
		||||
            cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
"${args@<:@@@:>@}" || exit $?
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
dnl Write out the code to write the .lo file.
 | 
			
		||||
dnl The second line of the .lo file must match "^# Generated by .*libtool"
 | 
			
		||||
    cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
{
 | 
			
		||||
echo "# $lo - a libtool object file"
 | 
			
		||||
echo "# Generated by doltcompile, not libtool"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
 | 
			
		||||
    if test x$enable_shared = xyes; then
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
echo "pic_object='.libs/${objbase}.o'"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    else
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
echo pic_object=none
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if test x$enable_static = xyes; then
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
echo "non_pic_object='${objbase}.o'"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    else
 | 
			
		||||
        cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
echo non_pic_object=none
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
 | 
			
		||||
} > "$lo"
 | 
			
		||||
__DOLTCOMPILE__EOF__
 | 
			
		||||
 | 
			
		||||
dnl Done writing out doltcompile; substitute it for libtool compilation.
 | 
			
		||||
    chmod +x doltcompile
 | 
			
		||||
    LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)'
 | 
			
		||||
    LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)'
 | 
			
		||||
 | 
			
		||||
dnl automake ignores LTCOMPILE and LTCXXCOMPILE when it has separate CFLAGS for
 | 
			
		||||
dnl a target, so write out a libtool wrapper to handle that case.
 | 
			
		||||
dnl Note that doltlibtool does not handle inferred tags or option arguments
 | 
			
		||||
dnl without '=', because automake does not use them.
 | 
			
		||||
    cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
 | 
			
		||||
#!$DOLT_BASH
 | 
			
		||||
__DOLTLIBTOOL__EOF__
 | 
			
		||||
    cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
 | 
			
		||||
top_builddir_slash="${0%%doltlibtool}"
 | 
			
		||||
: ${top_builddir_slash:=./}
 | 
			
		||||
args=()
 | 
			
		||||
modeok=false
 | 
			
		||||
tagok=false
 | 
			
		||||
for arg in "$[]@"; do
 | 
			
		||||
    case "$arg" in
 | 
			
		||||
        --silent) ;;
 | 
			
		||||
        --mode=compile) modeok=true ;;
 | 
			
		||||
        --tag=CC|--tag=CXX) tagok=true ;;
 | 
			
		||||
        *) args@<:@${#args[@]}@:>@="$arg" ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
if $modeok && $tagok ; then
 | 
			
		||||
    . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
 | 
			
		||||
else
 | 
			
		||||
    exec ${top_builddir_slash}libtool "$[]@"
 | 
			
		||||
fi
 | 
			
		||||
__DOLTLIBTOOL__EOF__
 | 
			
		||||
 | 
			
		||||
dnl Done writing out doltlibtool; substitute it for libtool.
 | 
			
		||||
    chmod +x doltlibtool
 | 
			
		||||
    LIBTOOL='$(top_builddir)/doltlibtool'
 | 
			
		||||
fi
 | 
			
		||||
AC_SUBST(LTCOMPILE)
 | 
			
		||||
AC_SUBST(LTCXXCOMPILE)
 | 
			
		||||
# end dolt
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										73
									
								
								m4/shave.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								m4/shave.m4
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
			
		||||
dnl Make automake/libtool output more friendly to humans
 | 
			
		||||
dnl
 | 
			
		||||
dnl SHAVE_INIT([shavedir],[default_mode])
 | 
			
		||||
dnl
 | 
			
		||||
dnl shavedir: the directory where the shave scripts are, it defaults to
 | 
			
		||||
dnl           $(top_builddir)
 | 
			
		||||
dnl default_mode: (enable|disable) default shave mode.  This parameter
 | 
			
		||||
dnl               controls shave's behaviour when no option has been
 | 
			
		||||
dnl               given to configure.  It defaults to disable.
 | 
			
		||||
dnl
 | 
			
		||||
dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
 | 
			
		||||
dnl   before AC_CONFIG_FILE/AC_OUTPUT is perfect.  This macro rewrites CC and
 | 
			
		||||
dnl   LIBTOOL, you don't want the configure tests to have these variables
 | 
			
		||||
dnl   re-defined.
 | 
			
		||||
dnl * This macro requires GNU make's -s option.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([_SHAVE_ARG_ENABLE],
 | 
			
		||||
[
 | 
			
		||||
  AC_ARG_ENABLE([shave],
 | 
			
		||||
    AS_HELP_STRING(
 | 
			
		||||
      [--enable-shave],
 | 
			
		||||
      [use shave to make the build pretty [[default=$1]]]),,
 | 
			
		||||
      [enable_shave=$1]
 | 
			
		||||
    )
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([SHAVE_INIT],
 | 
			
		||||
[
 | 
			
		||||
  dnl you can tweak the default value of enable_shave
 | 
			
		||||
  m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
 | 
			
		||||
 | 
			
		||||
  if test x"$enable_shave" = xyes; then
 | 
			
		||||
    dnl where can we find the shave scripts?
 | 
			
		||||
    m4_if([$1],,
 | 
			
		||||
      [shavedir="$ac_pwd"],
 | 
			
		||||
      [shavedir="$ac_pwd/$1"])
 | 
			
		||||
    AC_SUBST(shavedir)
 | 
			
		||||
 | 
			
		||||
    dnl make is now quiet
 | 
			
		||||
    AC_SUBST([MAKEFLAGS], [-s])
 | 
			
		||||
    AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
 | 
			
		||||
 | 
			
		||||
    dnl we need sed
 | 
			
		||||
    AC_CHECK_PROG(SED,sed,sed,false)
 | 
			
		||||
 | 
			
		||||
    dnl substitute libtool
 | 
			
		||||
    SHAVE_SAVED_LIBTOOL=$LIBTOOL
 | 
			
		||||
    LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
 | 
			
		||||
    AC_SUBST(LIBTOOL)
 | 
			
		||||
 | 
			
		||||
    dnl substitute cc/cxx
 | 
			
		||||
    SHAVE_SAVED_CC=$CC
 | 
			
		||||
    SHAVE_SAVED_CXX=$CXX
 | 
			
		||||
    SHAVE_SAVED_FC=$FC
 | 
			
		||||
    SHAVE_SAVED_F77=$F77
 | 
			
		||||
    CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
 | 
			
		||||
    CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
 | 
			
		||||
    FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
 | 
			
		||||
    F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
 | 
			
		||||
    AC_SUBST(CC)
 | 
			
		||||
    AC_SUBST(CXX)
 | 
			
		||||
    AC_SUBST(FC)
 | 
			
		||||
    AC_SUBST(F77)
 | 
			
		||||
 | 
			
		||||
    V=@
 | 
			
		||||
  else
 | 
			
		||||
    V=1
 | 
			
		||||
  fi
 | 
			
		||||
  Q='$(V:1=)'
 | 
			
		||||
  AC_SUBST(V)
 | 
			
		||||
  AC_SUBST(Q)
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										69
									
								
								shave-libtool.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								shave-libtool.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# we need sed
 | 
			
		||||
SED=@SED@
 | 
			
		||||
if test -z "$SED" ; then
 | 
			
		||||
SED=sed
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
lt_unmangle ()
 | 
			
		||||
{
 | 
			
		||||
   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# the real libtool to use
 | 
			
		||||
LIBTOOL="$1"
 | 
			
		||||
shift
 | 
			
		||||
 | 
			
		||||
# if 1, don't print anything, the underlaying wrapper will do it
 | 
			
		||||
pass_though=0
 | 
			
		||||
 | 
			
		||||
# scan the arguments, keep the right ones for libtool, and discover the mode
 | 
			
		||||
preserved_args=
 | 
			
		||||
while test "$#" -gt 0; do
 | 
			
		||||
    opt="$1"
 | 
			
		||||
    shift
 | 
			
		||||
 | 
			
		||||
    case $opt in
 | 
			
		||||
    --mode=*)
 | 
			
		||||
        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
 | 
			
		||||
        preserved_args="$preserved_args $opt"
 | 
			
		||||
        ;;
 | 
			
		||||
    -o)
 | 
			
		||||
        lt_output="$1"
 | 
			
		||||
        preserved_args="$preserved_args $opt"
 | 
			
		||||
	;;
 | 
			
		||||
    *)
 | 
			
		||||
        preserved_args="$preserved_args $opt"
 | 
			
		||||
        ;;
 | 
			
		||||
      esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
case "$mode" in
 | 
			
		||||
compile)
 | 
			
		||||
    # shave will be called and print the actual CC/CXX/LINK line
 | 
			
		||||
    preserved_args="$preserved_args --shave-mode=$mode"
 | 
			
		||||
    pass_though=1
 | 
			
		||||
    ;;
 | 
			
		||||
link)
 | 
			
		||||
    preserved_args="$preserved_args --shave-mode=$mode"
 | 
			
		||||
    Q="  LINK  "
 | 
			
		||||
    ;;
 | 
			
		||||
*)
 | 
			
		||||
    # let's u
 | 
			
		||||
    # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
lt_unmangle "$lt_output"
 | 
			
		||||
output=$last_result
 | 
			
		||||
 | 
			
		||||
if test -z $V; then
 | 
			
		||||
    if test $pass_though -eq 0; then
 | 
			
		||||
        echo "$Q$output"
 | 
			
		||||
    fi
 | 
			
		||||
    $LIBTOOL --silent $preserved_args
 | 
			
		||||
else
 | 
			
		||||
    echo $LIBTOOL $preserved_args
 | 
			
		||||
    $LIBTOOL $preserved_args
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										76
									
								
								shave.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								shave.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# we need sed
 | 
			
		||||
SED=@SED@
 | 
			
		||||
if test -z "$SED" ; then
 | 
			
		||||
SED=sed
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
lt_unmangle ()
 | 
			
		||||
{
 | 
			
		||||
   last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# the tool to wrap (cc, cxx, ar, ranlib, ..)
 | 
			
		||||
tool="$1"
 | 
			
		||||
shift
 | 
			
		||||
 | 
			
		||||
# the reel tool (to call)
 | 
			
		||||
REEL_TOOL="$1"
 | 
			
		||||
shift
 | 
			
		||||
 | 
			
		||||
pass_through=0
 | 
			
		||||
preserved_args=
 | 
			
		||||
while test "$#" -gt 0; do
 | 
			
		||||
    opt="$1"
 | 
			
		||||
    shift
 | 
			
		||||
 | 
			
		||||
    case $opt in
 | 
			
		||||
    --shave-mode=*)
 | 
			
		||||
        mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
 | 
			
		||||
	;;
 | 
			
		||||
    -o)
 | 
			
		||||
        lt_output="$1"
 | 
			
		||||
        preserved_args="$preserved_args $opt"
 | 
			
		||||
	;;
 | 
			
		||||
    *)
 | 
			
		||||
        preserved_args="$preserved_args $opt"
 | 
			
		||||
        ;;
 | 
			
		||||
      esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# mode=link is handled in the libtool wrapper
 | 
			
		||||
case "$mode,$tool" in
 | 
			
		||||
link,*)
 | 
			
		||||
    pass_through=1
 | 
			
		||||
    ;;
 | 
			
		||||
*,cxx)
 | 
			
		||||
    Q="  CXX   "
 | 
			
		||||
    ;;
 | 
			
		||||
*,cc)
 | 
			
		||||
    Q="  CC    "
 | 
			
		||||
    ;;
 | 
			
		||||
*,fc)
 | 
			
		||||
    Q="  FC    "
 | 
			
		||||
    ;;
 | 
			
		||||
*,f77)
 | 
			
		||||
    Q="  F77   "
 | 
			
		||||
    ;;
 | 
			
		||||
*,*)
 | 
			
		||||
    # should not happen
 | 
			
		||||
    Q="  CC    "
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
lt_unmangle "$lt_output"
 | 
			
		||||
output=$last_result
 | 
			
		||||
 | 
			
		||||
if test -z $V; then
 | 
			
		||||
    if test $pass_through -eq 0; then
 | 
			
		||||
        echo "$Q$output"
 | 
			
		||||
    fi
 | 
			
		||||
    $REEL_TOOL $preserved_args
 | 
			
		||||
else
 | 
			
		||||
    echo $REEL_TOOL $preserved_args
 | 
			
		||||
    $REEL_TOOL $preserved_args
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										23
									
								
								tests/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								tests/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
TESTS = auth \
 | 
			
		||||
	openclose \
 | 
			
		||||
	getversion \
 | 
			
		||||
	getclient \
 | 
			
		||||
	getstats \
 | 
			
		||||
	lock \
 | 
			
		||||
	setversion \
 | 
			
		||||
	updatedraw \
 | 
			
		||||
	gem_basic \
 | 
			
		||||
	gem_flink \
 | 
			
		||||
	gem_readwrite \
 | 
			
		||||
	gem_mmap
 | 
			
		||||
 | 
			
		||||
EXTRA_LTLIBRARIES = libdrmtest.la
 | 
			
		||||
EXTRA_LTLIBRARIES = libdrmtest.la
 | 
			
		||||
libdrmtest_la_SOURCES = \
 | 
			
		||||
	drmtest.c \
 | 
			
		||||
	drmtest.h
 | 
			
		||||
libdrmtest_la_LIBADD = \
 | 
			
		||||
	$(top_builddir)/libdrm/libdrm.la
 | 
			
		||||
 | 
			
		||||
EXTRA_PROGRAMS = $(TESTS)
 | 
			
		||||
CLEANFILES = $(EXTRA_PROGRAMS) $(EXTRA_LTLIBRARIES)
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user