mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-27 18:30:23 +01:00
Use the x11 driver as a test harness for the softpipe/state_tracker code.
This has some limitations as we currently require a mapped framebuffer, so it only really works with double-buffered ximage rgba8888 windows.
This commit is contained in:
parent
8e4a95a93d
commit
b939adfa15
8 changed files with 114 additions and 1 deletions
2
src/mesa/drivers/x11/Makefile
Normal file
2
src/mesa/drivers/x11/Makefile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
default:
|
||||
cd ../.. ; make
|
||||
|
|
@ -80,6 +80,9 @@
|
|||
#include "tnl/t_pipeline.h"
|
||||
#include "drivers/common/driverfuncs.h"
|
||||
|
||||
#include "softpipe/state_tracker/st_public.h"
|
||||
#include "softpipe/generic/g_context.h"
|
||||
|
||||
/**
|
||||
* Global X driver lock
|
||||
*/
|
||||
|
|
@ -1556,6 +1559,10 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
|
|||
xmesa_register_swrast_functions( mesaCtx );
|
||||
_swsetup_Wakeup(mesaCtx);
|
||||
|
||||
|
||||
st_create_context( mesaCtx,
|
||||
generic_create() );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
@ -1758,6 +1765,8 @@ PUBLIC
|
|||
GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
|
||||
XMesaBuffer readBuffer )
|
||||
{
|
||||
_mesa_printf("%s %p %p %p\n", __FUNCTION__, drawBuffer, readBuffer );
|
||||
|
||||
if (c) {
|
||||
if (!drawBuffer || !readBuffer)
|
||||
return GL_FALSE; /* must specify buffers! */
|
||||
|
|
|
|||
|
|
@ -53,6 +53,8 @@
|
|||
#include "tnl/tnl.h"
|
||||
#include "tnl/t_context.h"
|
||||
|
||||
#include "softpipe/generic/g_context.h"
|
||||
#include "softpipe/state_tracker/st_public.h"
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -828,6 +830,9 @@ xmesa_update_state( GLcontext *ctx, GLbitfield new_state )
|
|||
_vbo_InvalidateState( ctx, new_state );
|
||||
_swsetup_InvalidateState( ctx, new_state );
|
||||
|
||||
st_invalidate_state( ctx, new_state );
|
||||
|
||||
|
||||
if (ctx->DrawBuffer->Name != 0)
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -1303,6 +1303,17 @@ static void put_row_rgb_TRUEDITHER_ximage( RGB_SPAN_ARGS )
|
|||
}
|
||||
|
||||
|
||||
|
||||
static void *get_pointer_4_ximage( GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLint x, GLint y )
|
||||
{
|
||||
GET_XRB(xrb);
|
||||
return PIXEL_ADDR4(xrb, x, y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Write a span of PF_8A8B8G8R-format pixels to an ximage.
|
||||
*/
|
||||
|
|
@ -4593,6 +4604,7 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
|
|||
xrb->Base.PutMonoRow = put_mono_row_8A8B8G8R_ximage;
|
||||
xrb->Base.PutValues = put_values_8A8B8G8R_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_8A8B8G8R_ximage;
|
||||
xrb->Base.GetPointer = get_pointer_4_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8A8R8G8B:
|
||||
|
|
@ -4609,6 +4621,7 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
|
|||
xrb->Base.PutMonoRow = put_mono_row_8A8R8G8B_ximage;
|
||||
xrb->Base.PutValues = put_values_8A8R8G8B_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_8A8R8G8B_ximage;
|
||||
xrb->Base.GetPointer = get_pointer_4_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8R8G8B:
|
||||
|
|
|
|||
|
|
@ -1443,6 +1443,46 @@ do { \
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
GLboolean xmesa_get_cbuf_details( GLcontext *ctx,
|
||||
void **ptr,
|
||||
GLuint *cpp,
|
||||
GLint *stride,
|
||||
GLuint *format )
|
||||
{
|
||||
XMesaContext xmesa = XMESA_CONTEXT(ctx);
|
||||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
struct gl_renderbuffer *crb = fb->_ColorDrawBuffers[0][0];
|
||||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(crb->Wrapped);
|
||||
|
||||
*ptr = crb->GetPointer(ctx, crb, 0, 0);
|
||||
*stride = ((GLubyte *)crb->GetPointer(ctx, crb, 0, 1) -
|
||||
(GLubyte *)crb->GetPointer(ctx, crb, 0, 0));
|
||||
|
||||
if (!ptr)
|
||||
goto bad;
|
||||
|
||||
switch (xmesa->pixelformat) {
|
||||
case PF_8A8B8G8R:
|
||||
case PF_8A8R8G8B:
|
||||
*format = 1; /* whatever */
|
||||
*cpp = 4;
|
||||
break;
|
||||
default:
|
||||
goto bad;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
|
||||
bad:
|
||||
*ptr = NULL;
|
||||
*stride = 0;
|
||||
*format = 0;
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return pointer to line drawing function, or NULL if we should use a
|
||||
* swrast fallback.
|
||||
|
|
|
|||
|
|
@ -578,4 +578,11 @@ extern void xmesa_register_swrast_functions( GLcontext *ctx );
|
|||
#define ENABLE_EXT_timer_query 0 /* may not have 64-bit GLuint64EXT */
|
||||
#endif
|
||||
|
||||
|
||||
GLboolean xmesa_get_cbuf_details( GLcontext *ctx,
|
||||
void **ptr,
|
||||
GLuint *cpp,
|
||||
GLint *stride,
|
||||
GLuint *format );
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ struct gl_pixelstore_attrib;
|
|||
struct gl_texture_format;
|
||||
struct gl_texture_image;
|
||||
struct gl_texture_object;
|
||||
struct st_context;
|
||||
typedef struct __GLcontextRec GLcontext;
|
||||
typedef struct __GLcontextModesRec GLvisual;
|
||||
typedef struct gl_framebuffer GLframebuffer;
|
||||
|
|
@ -3069,7 +3070,7 @@ struct __GLcontextRec
|
|||
void *swsetup_context;
|
||||
void *swtnl_context;
|
||||
void *swtnl_im;
|
||||
void *acache_context;
|
||||
struct st_context *st;
|
||||
void *aelt_context;
|
||||
/*@}*/
|
||||
};
|
||||
|
|
|
|||
|
|
@ -149,6 +149,40 @@ VBO_SOURCES = \
|
|||
vbo/vbo_save_draw.c \
|
||||
vbo/vbo_save_loopback.c
|
||||
|
||||
VF_SOURCES = \
|
||||
vf/vf.c \
|
||||
vf/vf_generic.c \
|
||||
vf/vf_sse.c
|
||||
|
||||
SOFTPIPE_SOURCES = \
|
||||
softpipe/generic/g_context.c \
|
||||
softpipe/generic/g_draw.c \
|
||||
softpipe/generic/g_prim_clip.c \
|
||||
softpipe/generic/g_prim_cull.c \
|
||||
softpipe/generic/g_prim_flatshade.c \
|
||||
softpipe/generic/g_prim_offset.c \
|
||||
softpipe/generic/g_prim_setup.c \
|
||||
softpipe/generic/g_prim_twoside.c \
|
||||
softpipe/generic/g_prim_unfilled.c \
|
||||
softpipe/generic/g_state_clip.c \
|
||||
softpipe/generic/g_state_derived.c \
|
||||
softpipe/generic/g_state_fs.c \
|
||||
softpipe/generic/g_state_setup.c \
|
||||
softpipe/generic/g_state_surface.c \
|
||||
softpipe/generic/g_surface.c \
|
||||
softpipe/generic/g_tile_fs.c \
|
||||
softpipe/generic/g_tile_output.c \
|
||||
softpipe/state_tracker/st_atom.c \
|
||||
softpipe/state_tracker/st_atom_clip.c \
|
||||
softpipe/state_tracker/st_atom_fs.c \
|
||||
softpipe/state_tracker/st_atom_setup.c \
|
||||
softpipe/state_tracker/st_atom_cbuf.c \
|
||||
softpipe/state_tracker/st_atom_viewport.c \
|
||||
softpipe/state_tracker/st_cb_program.c \
|
||||
softpipe/state_tracker/st_draw.c \
|
||||
softpipe/state_tracker/st_context.c
|
||||
|
||||
|
||||
|
||||
SHADER_SOURCES = \
|
||||
shader/arbprogparse.c \
|
||||
|
|
@ -294,6 +328,8 @@ SOLO_SOURCES = \
|
|||
$(MAIN_SOURCES) \
|
||||
$(MATH_SOURCES) \
|
||||
$(VBO_SOURCES) \
|
||||
$(VF_SOURCES) \
|
||||
$(SOFTPIPE_SOURCES) \
|
||||
$(TNL_SOURCES) \
|
||||
$(SHADER_SOURCES) \
|
||||
$(SWRAST_SOURCES) \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue