mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
Gary Wong's patches for CopyPixels Logiop (enable) and Blend
(disallow). Slightly cleaned to disallow on all blend states for code consiseness and turn a table lookup into a function to match other code in the driver.
This commit is contained in:
parent
f58ec215c5
commit
46c04525d2
4 changed files with 42 additions and 10 deletions
|
|
@ -221,6 +221,29 @@ void intelEmitFillBlit( struct intel_context *intel,
|
|||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
static GLuint translate_raster_op(GLenum logicop)
|
||||
{
|
||||
switch(logicop) {
|
||||
case GL_CLEAR: return 0x00;
|
||||
case GL_AND: return 0x88;
|
||||
case GL_AND_REVERSE: return 0x44;
|
||||
case GL_COPY: return 0xCC;
|
||||
case GL_AND_INVERTED: return 0x22;
|
||||
case GL_NOOP: return 0xAA;
|
||||
case GL_XOR: return 0x66;
|
||||
case GL_OR: return 0xEE;
|
||||
case GL_NOR: return 0x11;
|
||||
case GL_EQUIV: return 0x99;
|
||||
case GL_INVERT: return 0x55;
|
||||
case GL_OR_REVERSE: return 0xDD;
|
||||
case GL_COPY_INVERTED: return 0x33;
|
||||
case GL_OR_INVERTED: return 0xBB;
|
||||
case GL_NAND: return 0x77;
|
||||
case GL_SET: return 0xFF;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Copy BitBlt
|
||||
*/
|
||||
|
|
@ -236,7 +259,8 @@ void intelEmitCopyBlit( struct intel_context *intel,
|
|||
GLboolean dst_tiled,
|
||||
GLshort src_x, GLshort src_y,
|
||||
GLshort dst_x, GLshort dst_y,
|
||||
GLshort w, GLshort h )
|
||||
GLshort w, GLshort h,
|
||||
GLenum logic_op )
|
||||
{
|
||||
GLuint CMD, BR13;
|
||||
int dst_y2 = dst_y + h;
|
||||
|
|
@ -244,12 +268,15 @@ void intelEmitCopyBlit( struct intel_context *intel,
|
|||
BATCH_LOCALS;
|
||||
|
||||
|
||||
DBG("%s src:buf(%d)/%d %d,%d dst:buf(%d)/%d %d,%d sz:%dx%d\n",
|
||||
DBG("%s src:buf(%d)/%d %d,%d dst:buf(%d)/%d %d,%d sz:%dx%d op:%d\n",
|
||||
__FUNCTION__,
|
||||
src_buffer, src_pitch, src_x, src_y,
|
||||
dst_buffer, dst_pitch, dst_x, dst_y,
|
||||
w,h);
|
||||
w,h,logic_op);
|
||||
|
||||
assert( logic_op - GL_CLEAR >= 0 );
|
||||
assert( logic_op - GL_CLEAR < 0x10 );
|
||||
|
||||
src_pitch *= cpp;
|
||||
dst_pitch *= cpp;
|
||||
|
||||
|
|
@ -257,11 +284,12 @@ void intelEmitCopyBlit( struct intel_context *intel,
|
|||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
BR13 = (0xCC << 16) | (1<<24);
|
||||
BR13 = (translate_raster_op(logic_op) << 16) | (1<<24);
|
||||
CMD = XY_SRC_COPY_BLT_CMD;
|
||||
break;
|
||||
case 4:
|
||||
BR13 = (0xCC << 16) | (1<<24) | (1<<25);
|
||||
BR13 = (translate_raster_op(logic_op) << 16) | (1<<24) |
|
||||
(1<<25);
|
||||
CMD = (XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA |
|
||||
XY_SRC_COPY_BLT_WRITE_RGB);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,8 @@ extern void intelEmitCopyBlit( struct intel_context *intel,
|
|||
GLboolean dst_tiled,
|
||||
GLshort srcx, GLshort srcy,
|
||||
GLshort dstx, GLshort dsty,
|
||||
GLshort w, GLshort h );
|
||||
GLshort w, GLshort h,
|
||||
GLenum logic_op );
|
||||
|
||||
extern void intelEmitFillBlit( struct intel_context *intel,
|
||||
GLuint cpp,
|
||||
|
|
|
|||
|
|
@ -92,9 +92,9 @@ intel_check_blit_fragment_ops(GLcontext * ctx)
|
|||
!ctx->Color.ColorMask[1] ||
|
||||
!ctx->Color.ColorMask[2] ||
|
||||
!ctx->Color.ColorMask[3] || /* can do this! */
|
||||
ctx->Color.ColorLogicOpEnabled || /* can do this! */
|
||||
ctx->Texture._EnabledUnits ||
|
||||
ctx->FragmentProgram._Enabled);
|
||||
ctx->FragmentProgram._Enabled ||
|
||||
ctx->Color.BlendEnabled);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -210,7 +210,9 @@ do_blit_copypixels(GLcontext * ctx,
|
|||
rect.x1 + delta_x,
|
||||
rect.y1 + delta_y, /* srcx, srcy */
|
||||
rect.x1, rect.y1, /* dstx, dsty */
|
||||
rect.x2 - rect.x1, rect.y2 - rect.y1);
|
||||
rect.x2 - rect.x1, rect.y2 - rect.y1,
|
||||
ctx->Color.ColorLogicOpEnabled ?
|
||||
ctx->Color.LogicOp : GL_COPY);
|
||||
}
|
||||
|
||||
intel->need_flush = GL_TRUE;
|
||||
|
|
|
|||
|
|
@ -269,7 +269,8 @@ void intel_region_copy( struct intel_context *intel,
|
|||
dst->pitch, dst->buffer, dst_offset, dst->tiled,
|
||||
srcx, srcy,
|
||||
dstx, dsty,
|
||||
width, height);
|
||||
width, height,
|
||||
GL_COPY );
|
||||
}
|
||||
|
||||
/* Fill a rectangular sub-region. Need better logic about when to
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue