mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
asst changes to get softpipe rendering again (no zbuf support for now)
This commit is contained in:
parent
6883930f61
commit
3a9eca5cc0
6 changed files with 369 additions and 216 deletions
|
|
@ -84,6 +84,7 @@
|
|||
#include "state_tracker/st_public.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
#include "pipe/softpipe/sp_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
|
||||
/**
|
||||
* Global X driver lock
|
||||
|
|
@ -385,7 +386,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||
/*
|
||||
* Front renderbuffer
|
||||
*/
|
||||
b->frontxrb = xmesa_new_renderbuffer(NULL, 0, &vis->mesa_visual, GL_FALSE);
|
||||
b->frontxrb = xmesa_create_renderbuffer(NULL, 0, &vis->mesa_visual, GL_FALSE);
|
||||
if (!b->frontxrb) {
|
||||
_mesa_free(b);
|
||||
return NULL;
|
||||
|
|
@ -394,13 +395,13 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||
b->frontxrb->drawable = d;
|
||||
b->frontxrb->pixmap = (XMesaPixmap) d;
|
||||
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT,
|
||||
&b->frontxrb->Base);
|
||||
&b->frontxrb->St.Base);
|
||||
|
||||
/*
|
||||
* Back renderbuffer
|
||||
*/
|
||||
if (vis->mesa_visual.doubleBufferMode) {
|
||||
b->backxrb = xmesa_new_renderbuffer(NULL, 0, &vis->mesa_visual, GL_TRUE);
|
||||
b->backxrb = xmesa_create_renderbuffer(NULL, 0, &vis->mesa_visual, GL_TRUE);
|
||||
if (!b->backxrb) {
|
||||
/* XXX free front xrb too */
|
||||
_mesa_free(b);
|
||||
|
|
@ -411,7 +412,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||
b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP;
|
||||
|
||||
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT,
|
||||
&b->backxrb->Base);
|
||||
&b->backxrb->St.Base);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -429,12 +430,19 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||
b->swAlpha = GL_FALSE;
|
||||
}
|
||||
|
||||
if (vis->mesa_visual.depthBits > 0) {
|
||||
struct gl_renderbuffer *rb
|
||||
= st_new_renderbuffer_fb(GL_DEPTH_COMPONENT32);
|
||||
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_DEPTH, rb);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Other renderbuffer (depth, stencil, etc)
|
||||
*/
|
||||
_mesa_add_soft_renderbuffers(&b->mesa_buffer,
|
||||
GL_FALSE, /* color */
|
||||
vis->mesa_visual.haveDepthBuffer,
|
||||
GL_FALSE,/*vis->mesa_visual.haveDepthBuffer,*/
|
||||
vis->mesa_visual.haveStencilBuffer,
|
||||
vis->mesa_visual.haveAccumBuffer,
|
||||
b->swAlpha,
|
||||
|
|
@ -1517,6 +1525,10 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
|
|||
xmesa_init_driver_functions(v, &functions);
|
||||
st_init_driver_functions(&functions);
|
||||
|
||||
/*
|
||||
functions.NewRenderbuffer = xmesa_new_renderbuffer;
|
||||
*/
|
||||
|
||||
if (!_mesa_initialize_context(mesaCtx, &v->mesa_visual,
|
||||
share_list ? &(share_list->mesa) : (GLcontext *) NULL,
|
||||
&functions, (void *) c)) {
|
||||
|
|
@ -1576,10 +1588,15 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
|
|||
st_create_context( mesaCtx,
|
||||
xmesa_create_softpipe( c ) );
|
||||
|
||||
mesaCtx->st->pipe->surface_alloc = xmesa_surface_alloc;
|
||||
mesaCtx->st->pipe->supported_formats = xmesa_supported_formats;
|
||||
|
||||
#if 1
|
||||
mesaCtx->Driver.Clear = xmesa_clear_buffers;
|
||||
/*
|
||||
#endif
|
||||
#if 0
|
||||
mesaCtx->st->pipe->clear = xmesa_clear;
|
||||
*/
|
||||
#endif
|
||||
|
||||
return c;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@
|
|||
#include "framebuffer.h"
|
||||
#include "renderbuffer.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
|
||||
|
||||
#if defined(USE_XSHM) && !defined(XFree86Server)
|
||||
|
|
@ -269,10 +271,10 @@ xmesa_alloc_front_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->Height = height;
|
||||
rb->InternalFormat = internalFormat;
|
||||
|
||||
if (!xrb->Base.surface)
|
||||
xrb->Base.surface = xmesa_new_surface(ctx, xrb);
|
||||
xrb->Base.surface->width = width;
|
||||
xrb->Base.surface->height = height;
|
||||
if (!xrb->St.surface)
|
||||
xrb->St.surface = xmesa_new_surface(ctx, xrb);
|
||||
xrb->St.surface->width = width;
|
||||
xrb->St.surface->height = height;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
|
@ -323,49 +325,101 @@ xmesa_alloc_back_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
xrb->origin4 = NULL;
|
||||
}
|
||||
|
||||
if (!xrb->Base.surface)
|
||||
xrb->Base.surface = xmesa_new_surface(ctx, xrb);
|
||||
xrb->Base.surface->width = width;
|
||||
xrb->Base.surface->height = height;
|
||||
if (!xrb->St.surface)
|
||||
xrb->St.surface = xmesa_new_surface(ctx, xrb);
|
||||
xrb->St.surface->width = width;
|
||||
xrb->St.surface->height = height;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called to create the front/back color renderbuffers, not user-created
|
||||
* renderbuffers.
|
||||
*/
|
||||
struct xmesa_renderbuffer *
|
||||
xmesa_new_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
|
||||
xmesa_create_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
|
||||
GLboolean backBuffer)
|
||||
{
|
||||
struct xmesa_renderbuffer *xrb = CALLOC_STRUCT(xmesa_renderbuffer);
|
||||
struct pipe_context *pipe = NULL;/*ctx->st->pipe;*/
|
||||
if (xrb) {
|
||||
GLuint name = 0;
|
||||
GLuint pipeFormat = 0;
|
||||
struct xmesa_surface *xms;
|
||||
|
||||
_mesa_init_renderbuffer(&xrb->St.Base, name);
|
||||
|
||||
xrb->St.Base.Delete = xmesa_delete_renderbuffer;
|
||||
if (backBuffer)
|
||||
xrb->St.Base.AllocStorage = xmesa_alloc_back_storage;
|
||||
else
|
||||
xrb->St.Base.AllocStorage = xmesa_alloc_front_storage;
|
||||
|
||||
if (visual->rgbMode) {
|
||||
xrb->St.Base.InternalFormat = GL_RGBA;
|
||||
xrb->St.Base._BaseFormat = GL_RGBA;
|
||||
xrb->St.Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->St.Base.RedBits = visual->redBits;
|
||||
xrb->St.Base.GreenBits = visual->greenBits;
|
||||
xrb->St.Base.BlueBits = visual->blueBits;
|
||||
xrb->St.Base.AlphaBits = visual->alphaBits;
|
||||
pipeFormat = PIPE_FORMAT_U_A8_R8_G8_B8;
|
||||
}
|
||||
else {
|
||||
xrb->St.Base.InternalFormat = GL_COLOR_INDEX;
|
||||
xrb->St.Base._BaseFormat = GL_COLOR_INDEX;
|
||||
xrb->St.Base.DataType = GL_UNSIGNED_INT;
|
||||
xrb->St.Base.IndexBits = visual->indexBits;
|
||||
}
|
||||
/* only need to set Red/Green/EtcBits fields for user-created RBs */
|
||||
|
||||
xrb->St.surface = xmesa_surface_alloc(pipe, pipeFormat);
|
||||
xms = (struct xmesa_surface *) xrb->St.surface;
|
||||
xms->xrb = xrb;
|
||||
|
||||
}
|
||||
return xrb;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
struct gl_renderbuffer *
|
||||
xmesa_new_renderbuffer(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
GLenum internalFormat, GLuint width, GLuint height)
|
||||
{
|
||||
struct xmesa_renderbuffer *xrb = CALLOC_STRUCT(xmesa_renderbuffer);
|
||||
if (xrb) {
|
||||
GLuint name = 0;
|
||||
_mesa_init_renderbuffer(&xrb->Base, name);
|
||||
_mesa_init_renderbuffer(&xrb->St.Base, name);
|
||||
|
||||
xrb->Base.Delete = xmesa_delete_renderbuffer;
|
||||
xrb->St.Base.Delete = xmesa_delete_renderbuffer;
|
||||
if (backBuffer)
|
||||
xrb->Base.AllocStorage = xmesa_alloc_back_storage;
|
||||
xrb->St.Base.AllocStorage = xmesa_alloc_back_storage;
|
||||
else
|
||||
xrb->Base.AllocStorage = xmesa_alloc_front_storage;
|
||||
xrb->St.Base.AllocStorage = xmesa_alloc_front_storage;
|
||||
|
||||
if (visual->rgbMode) {
|
||||
xrb->Base.InternalFormat = GL_RGBA;
|
||||
xrb->Base._BaseFormat = GL_RGBA;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.RedBits = visual->redBits;
|
||||
xrb->Base.GreenBits = visual->greenBits;
|
||||
xrb->Base.BlueBits = visual->blueBits;
|
||||
xrb->Base.AlphaBits = visual->alphaBits;
|
||||
xrb->St.Base.InternalFormat = GL_RGBA;
|
||||
xrb->St.Base._BaseFormat = GL_RGBA;
|
||||
xrb->St.Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->St.Base.RedBits = visual->redBits;
|
||||
xrb->St.Base.GreenBits = visual->greenBits;
|
||||
xrb->St.Base.BlueBits = visual->blueBits;
|
||||
xrb->St.Base.AlphaBits = visual->alphaBits;
|
||||
}
|
||||
else {
|
||||
xrb->Base.InternalFormat = GL_COLOR_INDEX;
|
||||
xrb->Base._BaseFormat = GL_COLOR_INDEX;
|
||||
xrb->Base.DataType = GL_UNSIGNED_INT;
|
||||
xrb->Base.IndexBits = visual->indexBits;
|
||||
xrb->St.Base.InternalFormat = GL_COLOR_INDEX;
|
||||
xrb->St.Base._BaseFormat = GL_COLOR_INDEX;
|
||||
xrb->St.Base.DataType = GL_UNSIGNED_INT;
|
||||
xrb->St.Base.IndexBits = visual->indexBits;
|
||||
}
|
||||
/* only need to set Red/Green/EtcBits fields for user-created RBs */
|
||||
}
|
||||
return xrb;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ clear_pixmap(GLcontext *ctx, struct xmesa_renderbuffer *xrb,
|
|||
assert(xmbuf->cleargc);
|
||||
|
||||
XMesaFillRectangle( xmesa->display, xrb->pixmap, xmbuf->cleargc,
|
||||
x, xrb->Base.Height - y - height,
|
||||
x, xrb->St.Base.Height - y - height,
|
||||
width, height );
|
||||
}
|
||||
|
||||
|
|
@ -335,9 +335,9 @@ clear_32bit_ximage(GLcontext *ctx, struct xmesa_renderbuffer *xrb,
|
|||
| ((pixel << 24) & 0xff000000);
|
||||
}
|
||||
|
||||
if (width == xrb->Base.Width && height == xrb->Base.Height) {
|
||||
if (width == xrb->St.Base.Width && height == xrb->St.Base.Height) {
|
||||
/* clearing whole buffer */
|
||||
const GLuint n = xrb->Base.Width * xrb->Base.Height;
|
||||
const GLuint n = xrb->St.Base.Width * xrb->St.Base.Height;
|
||||
GLuint *ptr4 = (GLuint *) xrb->ximage->data;
|
||||
if (pixel == 0) {
|
||||
/* common case */
|
||||
|
|
@ -490,7 +490,7 @@ xmesa_DrawPixels_8R8G8B( GLcontext *ctx,
|
|||
ctx->Pixel.ZoomX == 1.0 && /* no zooming */
|
||||
ctx->Pixel.ZoomY == 1.0 &&
|
||||
xrb->pixmap &&
|
||||
xrb->Base.AlphaBits == 0)
|
||||
xrb->St.Base.AlphaBits == 0)
|
||||
{
|
||||
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
|
||||
XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
|
||||
|
|
@ -1134,6 +1134,7 @@ xmesa_init_driver_functions( XMesaVisual xmvisual,
|
|||
driver->BeginQuery = xmesa_begin_query;
|
||||
driver->EndQuery = xmesa_end_query;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4539,259 +4539,260 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
|
|||
enum pixel_format pixelformat, GLint depth)
|
||||
{
|
||||
const GLboolean pixmap = xrb->pixmap ? GL_TRUE : GL_FALSE;
|
||||
struct gl_renderbuffer *rb = &xrb->St.Base;
|
||||
|
||||
switch (pixelformat) {
|
||||
case PF_Index:
|
||||
ASSERT(xrb->Base.DataType == GL_UNSIGNED_INT);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_INT);
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_ci_pixmap;
|
||||
xrb->Base.PutRowRGB = NULL;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ci_pixmap;
|
||||
xrb->Base.PutValues = put_values_ci_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ci_pixmap;
|
||||
rb->PutRow = put_row_ci_pixmap;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_ci_pixmap;
|
||||
rb->PutValues = put_values_ci_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_ci_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_ci_ximage;
|
||||
xrb->Base.PutRowRGB = NULL;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ci_ximage;
|
||||
xrb->Base.PutValues = put_values_ci_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ci_ximage;
|
||||
rb->PutRow = put_row_ci_ximage;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_ci_ximage;
|
||||
rb->PutValues = put_values_ci_ximage;
|
||||
rb->PutMonoValues = put_mono_values_ci_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_Truecolor:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_TRUECOLOR_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_TRUECOLOR_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_TRUECOLOR_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_TRUECOLOR_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_TRUECOLOR_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_TRUECOLOR_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_TRUECOLOR_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_TRUECOLOR_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ximage;
|
||||
xrb->Base.PutValues = put_values_TRUECOLOR_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ximage;
|
||||
rb->PutRow = put_row_TRUECOLOR_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_TRUECOLOR_ximage;
|
||||
rb->PutMonoRow = put_mono_row_ximage;
|
||||
rb->PutValues = put_values_TRUECOLOR_ximage;
|
||||
rb->PutMonoValues = put_mono_values_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_Dither_True:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_TRUEDITHER_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_TRUEDITHER_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
|
||||
xrb->Base.PutValues = put_values_TRUEDITHER_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
|
||||
rb->PutRow = put_row_TRUEDITHER_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_TRUEDITHER_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
|
||||
rb->PutValues = put_values_TRUEDITHER_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_TRUEDITHER_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_TRUEDITHER_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_ximage;
|
||||
xrb->Base.PutValues = put_values_TRUEDITHER_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_ximage;
|
||||
rb->PutRow = put_row_TRUEDITHER_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_TRUEDITHER_ximage;
|
||||
rb->PutMonoRow = put_mono_row_TRUEDITHER_ximage;
|
||||
rb->PutValues = put_values_TRUEDITHER_ximage;
|
||||
rb->PutMonoValues = put_mono_values_TRUEDITHER_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8A8B8G8R:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_8A8B8G8R_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8A8B8G8R_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_8A8B8G8R_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_8A8B8G8R_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_8A8B8G8R_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_8A8B8G8R_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_8A8B8G8R_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8A8B8G8R_ximage;
|
||||
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;
|
||||
rb->PutRow = put_row_8A8B8G8R_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_8A8B8G8R_ximage;
|
||||
rb->PutMonoRow = put_mono_row_8A8B8G8R_ximage;
|
||||
rb->PutValues = put_values_8A8B8G8R_ximage;
|
||||
rb->PutMonoValues = put_mono_values_8A8B8G8R_ximage;
|
||||
rb->GetPointer = get_pointer_4_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8A8R8G8B:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_8A8R8G8B_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8A8R8G8B_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_8A8R8G8B_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_8A8R8G8B_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_8A8R8G8B_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_8A8R8G8B_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_8A8R8G8B_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8A8R8G8B_ximage;
|
||||
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;
|
||||
rb->PutRow = put_row_8A8R8G8B_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_8A8R8G8B_ximage;
|
||||
rb->PutMonoRow = put_mono_row_8A8R8G8B_ximage;
|
||||
rb->PutValues = put_values_8A8R8G8B_ximage;
|
||||
rb->PutMonoValues = put_mono_values_8A8R8G8B_ximage;
|
||||
rb->GetPointer = get_pointer_4_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8R8G8B:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_8R8G8B_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8R8G8B_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_8R8G8B_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_8R8G8B_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_8R8G8B_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_8R8G8B_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_8R8G8B_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8R8G8B_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_8R8G8B_ximage;
|
||||
xrb->Base.PutValues = put_values_8R8G8B_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_8R8G8B_ximage;
|
||||
rb->PutRow = put_row_8R8G8B_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_8R8G8B_ximage;
|
||||
rb->PutMonoRow = put_mono_row_8R8G8B_ximage;
|
||||
rb->PutValues = put_values_8R8G8B_ximage;
|
||||
rb->PutMonoValues = put_mono_values_8R8G8B_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_8R8G8B24:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_8R8G8B24_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8R8G8B24_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_8R8G8B24_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_8R8G8B24_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_8R8G8B24_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_8R8G8B24_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_8R8G8B24_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_8R8G8B24_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_8R8G8B24_ximage;
|
||||
xrb->Base.PutValues = put_values_8R8G8B24_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_8R8G8B24_ximage;
|
||||
rb->PutRow = put_row_8R8G8B24_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_8R8G8B24_ximage;
|
||||
rb->PutMonoRow = put_mono_row_8R8G8B24_ximage;
|
||||
rb->PutValues = put_values_8R8G8B24_ximage;
|
||||
rb->PutMonoValues = put_mono_values_8R8G8B24_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_5R6G5B:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_5R6G5B_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_5R6G5B_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_5R6G5B_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_5R6G5B_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_5R6G5B_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_5R6G5B_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_5R6G5B_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_5R6G5B_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ximage;
|
||||
xrb->Base.PutValues = put_values_5R6G5B_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ximage;
|
||||
rb->PutRow = put_row_5R6G5B_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_5R6G5B_ximage;
|
||||
rb->PutMonoRow = put_mono_row_ximage;
|
||||
rb->PutValues = put_values_5R6G5B_ximage;
|
||||
rb->PutMonoValues = put_mono_values_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_Dither_5R6G5B:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_DITHER_5R6G5B_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_DITHER_5R6G5B_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
|
||||
xrb->Base.PutValues = put_values_DITHER_5R6G5B_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
|
||||
rb->PutRow = put_row_DITHER_5R6G5B_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_DITHER_5R6G5B_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
|
||||
rb->PutValues = put_values_DITHER_5R6G5B_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_DITHER_5R6G5B_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_DITHER_5R6G5B_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_DITHER_5R6G5B_ximage;
|
||||
xrb->Base.PutValues = put_values_DITHER_5R6G5B_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_DITHER_5R6G5B_ximage;
|
||||
rb->PutRow = put_row_DITHER_5R6G5B_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_DITHER_5R6G5B_ximage;
|
||||
rb->PutMonoRow = put_mono_row_DITHER_5R6G5B_ximage;
|
||||
rb->PutValues = put_values_DITHER_5R6G5B_ximage;
|
||||
rb->PutMonoValues = put_mono_values_DITHER_5R6G5B_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_Dither:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_DITHER_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_DITHER_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_DITHER_pixmap;
|
||||
xrb->Base.PutValues = put_values_DITHER_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_DITHER_pixmap;
|
||||
rb->PutRow = put_row_DITHER_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_DITHER_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_DITHER_pixmap;
|
||||
rb->PutValues = put_values_DITHER_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_DITHER_pixmap;
|
||||
}
|
||||
else {
|
||||
if (depth == 8) {
|
||||
xrb->Base.PutRow = put_row_DITHER8_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_DITHER8_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_DITHER8_ximage;
|
||||
xrb->Base.PutValues = put_values_DITHER8_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_DITHER8_ximage;
|
||||
rb->PutRow = put_row_DITHER8_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_DITHER8_ximage;
|
||||
rb->PutMonoRow = put_mono_row_DITHER8_ximage;
|
||||
rb->PutValues = put_values_DITHER8_ximage;
|
||||
rb->PutMonoValues = put_mono_values_DITHER8_ximage;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_DITHER_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_DITHER_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_DITHER_ximage;
|
||||
xrb->Base.PutValues = put_values_DITHER_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_DITHER_ximage;
|
||||
rb->PutRow = put_row_DITHER_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_DITHER_ximage;
|
||||
rb->PutMonoRow = put_mono_row_DITHER_ximage;
|
||||
rb->PutValues = put_values_DITHER_ximage;
|
||||
rb->PutMonoValues = put_mono_values_DITHER_ximage;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PF_1Bit:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_1BIT_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_1BIT_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_1BIT_pixmap;
|
||||
xrb->Base.PutValues = put_values_1BIT_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_1BIT_pixmap;
|
||||
rb->PutRow = put_row_1BIT_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_1BIT_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_1BIT_pixmap;
|
||||
rb->PutValues = put_values_1BIT_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_1BIT_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_1BIT_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_1BIT_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_1BIT_ximage;
|
||||
xrb->Base.PutValues = put_values_1BIT_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_1BIT_ximage;
|
||||
rb->PutRow = put_row_1BIT_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_1BIT_ximage;
|
||||
rb->PutMonoRow = put_mono_row_1BIT_ximage;
|
||||
rb->PutValues = put_values_1BIT_ximage;
|
||||
rb->PutMonoValues = put_mono_values_1BIT_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_HPCR:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_HPCR_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_HPCR_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_HPCR_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_HPCR_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_HPCR_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_HPCR_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_HPCR_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_HPCR_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_HPCR_ximage;
|
||||
xrb->Base.PutValues = put_values_HPCR_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_HPCR_ximage;
|
||||
rb->PutRow = put_row_HPCR_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_HPCR_ximage;
|
||||
rb->PutMonoRow = put_mono_row_HPCR_ximage;
|
||||
rb->PutValues = put_values_HPCR_ximage;
|
||||
rb->PutMonoValues = put_mono_values_HPCR_ximage;
|
||||
}
|
||||
break;
|
||||
case PF_Lookup:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_LOOKUP_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_LOOKUP_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_LOOKUP_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_LOOKUP_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_LOOKUP_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_LOOKUP_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
if (depth==8) {
|
||||
xrb->Base.PutRow = put_row_LOOKUP8_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_LOOKUP8_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_LOOKUP8_ximage;
|
||||
xrb->Base.PutValues = put_values_LOOKUP8_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_LOOKUP8_ximage;
|
||||
rb->PutRow = put_row_LOOKUP8_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_LOOKUP8_ximage;
|
||||
rb->PutMonoRow = put_mono_row_LOOKUP8_ximage;
|
||||
rb->PutValues = put_values_LOOKUP8_ximage;
|
||||
rb->PutMonoValues = put_mono_values_LOOKUP8_ximage;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_LOOKUP_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_LOOKUP_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ximage;
|
||||
xrb->Base.PutValues = put_values_LOOKUP_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ximage;
|
||||
rb->PutRow = put_row_LOOKUP_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_LOOKUP_ximage;
|
||||
rb->PutMonoRow = put_mono_row_ximage;
|
||||
rb->PutValues = put_values_LOOKUP_ximage;
|
||||
rb->PutMonoValues = put_mono_values_ximage;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PF_Grayscale:
|
||||
if (pixmap) {
|
||||
xrb->Base.PutRow = put_row_GRAYSCALE_pixmap;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE_pixmap;
|
||||
xrb->Base.PutMonoRow = put_mono_row_pixmap;
|
||||
xrb->Base.PutValues = put_values_GRAYSCALE_pixmap;
|
||||
xrb->Base.PutMonoValues = put_mono_values_pixmap;
|
||||
rb->PutRow = put_row_GRAYSCALE_pixmap;
|
||||
rb->PutRowRGB = put_row_rgb_GRAYSCALE_pixmap;
|
||||
rb->PutMonoRow = put_mono_row_pixmap;
|
||||
rb->PutValues = put_values_GRAYSCALE_pixmap;
|
||||
rb->PutMonoValues = put_mono_values_pixmap;
|
||||
}
|
||||
else {
|
||||
if (depth == 8) {
|
||||
xrb->Base.PutRow = put_row_GRAYSCALE8_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE8_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_GRAYSCALE8_ximage;
|
||||
xrb->Base.PutValues = put_values_GRAYSCALE8_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_GRAYSCALE8_ximage;
|
||||
rb->PutRow = put_row_GRAYSCALE8_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_GRAYSCALE8_ximage;
|
||||
rb->PutMonoRow = put_mono_row_GRAYSCALE8_ximage;
|
||||
rb->PutValues = put_values_GRAYSCALE8_ximage;
|
||||
rb->PutMonoValues = put_mono_values_GRAYSCALE8_ximage;
|
||||
}
|
||||
else {
|
||||
xrb->Base.PutRow = put_row_GRAYSCALE_ximage;
|
||||
xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE_ximage;
|
||||
xrb->Base.PutMonoRow = put_mono_row_ximage;
|
||||
xrb->Base.PutValues = put_values_GRAYSCALE_ximage;
|
||||
xrb->Base.PutMonoValues = put_mono_values_ximage;
|
||||
rb->PutRow = put_row_GRAYSCALE_ximage;
|
||||
rb->PutRowRGB = put_row_rgb_GRAYSCALE_ximage;
|
||||
rb->PutMonoRow = put_mono_row_ximage;
|
||||
rb->PutValues = put_values_GRAYSCALE_ximage;
|
||||
rb->PutMonoValues = put_mono_values_ximage;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -4803,12 +4804,12 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
|
|||
|
||||
/* Get functions */
|
||||
if (pixelformat == PF_Index) {
|
||||
xrb->Base.GetRow = get_row_ci;
|
||||
xrb->Base.GetValues = get_values_ci;
|
||||
rb->GetRow = get_row_ci;
|
||||
rb->GetValues = get_values_ci;
|
||||
}
|
||||
else {
|
||||
xrb->Base.GetRow = get_row_rgba;
|
||||
xrb->Base.GetValues = get_values_rgba;
|
||||
rb->GetRow = get_row_rgba;
|
||||
rb->GetValues = get_values_rgba;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,14 +45,21 @@
|
|||
#include "pipe/p_context.h"
|
||||
#include "pipe/p_defines.h"
|
||||
#include "pipe/softpipe/sp_context.h"
|
||||
#include "pipe/softpipe/sp_surface.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
|
||||
|
||||
static INLINE struct xmesa_surface *
|
||||
xmesa_surf(struct softpipe_surface *sps)
|
||||
{
|
||||
return (struct xmesa_surface *) sps;
|
||||
}
|
||||
|
||||
|
||||
static INLINE struct xmesa_renderbuffer *
|
||||
xmesa_rb(struct softpipe_surface *sps)
|
||||
{
|
||||
return (struct xmesa_renderbuffer *) sps->surface.rb;
|
||||
struct xmesa_surface *xms = xmesa_surf(sps);
|
||||
return xms->xrb;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -66,13 +73,14 @@ static void
|
|||
read_quad_f(struct softpipe_surface *sps, GLint x, GLint y,
|
||||
GLfloat (*rgba)[NUM_CHANNELS])
|
||||
{
|
||||
struct xmesa_surface *xms = xmesa_surf(sps);
|
||||
struct xmesa_renderbuffer *xrb = xmesa_rb(sps);
|
||||
GLubyte temp[16];
|
||||
GLfloat *dst = (GLfloat *) rgba;
|
||||
GLuint i;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y, temp);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y + 1, temp + 8);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y, temp);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y + 1, temp + 8);
|
||||
for (i = 0; i < 16; i++) {
|
||||
dst[i] = UBYTE_TO_FLOAT(temp[i]);
|
||||
}
|
||||
|
|
@ -82,13 +90,14 @@ static void
|
|||
read_quad_f_swz(struct softpipe_surface *sps, GLint x, GLint y,
|
||||
GLfloat (*rrrr)[QUAD_SIZE])
|
||||
{
|
||||
struct xmesa_surface *xms = xmesa_surf(sps);
|
||||
struct xmesa_renderbuffer *xrb = xmesa_rb(sps);
|
||||
GLubyte temp[16];
|
||||
GLfloat *dst = (GLfloat *) rrrr;
|
||||
GLuint i, j;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y, temp);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y + 1, temp + 8);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y, temp);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y + 1, temp + 8);
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
dst[j * 4 + i] = UBYTE_TO_FLOAT(temp[i * 4 + j]);
|
||||
|
|
@ -108,8 +117,8 @@ write_quad_f(struct softpipe_surface *sps, GLint x, GLint y,
|
|||
for (i = 0; i < 16; i++) {
|
||||
UNCLAMPED_FLOAT_TO_UBYTE(temp[i], src[i]);
|
||||
}
|
||||
xrb->Base.PutRow(ctx, &xrb->Base, 2, x, y, temp, NULL);
|
||||
xrb->Base.PutRow(ctx, &xrb->Base, 2, x, y + 1, temp + 8, NULL);
|
||||
xrb->St.Base.PutRow(ctx, &xrb->St.Base, 2, x, y, temp, NULL);
|
||||
xrb->St.Base.PutRow(ctx, &xrb->St.Base, 2, x, y + 1, temp + 8, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -126,8 +135,8 @@ write_quad_f_swz(struct softpipe_surface *sps, GLint x, GLint y,
|
|||
UNCLAMPED_FLOAT_TO_UBYTE(temp[j * 4 + i], src[i * 4 + j]);
|
||||
}
|
||||
}
|
||||
xrb->Base.PutRow(ctx, &xrb->Base, 2, x, y, temp, NULL);
|
||||
xrb->Base.PutRow(ctx, &xrb->Base, 2, x, y + 1, temp + 8, NULL);
|
||||
xrb->St.Base.PutRow(ctx, &xrb->St.Base, 2, x, y, temp, NULL);
|
||||
xrb->St.Base.PutRow(ctx, &xrb->St.Base, 2, x, y + 1, temp + 8, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -136,8 +145,8 @@ read_quad_ub(struct softpipe_surface *sps, GLint x, GLint y,
|
|||
{
|
||||
struct xmesa_renderbuffer *xrb = xmesa_rb(sps);
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y, rgba);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y + 1, rgba + 2);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y, rgba);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y + 1, rgba + 2);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -146,8 +155,8 @@ write_quad_ub(struct softpipe_surface *sps, GLint x, GLint y,
|
|||
{
|
||||
struct xmesa_renderbuffer *xrb = xmesa_rb(sps);
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y, rgba);
|
||||
xrb->Base.GetRow(ctx, &xrb->Base, 2, x, y + 1, rgba + 2);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y, rgba);
|
||||
xrb->St.Base.GetRow(ctx, &xrb->St.Base, 2, x, y + 1, rgba + 2);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
|
@ -157,7 +166,7 @@ write_mono_row_ub(struct softpipe_surface *sps, GLuint count, GLint x, GLint y,
|
|||
{
|
||||
struct xmesa_renderbuffer *xrb = xmesa_rb(sps);
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
xrb->Base.PutMonoRow(ctx, &xrb->Base, count, x, y, rgba, NULL);
|
||||
xrb->St.Base.PutMonoRow(ctx, &xrb->St.Base, count, x, y, rgba, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -177,9 +186,11 @@ xmesa_new_surface(GLcontext *ctx, struct xmesa_renderbuffer *xrb)
|
|||
if (!sps)
|
||||
return NULL;
|
||||
|
||||
#if 0
|
||||
sps->surface.rb = xrb; /* XXX only needed for quad funcs above */
|
||||
sps->surface.width = xrb->Base.Width;
|
||||
sps->surface.height = xrb->Base.Height;
|
||||
#endif
|
||||
sps->surface.width = xrb->St.Base.Width;
|
||||
sps->surface.height = xrb->St.Base.Height;
|
||||
|
||||
sps->read_quad_f = read_quad_f;
|
||||
sps->read_quad_f_swz = read_quad_f_swz;
|
||||
|
|
@ -197,3 +208,52 @@ xmesa_new_surface(GLcontext *ctx, struct xmesa_renderbuffer *xrb)
|
|||
|
||||
return &sps->surface;
|
||||
}
|
||||
|
||||
|
||||
struct pipe_surface *
|
||||
xmesa_surface_alloc(struct pipe_context *pipe, GLuint pipeFormat)
|
||||
{
|
||||
struct xmesa_surface *xms = CALLOC_STRUCT(xmesa_surface);
|
||||
|
||||
assert(pipeFormat);
|
||||
|
||||
xms->surface.surface.format = pipeFormat;
|
||||
|
||||
switch (pipeFormat) {
|
||||
case PIPE_FORMAT_U_A8_R8_G8_B8:
|
||||
xms->surface.read_quad_f_swz = read_quad_f;
|
||||
xms->surface.read_quad_f = read_quad_f;
|
||||
xms->surface.read_quad_f_swz = read_quad_f_swz;
|
||||
xms->surface.read_quad_ub = read_quad_ub;
|
||||
xms->surface.write_quad_f = write_quad_f;
|
||||
xms->surface.write_quad_f_swz = write_quad_f_swz;
|
||||
xms->surface.write_quad_ub = write_quad_ub;
|
||||
break;
|
||||
case PIPE_FORMAT_S8_Z24:
|
||||
softpipe_init_surface_funcs(&xms->surface);
|
||||
/*
|
||||
xms->surface.read_quad_z = 1;
|
||||
xms->surface.write_quad_z = 1;
|
||||
*/
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
return &xms->surface.surface;
|
||||
}
|
||||
|
||||
|
||||
const GLuint *
|
||||
xmesa_supported_formats(struct pipe_context *pipe, GLuint *numFormats)
|
||||
{
|
||||
static const GLuint formats[] = {
|
||||
PIPE_FORMAT_U_A8_R8_G8_B8,
|
||||
PIPE_FORMAT_S8_Z24
|
||||
};
|
||||
|
||||
*numFormats = 2;
|
||||
|
||||
return formats;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,9 @@
|
|||
#ifdef XFree86Server
|
||||
#include "xm_image.h"
|
||||
#endif
|
||||
#include "state_tracker/st_cb_fbo.h"
|
||||
#include "pipe/softpipe/sp_context.h"
|
||||
#include "pipe/softpipe/sp_surface.h"
|
||||
|
||||
|
||||
extern _glthread_Mutex _xmesa_lock;
|
||||
|
|
@ -177,7 +180,11 @@ typedef enum {
|
|||
*/
|
||||
struct xmesa_renderbuffer
|
||||
{
|
||||
#if 0
|
||||
struct gl_renderbuffer Base; /* Base class */
|
||||
#else
|
||||
struct st_renderbuffer St; /**< Base class */
|
||||
#endif
|
||||
|
||||
XMesaBuffer Parent; /**< The XMesaBuffer this renderbuffer belongs to */
|
||||
XMesaDrawable drawable; /* Usually the X window ID */
|
||||
|
|
@ -493,8 +500,8 @@ extern const int xmesa_kernel1[16];
|
|||
*/
|
||||
|
||||
extern struct xmesa_renderbuffer *
|
||||
xmesa_new_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
|
||||
GLboolean backBuffer);
|
||||
xmesa_create_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
|
||||
GLboolean backBuffer);
|
||||
|
||||
extern void
|
||||
xmesa_delete_framebuffer(struct gl_framebuffer *fb);
|
||||
|
|
@ -589,6 +596,13 @@ extern void xmesa_register_swrast_functions( GLcontext *ctx );
|
|||
struct pipe_surface;
|
||||
struct pipe_context;
|
||||
|
||||
struct xmesa_surface
|
||||
{
|
||||
struct softpipe_surface surface;
|
||||
struct xmesa_renderbuffer *xrb;
|
||||
};
|
||||
|
||||
|
||||
extern struct pipe_surface *
|
||||
xmesa_new_surface(GLcontext *ctx, struct xmesa_renderbuffer *xrb);
|
||||
|
||||
|
|
@ -601,5 +615,11 @@ xmesa_clear_buffers(GLcontext *ctx, GLbitfield buffers);
|
|||
extern struct pipe_context *
|
||||
xmesa_create_softpipe(XMesaContext xm);
|
||||
|
||||
extern struct pipe_surface *
|
||||
xmesa_surface_alloc(struct pipe_context *pipe, GLuint format);
|
||||
|
||||
extern const GLuint *
|
||||
xmesa_supported_formats(struct pipe_context *pipe, GLuint *numFormats);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue