i915_batchbuffer.h revision 135b083461f8a5a220d86f57af018f6f0316d2bb
1d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/**************************************************************************
2bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz *
3d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * All Rights Reserved.
5bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz *
6d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person obtaining a
7d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * copy of this software and associated documentation files (the
8d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * "Software"), to deal in the Software without restriction, including
9d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * without limitation the rights to use, copy, modify, merge, publish,
10d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * distribute, sub license, and/or sell copies of the Software, and to
11d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * permit persons to whom the Software is furnished to do so, subject to
12d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * the following conditions:
13bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz *
14d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * The above copyright notice and this permission notice (including the
15d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * next paragraph) shall be included in all copies or substantial portions
16d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * of the Software.
17bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz *
18d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz *
26d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz **************************************************************************/
27d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
28bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#ifndef I915_BATCHBUFFER_H
29bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#define I915_BATCHBUFFER_H
30d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
31bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h"
32d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
3357fc2ad7a165bd969de5d1943e325db52f702eb8Jakob Bornecrantzstruct i915_context;
3457fc2ad7a165bd969de5d1943e325db52f702eb8Jakob Bornecrantz
35d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic INLINE boolean
36bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_winsys_batchbuffer_check(struct i915_winsys_batchbuffer *batch,
37bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                              size_t dwords,
38bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                              size_t relocs)
39d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
40d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return dwords * 4 <= batch->size - (batch->ptr - batch->map) &&
41d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz          relocs <= (batch->max_relocs - batch->relocs);
42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic INLINE size_t
45bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_winsys_batchbuffer_space(struct i915_winsys_batchbuffer *batch)
46d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
47d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return batch->size - (batch->ptr - batch->map);
48d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
49d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
50d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic INLINE void
51bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_winsys_batchbuffer_dword(struct i915_winsys_batchbuffer *batch,
52bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                              unsigned dword)
53d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
54bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   if (i915_winsys_batchbuffer_space(batch) < 4)
55d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz      return;
56d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
57d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   *(unsigned *)batch->ptr = dword;
58d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   batch->ptr += 4;
59d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
60d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
61d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic INLINE void
62bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_winsys_batchbuffer_write(struct i915_winsys_batchbuffer *batch,
63bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                       void *data,
64bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                       size_t size)
65d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
66bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   if (i915_winsys_batchbuffer_space(batch) < size)
67d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz      return;
68d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
69d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   memcpy(data, batch->ptr, size);
70d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   batch->ptr += size;
71d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
72d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
73d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic INLINE int
74bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_winsys_batchbuffer_reloc(struct i915_winsys_batchbuffer *batch,
75bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                              struct i915_winsys_buffer *buffer,
76bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz                              enum i915_winsys_buffer_usage usage,
77135b083461f8a5a220d86f57af018f6f0316d2bbDaniel Vetter                              size_t offset, bool fenced)
78d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
79135b083461f8a5a220d86f57af018f6f0316d2bbDaniel Vetter   return batch->iws->batchbuffer_reloc(batch, buffer, usage, offset, fenced);
80d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
81d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
82d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#endif
83