projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
iris: enable preemption support for gen10
[mesa.git]
/
src
/
gallium
/
drivers
/
i915
/
i915_blit.c
diff --git
a/src/gallium/drivers/i915/i915_blit.c
b/src/gallium/drivers/i915/i915_blit.c
index cdf20c0055a73e124e34c746d55ea369d59350ff..f20bf90d08d1c244996efdca1850a72dd30db767 100644
(file)
--- a/
src/gallium/drivers/i915/i915_blit.c
+++ b/
src/gallium/drivers/i915/i915_blit.c
@@
-1,6
+1,6
@@
/**************************************************************************
*
/**************************************************************************
*
- * Copyright 2003
Tungsten Graphics, Inc., Cedar Park, Texas
.
+ * Copyright 2003
VMware, Inc
.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@
-18,7
+18,7
@@
* 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.
* 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
+ * IN NO EVENT SHALL
VMWARE
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.
* 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.
@@
-49,6
+49,11
@@
i915_fill_blit(struct i915_context *i915,
I915_DBG(DBG_BLIT, "%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__, dst_buffer, dst_pitch, dst_offset, x, y, w, h);
I915_DBG(DBG_BLIT, "%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
__FUNCTION__, dst_buffer, dst_pitch, dst_offset, x, y, w, h);
+ if(!i915_winsys_validate_buffers(i915->batch, &dst_buffer, 1)) {
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
+ assert(i915_winsys_validate_buffers(i915->batch, &dst_buffer, 1));
+ }
+
switch (cpp) {
case 1:
case 2:
switch (cpp) {
case 1:
case 2:
@@
-66,16
+71,18
@@
i915_fill_blit(struct i915_context *i915,
return;
}
return;
}
- if (!BEGIN_BATCH(6
, 1
)) {
- FLUSH_BATCH(NULL);
- assert(BEGIN_BATCH(6
, 1
));
+ if (!BEGIN_BATCH(6)) {
+ FLUSH_BATCH(NULL
, I915_FLUSH_ASYNC
);
+ assert(BEGIN_BATCH(6));
}
OUT_BATCH(CMD);
OUT_BATCH(BR13);
OUT_BATCH((y << 16) | x);
OUT_BATCH(((y + h) << 16) | (x + w));
}
OUT_BATCH(CMD);
OUT_BATCH(BR13);
OUT_BATCH((y << 16) | x);
OUT_BATCH(((y + h) << 16) | (x + w));
- OUT_RELOC(dst_buffer, I915_USAGE_2D_TARGET, dst_offset);
+ OUT_RELOC
_FENCED
(dst_buffer, I915_USAGE_2D_TARGET, dst_offset);
OUT_BATCH(color);
OUT_BATCH(color);
+
+ i915_set_flush_dirty(i915, I915_FLUSH_CACHE);
}
void
}
void
@@
-94,6
+101,7
@@
i915_copy_blit(struct i915_context *i915,
unsigned CMD, BR13;
int dst_y2 = dst_y + h;
int dst_x2 = dst_x + w;
unsigned CMD, BR13;
int dst_y2 = dst_y + h;
int dst_x2 = dst_x + w;
+ struct i915_winsys_buffer *buffers[2] = {src_buffer, dst_buffer};
I915_DBG(DBG_BLIT,
I915_DBG(DBG_BLIT,
@@
-102,6
+110,11
@@
i915_copy_blit(struct i915_context *i915,
src_buffer, src_pitch, src_offset, src_x, src_y,
dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h);
src_buffer, src_pitch, src_offset, src_x, src_y,
dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h);
+ if(!i915_winsys_validate_buffers(i915->batch, buffers, 2)) {
+ FLUSH_BATCH(NULL, I915_FLUSH_ASYNC);
+ assert(i915_winsys_validate_buffers(i915->batch, buffers, 2));
+ }
+
switch (cpp) {
case 1:
case 2:
switch (cpp) {
case 1:
case 2:
@@
-130,16
+143,18
@@
i915_copy_blit(struct i915_context *i915,
*/
assert (dst_pitch > 0 && src_pitch > 0);
*/
assert (dst_pitch > 0 && src_pitch > 0);
- if (!BEGIN_BATCH(8
, 2
)) {
- FLUSH_BATCH(NULL);
- assert(BEGIN_BATCH(8
, 2
));
+ if (!BEGIN_BATCH(8)) {
+ FLUSH_BATCH(NULL
, I915_FLUSH_ASYNC
);
+ assert(BEGIN_BATCH(8));
}
OUT_BATCH(CMD);
OUT_BATCH(BR13);
OUT_BATCH((dst_y << 16) | dst_x);
OUT_BATCH((dst_y2 << 16) | dst_x2);
}
OUT_BATCH(CMD);
OUT_BATCH(BR13);
OUT_BATCH((dst_y << 16) | dst_x);
OUT_BATCH((dst_y2 << 16) | dst_x2);
- OUT_RELOC(dst_buffer, I915_USAGE_2D_TARGET, dst_offset);
+ OUT_RELOC
_FENCED
(dst_buffer, I915_USAGE_2D_TARGET, dst_offset);
OUT_BATCH((src_y << 16) | src_x);
OUT_BATCH(((int) src_pitch & 0xffff));
OUT_BATCH((src_y << 16) | src_x);
OUT_BATCH(((int) src_pitch & 0xffff));
- OUT_RELOC(src_buffer, I915_USAGE_2D_SOURCE, src_offset);
+ OUT_RELOC_FENCED(src_buffer, I915_USAGE_2D_SOURCE, src_offset);
+
+ i915_set_flush_dirty(i915, I915_FLUSH_CACHE);
}
}