Merge branch 'texformat-rework'
Conflicts: src/mesa/drivers/dri/radeon/radeon_fbo.c src/mesa/drivers/dri/s3v/s3v_tex.c src/mesa/drivers/dri/s3v/s3v_xmesa.c src/mesa/drivers/dri/trident/trident_context.c src/mesa/main/debug.c src/mesa/main/mipmap.c src/mesa/main/texformat.c src/mesa/main/texgetimage.c
This commit is contained in:
@@ -43,6 +43,8 @@
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "fbobject.h"
|
||||
#include "formats.h"
|
||||
#include "mtypes.h"
|
||||
#include "fbobject.h"
|
||||
#include "renderbuffer.h"
|
||||
@@ -72,7 +74,7 @@ get_pointer_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
if (!rb->Data)
|
||||
return NULL;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
/* Can't assert _ActualFormat since these funcs may be used for serveral
|
||||
/* Can't assert rb->Format since these funcs may be used for serveral
|
||||
* different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc).
|
||||
*/
|
||||
return (GLubyte *) rb->Data + y * rb->Width + x;
|
||||
@@ -448,7 +450,7 @@ static void *
|
||||
get_pointer_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
GLint x, GLint y)
|
||||
{
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
/* No direct access since this buffer is RGB but caller will be
|
||||
* treating it as if it were RGBA.
|
||||
*/
|
||||
@@ -463,7 +465,7 @@ get_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLubyte *src = (const GLubyte *) rb->Data + 3 * (y * rb->Width + x);
|
||||
GLubyte *dst = (GLubyte *) values;
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
dst[i * 4 + 0] = src[i * 3 + 0];
|
||||
@@ -480,7 +482,7 @@ get_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
{
|
||||
GLubyte *dst = (GLubyte *) values;
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
const GLubyte *src
|
||||
@@ -501,7 +503,7 @@ put_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLubyte *src = (const GLubyte *) values;
|
||||
GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
@@ -521,7 +523,7 @@ put_row_rgb_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLubyte *src = (const GLubyte *) values;
|
||||
GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
@@ -542,7 +544,7 @@ put_mono_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLubyte val1 = ((const GLubyte *) value)[1];
|
||||
const GLubyte val2 = ((const GLubyte *) value)[2];
|
||||
GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
if (!mask && val0 == val1 && val1 == val2) {
|
||||
/* optimized case */
|
||||
@@ -569,7 +571,7 @@ put_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
/* note: incoming values are RGB+A! */
|
||||
const GLubyte *src = (const GLubyte *) values;
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
@@ -592,7 +594,7 @@ put_mono_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
const GLubyte val1 = ((const GLubyte *) value)[1];
|
||||
const GLubyte val2 = ((const GLubyte *) value)[2];
|
||||
GLuint i;
|
||||
ASSERT(rb->_ActualFormat == GL_RGB8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGB888);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
@@ -617,7 +619,7 @@ get_pointer_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
if (!rb->Data)
|
||||
return NULL;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
return (GLubyte *) rb->Data + 4 * (y * rb->Width + x);
|
||||
}
|
||||
|
||||
@@ -628,7 +630,7 @@ get_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
{
|
||||
const GLubyte *src = (const GLubyte *) rb->Data + 4 * (y * rb->Width + x);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
_mesa_memcpy(values, src, 4 * count * sizeof(GLubyte));
|
||||
}
|
||||
|
||||
@@ -641,7 +643,7 @@ get_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
GLuint *dst = (GLuint *) values;
|
||||
GLuint i;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
for (i = 0; i < count; i++) {
|
||||
const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
|
||||
dst[i] = *src;
|
||||
@@ -657,7 +659,7 @@ put_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLuint *src = (const GLuint *) values;
|
||||
GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
if (mask) {
|
||||
GLuint i;
|
||||
for (i = 0; i < count; i++) {
|
||||
@@ -681,7 +683,7 @@ put_row_rgb_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->Width + x);
|
||||
GLuint i;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
dst[i * 4 + 0] = src[i * 3 + 0];
|
||||
@@ -701,7 +703,7 @@ put_mono_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLuint val = *((const GLuint *) value);
|
||||
GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x);
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
if (!mask && val == 0) {
|
||||
/* common case */
|
||||
_mesa_bzero(dst, count * 4 * sizeof(GLubyte));
|
||||
@@ -735,7 +737,7 @@ put_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
|
||||
const GLuint *src = (const GLuint *) values;
|
||||
GLuint i;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
|
||||
@@ -754,7 +756,7 @@ put_mono_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
const GLuint val = *((const GLuint *) value);
|
||||
GLuint i;
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
ASSERT(rb->_ActualFormat == GL_RGBA8);
|
||||
ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
|
||||
for (i = 0; i < count; i++) {
|
||||
if (!mask || mask[i]) {
|
||||
GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
|
||||
@@ -947,15 +949,6 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
{
|
||||
GLuint pixelSize;
|
||||
|
||||
/* first clear these fields */
|
||||
rb->RedBits =
|
||||
rb->GreenBits =
|
||||
rb->BlueBits =
|
||||
rb->AlphaBits =
|
||||
rb->IndexBits =
|
||||
rb->DepthBits =
|
||||
rb->StencilBits = 0;
|
||||
|
||||
switch (internalFormat) {
|
||||
case GL_RGB:
|
||||
case GL_R3_G3_B2:
|
||||
@@ -965,8 +958,7 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
rb->_ActualFormat = GL_RGB8;
|
||||
rb->_BaseFormat = GL_RGB;
|
||||
rb->Format = MESA_FORMAT_RGB888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->GetPointer = get_pointer_ubyte3;
|
||||
rb->GetRow = get_row_ubyte3;
|
||||
@@ -976,10 +968,6 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ubyte3;
|
||||
rb->PutValues = put_values_ubyte3;
|
||||
rb->PutMonoValues = put_mono_values_ubyte3;
|
||||
rb->RedBits = 8 * sizeof(GLubyte);
|
||||
rb->GreenBits = 8 * sizeof(GLubyte);
|
||||
rb->BlueBits = 8 * sizeof(GLubyte);
|
||||
rb->AlphaBits = 0;
|
||||
pixelSize = 3 * sizeof(GLubyte);
|
||||
break;
|
||||
case GL_RGBA:
|
||||
@@ -987,8 +975,11 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
case GL_RGBA4:
|
||||
case GL_RGB5_A1:
|
||||
case GL_RGBA8:
|
||||
rb->_ActualFormat = GL_RGBA8;
|
||||
rb->_BaseFormat = GL_RGBA;
|
||||
#if 1
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
#endif
|
||||
rb->Format = MESA_FORMAT_RGBA8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->GetPointer = get_pointer_ubyte4;
|
||||
rb->GetRow = get_row_ubyte4;
|
||||
@@ -998,18 +989,12 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ubyte4;
|
||||
rb->PutValues = put_values_ubyte4;
|
||||
rb->PutMonoValues = put_mono_values_ubyte4;
|
||||
rb->RedBits = 8 * sizeof(GLubyte);
|
||||
rb->GreenBits = 8 * sizeof(GLubyte);
|
||||
rb->BlueBits = 8 * sizeof(GLubyte);
|
||||
rb->AlphaBits = 8 * sizeof(GLubyte);
|
||||
pixelSize = 4 * sizeof(GLubyte);
|
||||
break;
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
rb->_ActualFormat = GL_RGBA16;
|
||||
rb->_BaseFormat = GL_RGBA;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
/* for accum buffer */
|
||||
rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
|
||||
rb->DataType = GL_SHORT;
|
||||
rb->GetPointer = get_pointer_ushort4;
|
||||
rb->GetRow = get_row_ushort4;
|
||||
rb->GetValues = get_values_ushort4;
|
||||
@@ -1018,16 +1003,11 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ushort4;
|
||||
rb->PutValues = put_values_ushort4;
|
||||
rb->PutMonoValues = put_mono_values_ushort4;
|
||||
rb->RedBits = 8 * sizeof(GLushort);
|
||||
rb->GreenBits = 8 * sizeof(GLushort);
|
||||
rb->BlueBits = 8 * sizeof(GLushort);
|
||||
rb->AlphaBits = 8 * sizeof(GLushort);
|
||||
pixelSize = 4 * sizeof(GLushort);
|
||||
break;
|
||||
#if 00
|
||||
#if 0
|
||||
case GL_ALPHA8:
|
||||
rb->_ActualFormat = GL_ALPHA8;
|
||||
rb->_BaseFormat = GL_RGBA; /* Yes, not GL_ALPHA! */
|
||||
rb->Format = MESA_FORMAT_A8;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->GetPointer = get_pointer_alpha8;
|
||||
rb->GetRow = get_row_alpha8;
|
||||
@@ -1037,10 +1017,6 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_alpha8;
|
||||
rb->PutValues = put_values_alpha8;
|
||||
rb->PutMonoValues = put_mono_values_alpha8;
|
||||
rb->RedBits = 0; /*red*/
|
||||
rb->GreenBits = 0; /*green*/
|
||||
rb->BlueBits = 0; /*blue*/
|
||||
rb->AlphaBits = 8 * sizeof(GLubyte);
|
||||
pixelSize = sizeof(GLubyte);
|
||||
break;
|
||||
#endif
|
||||
@@ -1048,8 +1024,8 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
case GL_STENCIL_INDEX1_EXT:
|
||||
case GL_STENCIL_INDEX4_EXT:
|
||||
case GL_STENCIL_INDEX8_EXT:
|
||||
rb->_ActualFormat = GL_STENCIL_INDEX8_EXT;
|
||||
rb->_BaseFormat = GL_STENCIL_INDEX;
|
||||
case GL_STENCIL_INDEX16_EXT:
|
||||
rb->Format = MESA_FORMAT_S8;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->GetPointer = get_pointer_ubyte;
|
||||
rb->GetRow = get_row_ubyte;
|
||||
@@ -1059,28 +1035,11 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ubyte;
|
||||
rb->PutValues = put_values_ubyte;
|
||||
rb->PutMonoValues = put_mono_values_ubyte;
|
||||
rb->StencilBits = 8 * sizeof(GLubyte);
|
||||
pixelSize = sizeof(GLubyte);
|
||||
break;
|
||||
case GL_STENCIL_INDEX16_EXT:
|
||||
rb->_ActualFormat = GL_STENCIL_INDEX16_EXT;
|
||||
rb->_BaseFormat = GL_STENCIL_INDEX;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
rb->GetPointer = get_pointer_ushort;
|
||||
rb->GetRow = get_row_ushort;
|
||||
rb->GetValues = get_values_ushort;
|
||||
rb->PutRow = put_row_ushort;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_ushort;
|
||||
rb->PutValues = put_values_ushort;
|
||||
rb->PutMonoValues = put_mono_values_ushort;
|
||||
rb->StencilBits = 8 * sizeof(GLushort);
|
||||
pixelSize = sizeof(GLushort);
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
rb->GetPointer = get_pointer_ushort;
|
||||
rb->GetRow = get_row_ushort;
|
||||
@@ -1090,12 +1049,9 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ushort;
|
||||
rb->PutValues = put_values_ushort;
|
||||
rb->PutMonoValues = put_mono_values_ushort;
|
||||
rb->DepthBits = 8 * sizeof(GLushort);
|
||||
pixelSize = sizeof(GLushort);
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH_COMPONENT32:
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
rb->GetPointer = get_pointer_uint;
|
||||
rb->GetRow = get_row_uint;
|
||||
@@ -1105,20 +1061,25 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_uint;
|
||||
rb->PutValues = put_values_uint;
|
||||
rb->PutMonoValues = put_mono_values_uint;
|
||||
if (internalFormat == GL_DEPTH_COMPONENT24) {
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT24;
|
||||
rb->DepthBits = 24;
|
||||
}
|
||||
else {
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT32;
|
||||
rb->DepthBits = 32;
|
||||
}
|
||||
rb->Format = MESA_FORMAT_X8_Z24;
|
||||
pixelSize = sizeof(GLuint);
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT32:
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
rb->GetPointer = get_pointer_uint;
|
||||
rb->GetRow = get_row_uint;
|
||||
rb->GetValues = get_values_uint;
|
||||
rb->PutRow = put_row_uint;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_uint;
|
||||
rb->PutValues = put_values_uint;
|
||||
rb->PutMonoValues = put_mono_values_uint;
|
||||
rb->Format = MESA_FORMAT_Z32;
|
||||
pixelSize = sizeof(GLuint);
|
||||
break;
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->_BaseFormat = GL_DEPTH_STENCIL_EXT;
|
||||
rb->Format = MESA_FORMAT_Z24_S8;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->GetPointer = get_pointer_uint;
|
||||
rb->GetRow = get_row_uint;
|
||||
@@ -1128,13 +1089,12 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_uint;
|
||||
rb->PutValues = put_values_uint;
|
||||
rb->PutMonoValues = put_mono_values_uint;
|
||||
rb->DepthBits = 24;
|
||||
rb->StencilBits = 8;
|
||||
pixelSize = sizeof(GLuint);
|
||||
break;
|
||||
case GL_COLOR_INDEX8_EXT:
|
||||
rb->_ActualFormat = GL_COLOR_INDEX8_EXT;
|
||||
rb->_BaseFormat = GL_COLOR_INDEX;
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
case COLOR_INDEX32:
|
||||
rb->Format = MESA_FORMAT_CI8;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->GetPointer = get_pointer_ubyte;
|
||||
rb->GetRow = get_row_ubyte;
|
||||
@@ -1144,39 +1104,8 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
rb->PutMonoRow = put_mono_row_ubyte;
|
||||
rb->PutValues = put_values_ubyte;
|
||||
rb->PutMonoValues = put_mono_values_ubyte;
|
||||
rb->IndexBits = 8 * sizeof(GLubyte);
|
||||
pixelSize = sizeof(GLubyte);
|
||||
break;
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
rb->_ActualFormat = GL_COLOR_INDEX16_EXT;
|
||||
rb->_BaseFormat = GL_COLOR_INDEX;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
rb->GetPointer = get_pointer_ushort;
|
||||
rb->GetRow = get_row_ushort;
|
||||
rb->GetValues = get_values_ushort;
|
||||
rb->PutRow = put_row_ushort;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_ushort;
|
||||
rb->PutValues = put_values_ushort;
|
||||
rb->PutMonoValues = put_mono_values_ushort;
|
||||
rb->IndexBits = 8 * sizeof(GLushort);
|
||||
pixelSize = sizeof(GLushort);
|
||||
break;
|
||||
case COLOR_INDEX32:
|
||||
rb->_ActualFormat = COLOR_INDEX32;
|
||||
rb->_BaseFormat = GL_COLOR_INDEX;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
rb->GetPointer = get_pointer_uint;
|
||||
rb->GetRow = get_row_uint;
|
||||
rb->GetValues = get_values_uint;
|
||||
rb->PutRow = put_row_uint;
|
||||
rb->PutRowRGB = NULL;
|
||||
rb->PutMonoRow = put_mono_row_uint;
|
||||
rb->PutValues = put_values_uint;
|
||||
rb->PutMonoValues = put_mono_values_uint;
|
||||
rb->IndexBits = 8 * sizeof(GLuint);
|
||||
pixelSize = sizeof(GLuint);
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Bad internalFormat in _mesa_soft_renderbuffer_storage");
|
||||
return GL_FALSE;
|
||||
@@ -1213,6 +1142,7 @@ _mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
||||
|
||||
rb->Width = width;
|
||||
rb->Height = height;
|
||||
rb->_BaseFormat = _mesa_base_fbo_format(ctx, rb->InternalFormat);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
@@ -1239,7 +1169,7 @@ alloc_storage_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb,
|
||||
GLenum internalFormat, GLuint width, GLuint height)
|
||||
{
|
||||
ASSERT(arb != arb->Wrapped);
|
||||
ASSERT(arb->_ActualFormat == GL_ALPHA8);
|
||||
ASSERT(arb->Format == MESA_FORMAT_A8);
|
||||
|
||||
/* first, pass the call to the wrapped RGB buffer */
|
||||
if (!arb->Wrapped->AllocStorage(ctx, arb->Wrapped, internalFormat,
|
||||
@@ -1439,8 +1369,8 @@ put_mono_values_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb,
|
||||
static void
|
||||
copy_buffer_alpha8(struct gl_renderbuffer* dst, struct gl_renderbuffer* src)
|
||||
{
|
||||
ASSERT(dst->_ActualFormat == GL_ALPHA8);
|
||||
ASSERT(src->_ActualFormat == GL_ALPHA8);
|
||||
ASSERT(dst->Format == MESA_FORMAT_A8);
|
||||
ASSERT(src->Format == MESA_FORMAT_A8);
|
||||
ASSERT(dst->Width == src->Width);
|
||||
ASSERT(dst->Height == src->Height);
|
||||
|
||||
@@ -1486,16 +1416,7 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
|
||||
rb->Width = 0;
|
||||
rb->Height = 0;
|
||||
rb->InternalFormat = GL_NONE;
|
||||
rb->_ActualFormat = GL_NONE;
|
||||
rb->_BaseFormat = GL_NONE;
|
||||
|
||||
rb->ComponentType = GL_UNSIGNED_NORMALIZED; /* ARB_fbo */
|
||||
rb->ColorEncoding = GL_LINEAR; /* ARB_fbo */
|
||||
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = rb->AlphaBits = 0;
|
||||
rb->IndexBits = 0;
|
||||
rb->DepthBits = 0;
|
||||
rb->StencilBits = 0;
|
||||
rb->Format = MESA_FORMAT_NONE;
|
||||
|
||||
rb->DataType = GL_NONE;
|
||||
rb->Data = NULL;
|
||||
@@ -1612,18 +1533,15 @@ _mesa_add_color_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
|
||||
if (rgbBits <= 8) {
|
||||
if (alphaBits)
|
||||
rb->_ActualFormat = GL_RGBA8;
|
||||
rb->Format = MESA_FORMAT_RGBA8888;
|
||||
else
|
||||
rb->_ActualFormat = GL_RGB8;
|
||||
rb->Format = MESA_FORMAT_RGB888;
|
||||
}
|
||||
else {
|
||||
assert(rgbBits <= 16);
|
||||
if (alphaBits)
|
||||
rb->_ActualFormat = GL_RGBA16;
|
||||
else
|
||||
rb->_ActualFormat = GL_RGBA16; /* don't really have RGB16 yet */
|
||||
rb->Format = MESA_FORMAT_NONE; /*XXX RGBA16;*/
|
||||
}
|
||||
rb->InternalFormat = rb->_ActualFormat;
|
||||
rb->InternalFormat = GL_RGBA;
|
||||
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, b, rb);
|
||||
@@ -1677,15 +1595,9 @@ _mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (indexBits <= 8) {
|
||||
/* only support GLuint for now */
|
||||
/*rb->InternalFormat = GL_COLOR_INDEX8_EXT;*/
|
||||
rb->_ActualFormat = COLOR_INDEX32;
|
||||
}
|
||||
else {
|
||||
rb->_ActualFormat = COLOR_INDEX32;
|
||||
}
|
||||
rb->InternalFormat = rb->_ActualFormat;
|
||||
assert(indexBits <= 8);
|
||||
rb->Format = MESA_FORMAT_CI8;
|
||||
rb->InternalFormat = GL_COLOR_INDEX;
|
||||
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, b, rb);
|
||||
@@ -1758,8 +1670,7 @@ _mesa_add_alpha_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
* values.
|
||||
*/
|
||||
arb->InternalFormat = arb->Wrapped->InternalFormat;
|
||||
arb->_ActualFormat = GL_ALPHA8;
|
||||
arb->_BaseFormat = arb->Wrapped->_BaseFormat;
|
||||
arb->Format = MESA_FORMAT_A8;
|
||||
arb->DataType = arb->Wrapped->DataType;
|
||||
arb->AllocStorage = alloc_storage_alpha8;
|
||||
arb->Delete = delete_renderbuffer_alpha8;
|
||||
@@ -1833,15 +1744,17 @@ _mesa_add_depth_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
}
|
||||
|
||||
if (depthBits <= 16) {
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT16;
|
||||
}
|
||||
else if (depthBits <= 24) {
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT24;
|
||||
rb->Format = MESA_FORMAT_X8_Z24;
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT24;
|
||||
}
|
||||
else {
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT32;
|
||||
rb->Format = MESA_FORMAT_Z32;
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT32;
|
||||
}
|
||||
rb->InternalFormat = rb->_ActualFormat;
|
||||
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb);
|
||||
@@ -1878,14 +1791,9 @@ _mesa_add_stencil_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (stencilBits <= 8) {
|
||||
rb->_ActualFormat = GL_STENCIL_INDEX8_EXT;
|
||||
}
|
||||
else {
|
||||
/* not really supported (see s_stencil.c code) */
|
||||
rb->_ActualFormat = GL_STENCIL_INDEX16_EXT;
|
||||
}
|
||||
rb->InternalFormat = rb->_ActualFormat;
|
||||
assert(stencilBits <= 8);
|
||||
rb->Format = MESA_FORMAT_S8;
|
||||
rb->InternalFormat = GL_STENCIL_INDEX8;
|
||||
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, rb);
|
||||
@@ -1923,7 +1831,7 @@ _mesa_add_accum_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
rb->_ActualFormat = GL_RGBA16;
|
||||
rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
|
||||
rb->InternalFormat = GL_RGBA16;
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, BUFFER_ACCUM, rb);
|
||||
@@ -1967,13 +1875,9 @@ _mesa_add_aux_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
if (colorBits <= 8) {
|
||||
rb->_ActualFormat = GL_RGBA8;
|
||||
}
|
||||
else {
|
||||
rb->_ActualFormat = GL_RGBA16;
|
||||
}
|
||||
rb->InternalFormat = rb->_ActualFormat;
|
||||
assert (colorBits <= 8);
|
||||
rb->Format = MESA_FORMAT_RGBA8888;
|
||||
rb->InternalFormat = GL_RGBA;
|
||||
|
||||
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
_mesa_add_renderbuffer(fb, BUFFER_AUX0 + i, rb);
|
||||
@@ -2071,6 +1975,8 @@ void
|
||||
_mesa_add_renderbuffer(struct gl_framebuffer *fb,
|
||||
GLuint bufferName, struct gl_renderbuffer *rb)
|
||||
{
|
||||
GLenum baseFormat;
|
||||
|
||||
assert(fb);
|
||||
assert(rb);
|
||||
assert(bufferName < BUFFER_COUNT);
|
||||
@@ -2095,7 +2001,8 @@ _mesa_add_renderbuffer(struct gl_framebuffer *fb,
|
||||
* and the device driver is expecting 8-bit values (GLubyte), we can
|
||||
* use a "renderbuffer adaptor/wrapper" to do the necessary conversions.
|
||||
*/
|
||||
if (rb->_BaseFormat == GL_RGBA) {
|
||||
baseFormat = _mesa_get_format_base_format(rb->Format);
|
||||
if (baseFormat == GL_RGBA) {
|
||||
if (CHAN_BITS == 16 && rb->DataType == GL_UNSIGNED_BYTE) {
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
rb = _mesa_new_renderbuffer_16wrap8(ctx, rb);
|
||||
@@ -2202,7 +2109,7 @@ _mesa_new_depthstencil_renderbuffer(GLcontext *ctx, GLuint name)
|
||||
|
||||
/* init fields not covered by _mesa_new_renderbuffer() */
|
||||
dsrb->InternalFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
dsrb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
dsrb->Format = MESA_FORMAT_Z24_S8;
|
||||
dsrb->AllocStorage = _mesa_soft_renderbuffer_storage;
|
||||
|
||||
return dsrb;
|
||||
|
Reference in New Issue
Block a user