mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-26 09:00:37 +02:00
Merge branch 'mesa_7_6_branch'
This commit is contained in:
commit
c67bb22fe7
5 changed files with 25 additions and 18 deletions
|
|
@ -507,7 +507,8 @@ intel_flush(GLcontext *ctx, GLboolean needs_mi_flush)
|
|||
|
||||
if (screen->dri2.loader &&
|
||||
(screen->dri2.loader->base.version >= 2)
|
||||
&& (screen->dri2.loader->flushFrontBuffer != NULL)) {
|
||||
&& (screen->dri2.loader->flushFrontBuffer != NULL) &&
|
||||
intel->driDrawable && intel->driDrawable->loaderPrivate) {
|
||||
(*screen->dri2.loader->flushFrontBuffer)(intel->driDrawable,
|
||||
intel->driDrawable->loaderPrivate);
|
||||
|
||||
|
|
|
|||
|
|
@ -511,23 +511,23 @@ static void sincos_constants(struct radeon_compiler* c, GLuint *constants)
|
|||
* MAD dest, tmp.y, weight, tmp.x
|
||||
*/
|
||||
static void sin_approx(
|
||||
struct radeon_compiler* c, struct rc_instruction * after,
|
||||
struct radeon_compiler* c, struct rc_instruction * before,
|
||||
struct prog_dst_register dst, struct prog_src_register src, const GLuint* constants)
|
||||
{
|
||||
GLuint tempreg = rc_find_free_temporary(c);
|
||||
|
||||
emit2(c, after->Prev, OPCODE_MUL, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
|
||||
emit2(c, before->Prev, OPCODE_MUL, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
|
||||
swizzle(src, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
|
||||
srcreg(PROGRAM_CONSTANT, constants[0]));
|
||||
emit3(c, after->Prev, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_X),
|
||||
emit3(c, before->Prev, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_X),
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
|
||||
absolute(swizzle(src, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)),
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X));
|
||||
emit3(c, after->Prev, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_Y),
|
||||
emit3(c, before->Prev, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_Y),
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
|
||||
absolute(swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)),
|
||||
negate(swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)));
|
||||
emit3(c, after->Prev, OPCODE_MAD, 0, dst,
|
||||
emit3(c, before->Prev, OPCODE_MAD, 0, dst,
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
|
||||
swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X));
|
||||
|
|
@ -567,7 +567,7 @@ GLboolean radeonTransformTrigSimple(struct radeon_compiler* c,
|
|||
swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
|
||||
negate(swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z)));
|
||||
|
||||
sin_approx(c, inst->Prev, inst->I.DstReg,
|
||||
sin_approx(c, inst, inst->I.DstReg,
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
|
||||
constants);
|
||||
} else if (inst->I.Opcode == OPCODE_SIN) {
|
||||
|
|
@ -582,7 +582,7 @@ GLboolean radeonTransformTrigSimple(struct radeon_compiler* c,
|
|||
swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
|
||||
negate(swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z)));
|
||||
|
||||
sin_approx(c, inst->Prev, inst->I.DstReg,
|
||||
sin_approx(c, inst, inst->I.DstReg,
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
|
||||
constants);
|
||||
} else {
|
||||
|
|
@ -600,12 +600,12 @@ GLboolean radeonTransformTrigSimple(struct radeon_compiler* c,
|
|||
struct prog_dst_register dst = inst->I.DstReg;
|
||||
|
||||
dst.WriteMask = inst->I.DstReg.WriteMask & WRITEMASK_X;
|
||||
sin_approx(c, inst->Prev, dst,
|
||||
sin_approx(c, inst, dst,
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
|
||||
constants);
|
||||
|
||||
dst.WriteMask = inst->I.DstReg.WriteMask & WRITEMASK_Y;
|
||||
sin_approx(c, inst->Prev, dst,
|
||||
sin_approx(c, inst, dst,
|
||||
swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
|
||||
constants);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ static const struct dri_debug_control debug_control[] = {
|
|||
{"fall", RADEON_FALLBACKS},
|
||||
{"tex", RADEON_TEXTURE},
|
||||
{"ioctl", RADEON_IOCTL},
|
||||
{"verts", RADEON_RENDER},
|
||||
{"verts", RADEON_VERTS},
|
||||
{"render", RADEON_RENDER},
|
||||
{"swrender", RADEON_SWRENDER},
|
||||
{"state", RADEON_STATE},
|
||||
|
|
|
|||
|
|
@ -149,21 +149,22 @@ static inline void radeon_debug_remove_indent(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* From http://gcc. gnu.org/onlinedocs/gcc-3.2.3/gcc/Variadic-Macros.html .
|
||||
I suppose we could inline this and use macro to fetch out __LINE__ and stuff in case we run into trouble
|
||||
with other compilers ... GLUE!
|
||||
*/
|
||||
#define WARN_ONCE(a, ...) { \
|
||||
static int warn##__LINE__=1; \
|
||||
if(warn##__LINE__){ \
|
||||
#define WARN_ONCE(a, ...) do { \
|
||||
static int __warn_once=1; \
|
||||
if(__warn_once){ \
|
||||
radeon_warning("*********************************WARN_ONCE*********************************\n"); \
|
||||
radeon_warning("File %s function %s line %d\n", \
|
||||
__FILE__, __FUNCTION__, __LINE__); \
|
||||
radeon_warning( (a), ## __VA_ARGS__);\
|
||||
radeon_warning("***************************************************************************\n"); \
|
||||
warn##__LINE__=0;\
|
||||
__warn_once=0;\
|
||||
} \
|
||||
}
|
||||
} while(0)
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -207,7 +207,6 @@ again_alloc:
|
|||
counter on unused buffers for later freeing them from
|
||||
begin of list */
|
||||
dma_bo = last_elem(&rmesa->dma.free);
|
||||
assert(dma_bo->bo->cref == 1);
|
||||
remove_from_list(dma_bo);
|
||||
insert_at_head(&rmesa->dma.reserved, dma_bo);
|
||||
}
|
||||
|
|
@ -307,6 +306,10 @@ static int radeon_bo_is_idle(struct radeon_bo* bo)
|
|||
WARN_ONCE("Your libdrm or kernel doesn't have support for busy query.\n"
|
||||
"This may cause small performance drop for you.\n");
|
||||
}
|
||||
/* Protect against bug in legacy bo handling that causes bos stay
|
||||
* referenced even after they should be freed */
|
||||
if (bo->cref != 1)
|
||||
return 0;
|
||||
return ret != -EBUSY;
|
||||
}
|
||||
|
||||
|
|
@ -343,7 +346,9 @@ void radeonReleaseDmaRegions(radeonContextPtr rmesa)
|
|||
foreach_s(dma_bo, temp, &rmesa->dma.wait) {
|
||||
if (dma_bo->expire_counter == time) {
|
||||
WARN_ONCE("Leaking dma buffer object!\n");
|
||||
radeon_bo_unref(dma_bo->bo);
|
||||
/* force free of buffer so we don't realy start
|
||||
* leaking stuff now*/
|
||||
while ((dma_bo->bo = radeon_bo_unref(dma_bo->bo))) {}
|
||||
remove_from_list(dma_bo);
|
||||
FREE(dma_bo);
|
||||
continue;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue