mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 21:40:08 +01:00
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:
commit
1f196b786d
143 changed files with 6567 additions and 5784 deletions
|
|
@ -191,6 +191,16 @@ MakeTexture(const struct pixel_format *format, GLenum intFormat, GLboolean swap)
|
|||
format->format, format->type, texBuffer);
|
||||
}
|
||||
|
||||
if (0) {
|
||||
GLint r, g, b, a;
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_RED_SIZE, &r);
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_GREEN_SIZE, &g);
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_BLUE_SIZE, &b);
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_ALPHA_SIZE, &a);
|
||||
printf("sizes: %d %d %d %d\n", r, g, b, a);
|
||||
glGetError();
|
||||
}
|
||||
|
||||
if (glGetError()) {
|
||||
printf("GL Error for %s\n", format->name);
|
||||
memset(texBuffer, 255, 1000);
|
||||
|
|
|
|||
|
|
@ -106,6 +106,8 @@ static void Display( void )
|
|||
glRotatef(Rot, 0, 0, 1);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
glTexCoord2f(0, 1); glVertex2f(-1, -0.5);
|
||||
glTexCoord2f(1, 1); glVertex2f( 1, -0.5);
|
||||
|
|
@ -115,7 +117,10 @@ static void Display( void )
|
|||
|
||||
glPopMatrix();
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
|
||||
/* info */
|
||||
glDisable(GL_BLEND);
|
||||
glColor4f(1, 1, 1, 1);
|
||||
|
||||
glRasterPos3f(-1.2, -0.7, 0);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ LoadCompressedImage(void)
|
|||
unsigned char ImgDataTemp[ImgSize / 4];
|
||||
unsigned i;
|
||||
const GLenum filter = GL_LINEAR;
|
||||
const int half = ImgSize / 2;
|
||||
|
||||
glTexImage2D(Target, 0, CompFormat, ImgWidth, ImgHeight, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
||||
|
||||
|
|
@ -42,11 +44,11 @@ LoadCompressedImage(void)
|
|||
glCompressedTexSubImage2DARB(Target, 0,
|
||||
0, 0, /* pos */
|
||||
ImgWidth, ImgHeight / 2,
|
||||
CompFormat, ImgSize / 2, ImgData + ImgSize / 2);
|
||||
CompFormat, ImgSize / 2, ImgData /*+ ImgSize / 2*/);
|
||||
|
||||
/* top left */
|
||||
for (i = 0; i < ImgHeight / 8; i++) {
|
||||
memcpy(&ImgDataTemp[i * ImgWidth], &ImgData[i * 2 * ImgWidth], ImgWidth);
|
||||
memcpy(&ImgDataTemp[i * ImgWidth], &ImgData[half + i * 2 * ImgWidth], ImgWidth);
|
||||
}
|
||||
glCompressedTexSubImage2DARB(Target, 0,
|
||||
0, ImgHeight / 2, /* pos */
|
||||
|
|
@ -55,7 +57,7 @@ LoadCompressedImage(void)
|
|||
|
||||
/* top right */
|
||||
for (i = 0; i < ImgHeight / 8; i++) {
|
||||
memcpy(&ImgDataTemp[i * ImgWidth], &ImgData[i * 2 * ImgWidth + ImgWidth], ImgWidth);
|
||||
memcpy(&ImgDataTemp[i * ImgWidth], &ImgData[half + i * 2 * ImgWidth + ImgWidth], ImgWidth);
|
||||
}
|
||||
glCompressedTexSubImage2DARB(Target, 0,
|
||||
ImgWidth / 2, ImgHeight / 2, /* pos */
|
||||
|
|
|
|||
|
|
@ -58,6 +58,10 @@ static void Display(void)
|
|||
printf("Depth value range: [%f, %f]\n", min, max);
|
||||
}
|
||||
|
||||
/* Draw the Z image as luminance above original rendering */
|
||||
glWindowPos2i(0, 100);
|
||||
glDrawPixels(100, 100, GL_LUMINANCE, depthType, depth);
|
||||
|
||||
if (TestPacking) {
|
||||
glPixelStorei(GL_PACK_ROW_LENGTH, 0);
|
||||
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
|
||||
|
|
@ -100,6 +104,7 @@ static void Display(void)
|
|||
glReadPixels(100, 0, 400, 400, GL_DEPTH_COMPONENT, GL_FLOAT, depth2);
|
||||
/* draw as luminance */
|
||||
glPixelZoom(1.0, 1.0);
|
||||
glWindowPos2i(100, 0);
|
||||
glDrawPixels(400, 400, GL_LUMINANCE, GL_FLOAT, depth2);
|
||||
|
||||
glutSwapBuffers();
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ if env['platform'] != 'winddk':
|
|||
'main/feedback.c',
|
||||
'main/ffvertex_prog.c',
|
||||
'main/fog.c',
|
||||
'main/formats.c',
|
||||
'main/framebuffer.c',
|
||||
'main/get.c',
|
||||
'main/getstring.c',
|
||||
|
|
@ -91,6 +92,7 @@ if env['platform'] != 'winddk':
|
|||
'main/texcompress_fxt1.c',
|
||||
'main/texenv.c',
|
||||
'main/texenvprogram.c',
|
||||
'main/texfetch.c',
|
||||
'main/texformat.c',
|
||||
'main/texgen.c',
|
||||
'main/texgetimage.c',
|
||||
|
|
|
|||
|
|
@ -115,7 +115,6 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
|
|||
driver->CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;
|
||||
driver->CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;
|
||||
driver->GetCompressedTexImage = _mesa_get_compressed_teximage;
|
||||
driver->CompressedTextureSize = _mesa_compressed_texture_size;
|
||||
driver->BindTexture = NULL;
|
||||
driver->NewTextureObject = _mesa_new_texture_object;
|
||||
driver->DeleteTexture = _mesa_delete_texture_object;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
#include "main/depth.h"
|
||||
#include "main/enable.h"
|
||||
#include "main/fbobject.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/image.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/matrix.h"
|
||||
|
|
@ -2083,7 +2084,7 @@ _mesa_meta_check_generate_mipmap_fallback(GLcontext *ctx, GLenum target,
|
|||
|
||||
srcLevel = texObj->BaseLevel;
|
||||
baseImage = _mesa_select_tex_image(ctx, texObj, target, srcLevel);
|
||||
if (!baseImage || baseImage->IsCompressed) {
|
||||
if (!baseImage || _mesa_is_format_compressed(baseImage->TexFormat)) {
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -2492,11 +2493,11 @@ copy_tex_image(GLcontext *ctx, GLuint dims, GLenum target, GLint level,
|
|||
return;
|
||||
}
|
||||
|
||||
if (texImage->TexFormat == &_mesa_null_texformat)
|
||||
texImage->TexFormat = ctx->Driver.ChooseTextureFormat(ctx,
|
||||
internalFormat,
|
||||
format,
|
||||
type);
|
||||
if (texImage->TexFormat == MESA_FORMAT_NONE)
|
||||
texImage->TexFormat = ctx->Driver.ChooseTextureFormat(ctx,
|
||||
internalFormat,
|
||||
format,
|
||||
type);
|
||||
|
||||
_mesa_unlock_texture(ctx, texObj); /* need to unlock first */
|
||||
|
||||
|
|
@ -2593,7 +2594,7 @@ copy_tex_sub_image(GLcontext *ctx, GLuint dims, GLenum target, GLint level,
|
|||
texObj = _mesa_select_tex_object(ctx, texUnit, target);
|
||||
texImage = _mesa_select_tex_image(ctx, texObj, target, level);
|
||||
|
||||
format = texImage->TexFormat->BaseFormat;
|
||||
format = _mesa_get_format_base_format(texImage->TexFormat);
|
||||
type = get_temp_image_type(ctx, format);
|
||||
bpp = _mesa_bytes_per_pixel(format, type);
|
||||
if (bpp <= 0) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/imports.h"
|
||||
|
|
@ -53,7 +54,7 @@ driDeleteRenderbuffer(struct gl_renderbuffer *rb)
|
|||
* \param pitch pixels per row
|
||||
*/
|
||||
driRenderbuffer *
|
||||
driNewRenderbuffer(GLenum format, GLvoid *addr,
|
||||
driNewRenderbuffer(gl_format format, GLvoid *addr,
|
||||
GLint cpp, GLint offset, GLint pitch,
|
||||
__DRIdrawablePrivate *dPriv)
|
||||
{
|
||||
|
|
@ -79,56 +80,47 @@ driNewRenderbuffer(GLenum format, GLvoid *addr,
|
|||
/* Make sure we're using a null-valued GetPointer routine */
|
||||
assert(drb->Base.GetPointer(NULL, &drb->Base, 0, 0) == NULL);
|
||||
|
||||
drb->Base.InternalFormat = format;
|
||||
|
||||
if (format == GL_RGBA || format == GL_RGB5 || format == GL_RGBA8) {
|
||||
/* Color */
|
||||
drb->Base._BaseFormat = GL_RGBA;
|
||||
switch (format) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
if (cpp == 2) {
|
||||
/* override format */
|
||||
format = MESA_FORMAT_RGB565;
|
||||
}
|
||||
drb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
if (format == GL_RGB5) {
|
||||
drb->Base.RedBits = 5;
|
||||
drb->Base.GreenBits = 6;
|
||||
drb->Base.BlueBits = 5;
|
||||
}
|
||||
else {
|
||||
drb->Base.RedBits =
|
||||
drb->Base.GreenBits =
|
||||
drb->Base.BlueBits =
|
||||
drb->Base.AlphaBits = 8;
|
||||
}
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT16) {
|
||||
break;
|
||||
case MESA_FORMAT_Z16:
|
||||
/* Depth */
|
||||
drb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
drb->Base.DataType = GL_UNSIGNED_INT;
|
||||
drb->Base.DepthBits = 16;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT24) {
|
||||
assert(cpp == 2);
|
||||
break;
|
||||
case MESA_FORMAT_Z32:
|
||||
/* Depth */
|
||||
drb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
drb->Base.DataType = GL_UNSIGNED_INT;
|
||||
drb->Base.DepthBits = 24;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT32) {
|
||||
/* Depth */
|
||||
drb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
drb->Base.DataType = GL_UNSIGNED_INT;
|
||||
drb->Base.DepthBits = 32;
|
||||
}
|
||||
else {
|
||||
assert(cpp == 4);
|
||||
break;
|
||||
case MESA_FORMAT_Z24_S8:
|
||||
drb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
assert(cpp == 4);
|
||||
break;
|
||||
case MESA_FORMAT_S8_Z24:
|
||||
drb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
assert(cpp == 4);
|
||||
break;
|
||||
case MESA_FORMAT_S8:
|
||||
/* Stencil */
|
||||
ASSERT(format == GL_STENCIL_INDEX8_EXT);
|
||||
drb->Base._BaseFormat = GL_STENCIL_INDEX;
|
||||
drb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
drb->Base.StencilBits = 8;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL, "Bad format 0x%x in driNewRenderbuffer", format);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* XXX if we were allocating a user-created renderbuffer, we'd have
|
||||
* to fill in the Red/Green/Blue/.../Bits values too.
|
||||
*/
|
||||
drb->Base.Format = format;
|
||||
|
||||
drb->Base.InternalFormat =
|
||||
drb->Base._BaseFormat = _mesa_get_format_base_format(format);
|
||||
|
||||
drb->Base.AllocStorage = driRenderbufferStorage;
|
||||
drb->Base.Delete = driDeleteRenderbuffer;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#define DRIRENDERBUFFER_H
|
||||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/formats.h"
|
||||
#include "dri_util.h"
|
||||
|
||||
|
||||
|
|
@ -63,7 +64,7 @@ typedef struct {
|
|||
|
||||
|
||||
extern driRenderbuffer *
|
||||
driNewRenderbuffer(GLenum format, GLvoid *addr,
|
||||
driNewRenderbuffer(gl_format format, GLvoid *addr,
|
||||
GLint cpp, GLint offset, GLint pitch,
|
||||
__DRIdrawablePrivate *dPriv);
|
||||
|
||||
|
|
|
|||
|
|
@ -42,14 +42,10 @@
|
|||
* application.
|
||||
*/
|
||||
|
||||
#include "texmem.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "main/simple_list.h"
|
||||
#include "texmem.h"
|
||||
|
||||
|
||||
static unsigned dummy_swap_counter;
|
||||
|
|
@ -1302,46 +1298,44 @@ driCalculateTextureFirstLastLevel( driTextureObject * t )
|
|||
|
||||
|
||||
/**
|
||||
* \name DRI texture formats. Pointers initialized to either the big- or
|
||||
* little-endian Mesa formats.
|
||||
* \name DRI texture formats. These vars are initialized to either the
|
||||
* big- or little-endian Mesa formats.
|
||||
*/
|
||||
/*@{*/
|
||||
const struct gl_texture_format *_dri_texformat_rgba8888 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_argb8888 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_rgb565 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_argb4444 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_argb1555 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_al88 = NULL;
|
||||
const struct gl_texture_format *_dri_texformat_a8 = &_mesa_texformat_a8;
|
||||
const struct gl_texture_format *_dri_texformat_ci8 = &_mesa_texformat_ci8;
|
||||
const struct gl_texture_format *_dri_texformat_i8 = &_mesa_texformat_i8;
|
||||
const struct gl_texture_format *_dri_texformat_l8 = &_mesa_texformat_l8;
|
||||
gl_format _dri_texformat_rgba8888 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_argb8888 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_rgb565 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_argb4444 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_argb1555 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_al88 = MESA_FORMAT_NONE;
|
||||
gl_format _dri_texformat_a8 = MESA_FORMAT_A8;
|
||||
gl_format _dri_texformat_ci8 = MESA_FORMAT_CI8;
|
||||
gl_format _dri_texformat_i8 = MESA_FORMAT_I8;
|
||||
gl_format _dri_texformat_l8 = MESA_FORMAT_L8;
|
||||
/*@}*/
|
||||
|
||||
|
||||
/**
|
||||
* Initialize little endian target, host byte order independent texture formats
|
||||
* Initialize _dri_texformat_* vars according to whether we're on
|
||||
* a big or little endian system.
|
||||
*/
|
||||
void
|
||||
driInitTextureFormats(void)
|
||||
{
|
||||
const GLuint ui = 1;
|
||||
const GLubyte littleEndian = *((const GLubyte *) &ui);
|
||||
|
||||
if (littleEndian) {
|
||||
_dri_texformat_rgba8888 = &_mesa_texformat_rgba8888;
|
||||
_dri_texformat_argb8888 = &_mesa_texformat_argb8888;
|
||||
_dri_texformat_rgb565 = &_mesa_texformat_rgb565;
|
||||
_dri_texformat_argb4444 = &_mesa_texformat_argb4444;
|
||||
_dri_texformat_argb1555 = &_mesa_texformat_argb1555;
|
||||
_dri_texformat_al88 = &_mesa_texformat_al88;
|
||||
if (_mesa_little_endian()) {
|
||||
_dri_texformat_rgba8888 = MESA_FORMAT_RGBA8888;
|
||||
_dri_texformat_argb8888 = MESA_FORMAT_ARGB8888;
|
||||
_dri_texformat_rgb565 = MESA_FORMAT_RGB565;
|
||||
_dri_texformat_argb4444 = MESA_FORMAT_ARGB4444;
|
||||
_dri_texformat_argb1555 = MESA_FORMAT_ARGB1555;
|
||||
_dri_texformat_al88 = MESA_FORMAT_AL88;
|
||||
}
|
||||
else {
|
||||
_dri_texformat_rgba8888 = &_mesa_texformat_rgba8888_rev;
|
||||
_dri_texformat_argb8888 = &_mesa_texformat_argb8888_rev;
|
||||
_dri_texformat_rgb565 = &_mesa_texformat_rgb565_rev;
|
||||
_dri_texformat_argb4444 = &_mesa_texformat_argb4444_rev;
|
||||
_dri_texformat_argb1555 = &_mesa_texformat_argb1555_rev;
|
||||
_dri_texformat_al88 = &_mesa_texformat_al88_rev;
|
||||
_dri_texformat_rgba8888 = MESA_FORMAT_RGBA8888_REV;
|
||||
_dri_texformat_argb8888 = MESA_FORMAT_ARGB8888_REV;
|
||||
_dri_texformat_rgb565 = MESA_FORMAT_RGB565_REV;
|
||||
_dri_texformat_argb4444 = MESA_FORMAT_ARGB4444_REV;
|
||||
_dri_texformat_argb1555 = MESA_FORMAT_ARGB1555_REV;
|
||||
_dri_texformat_al88 = MESA_FORMAT_AL88_REV;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#define DRI_TEXMEM_H
|
||||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/mm.h"
|
||||
#include "xf86drm.h"
|
||||
|
||||
|
|
@ -317,16 +318,16 @@ GLboolean driValidateTextureHeaps( driTexHeap * const * texture_heaps,
|
|||
extern void driCalculateTextureFirstLastLevel( driTextureObject * t );
|
||||
|
||||
|
||||
extern const struct gl_texture_format *_dri_texformat_rgba8888;
|
||||
extern const struct gl_texture_format *_dri_texformat_argb8888;
|
||||
extern const struct gl_texture_format *_dri_texformat_rgb565;
|
||||
extern const struct gl_texture_format *_dri_texformat_argb4444;
|
||||
extern const struct gl_texture_format *_dri_texformat_argb1555;
|
||||
extern const struct gl_texture_format *_dri_texformat_al88;
|
||||
extern const struct gl_texture_format *_dri_texformat_a8;
|
||||
extern const struct gl_texture_format *_dri_texformat_ci8;
|
||||
extern const struct gl_texture_format *_dri_texformat_i8;
|
||||
extern const struct gl_texture_format *_dri_texformat_l8;
|
||||
extern gl_format _dri_texformat_rgba8888;
|
||||
extern gl_format _dri_texformat_argb8888;
|
||||
extern gl_format _dri_texformat_rgb565;
|
||||
extern gl_format _dri_texformat_argb4444;
|
||||
extern gl_format _dri_texformat_argb1555;
|
||||
extern gl_format _dri_texformat_al88;
|
||||
extern gl_format _dri_texformat_a8;
|
||||
extern gl_format _dri_texformat_ci8;
|
||||
extern gl_format _dri_texformat_i8;
|
||||
extern gl_format _dri_texformat_l8;
|
||||
|
||||
extern void driInitTextureFormats( void );
|
||||
|
||||
|
|
|
|||
|
|
@ -437,7 +437,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
/* XXX double-check these parameters (bpp vs cpp, etc) */
|
||||
{
|
||||
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA,
|
||||
driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
driScrnPriv->pFB,
|
||||
driScrnPriv->fbBPP / 8,
|
||||
driScrnPriv->fbOrigin,
|
||||
|
|
@ -451,7 +451,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
/* XXX what are the correct origin/stride values? */
|
||||
GLvoid *backBuf = _mesa_malloc(driScrnPriv->fbStride
|
||||
* driScrnPriv->fbHeight);
|
||||
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA,
|
||||
driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
backBuf,
|
||||
driScrnPriv->fbBPP /8,
|
||||
driScrnPriv->fbOrigin,
|
||||
|
|
|
|||
|
|
@ -692,7 +692,7 @@ fbCreateScreenSurfaceMESA(_EGLDriver *drv, EGLDisplay dpy, EGLConfig cfg,
|
|||
|
||||
/* front color renderbuffer */
|
||||
{
|
||||
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, display->pFB,
|
||||
driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888, display->pFB,
|
||||
bytesPerPixel,
|
||||
origin, stride, NULL);
|
||||
fbSetSpanFunctions(drb, &vis);
|
||||
|
|
@ -703,7 +703,7 @@ fbCreateScreenSurfaceMESA(_EGLDriver *drv, EGLDisplay dpy, EGLConfig cfg,
|
|||
/* back color renderbuffer */
|
||||
if (vis.doubleBufferMode) {
|
||||
GLubyte *backBuf = _mesa_malloc(stride * height);
|
||||
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, backBuf,
|
||||
driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888, backBuf,
|
||||
bytesPerPixel,
|
||||
origin, stride, NULL);
|
||||
fbSetSpanFunctions(drb, &vis);
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL, bpp, offset, bogusPitch,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, bpp, offset, bogusPitch,
|
||||
driDrawPriv);
|
||||
ffbSetSpanFunctions(frontRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
|
||||
|
|
@ -355,7 +355,7 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL, bpp, offset, bogusPitch,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, bpp, offset, bogusPitch,
|
||||
driDrawPriv);
|
||||
ffbSetSpanFunctions(backRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
|
||||
|
|
@ -363,7 +363,7 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16, NULL, bpp, offset,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16, NULL, bpp, offset,
|
||||
bogusPitch, driDrawPriv);
|
||||
ffbSetDepthFunctions(depthRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
|
|
@ -371,7 +371,7 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT, NULL, bpp, offset,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8, NULL, bpp, offset,
|
||||
bogusPitch, driDrawPriv);
|
||||
ffbSetStencilFunctions(stencilRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
|
||||
|
|
|
|||
|
|
@ -1,21 +1,18 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "main/glheader.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/mm.h"
|
||||
#include "main/texstore.h"
|
||||
#include "teximage.h"
|
||||
#include "main/texformat.h"
|
||||
#include "texobj.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
|
||||
#include "main/mm.h"
|
||||
#include "gammacontext.h"
|
||||
#include "colormac.h"
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ i810CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
driScrnPriv->pFB,
|
||||
screen->cpp,
|
||||
/*screen->frontOffset*/0, screen->backPitch,
|
||||
|
|
@ -300,7 +300,7 @@ i810CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
screen->back.map,
|
||||
screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
|
|
@ -311,7 +311,7 @@ i810CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16,
|
||||
screen->depth.map,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->backPitch,
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/colormac.h"
|
||||
|
|
@ -440,7 +439,7 @@ static void i810DeleteTexture( GLcontext *ctx, struct gl_texture_object *tObj )
|
|||
* The i810 only supports 5 texture modes that are useful to Mesa. That
|
||||
* makes this routine pretty simple.
|
||||
*/
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
i810ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -458,9 +457,9 @@ i810ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
if ( ((format == GL_BGRA) && (type == GL_UNSIGNED_SHORT_1_5_5_5_REV))
|
||||
|| ((format == GL_RGBA) && (type == GL_UNSIGNED_SHORT_5_5_5_1))
|
||||
|| (internalFormat == GL_RGB5_A1) ) {
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
}
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
|
|
@ -472,7 +471,7 @@ i810ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
|
|
@ -502,21 +501,21 @@ i810ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_MESA ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unexpected texture format in %s\n", __FUNCTION__);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
|
||||
return NULL; /* never get here */
|
||||
return MESA_FORMAT_NONE; /* never get here */
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include "main/enums.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/mm.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "i810screen.h"
|
||||
#include "i810_dri.h"
|
||||
|
|
@ -92,44 +91,47 @@ static void i810UploadTexLevel( i810ContextPtr imesa,
|
|||
{
|
||||
const struct gl_texture_image *image = t->image[hwlevel].image;
|
||||
int j;
|
||||
GLuint texelBytes;
|
||||
|
||||
if (!image || !image->Data)
|
||||
return;
|
||||
|
||||
if (image->Width * image->TexFormat->TexelBytes == t->Pitch) {
|
||||
texelBytes = _mesa_get_format_bytes(image->TexFormat);
|
||||
|
||||
if (image->Width * texelBytes == t->Pitch) {
|
||||
GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[hwlevel].offset);
|
||||
GLubyte *src = (GLubyte *)image->Data;
|
||||
|
||||
memcpy( dst, src, t->Pitch * image->Height );
|
||||
}
|
||||
else switch (image->TexFormat->TexelBytes) {
|
||||
case 1:
|
||||
{
|
||||
GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[hwlevel].offset);
|
||||
GLubyte *src = (GLubyte *)image->Data;
|
||||
else {
|
||||
switch (texelBytes) {
|
||||
case 1:
|
||||
{
|
||||
GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[hwlevel].offset);
|
||||
GLubyte *src = (GLubyte *)image->Data;
|
||||
|
||||
for (j = 0 ; j < image->Height ; j++, dst += t->Pitch) {
|
||||
__memcpy(dst, src, image->Width );
|
||||
src += image->Width;
|
||||
}
|
||||
for (j = 0 ; j < image->Height ; j++, dst += t->Pitch) {
|
||||
__memcpy(dst, src, image->Width );
|
||||
src += image->Width;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
GLushort *dst = (GLushort *)(t->BufAddr + t->image[hwlevel].offset);
|
||||
GLushort *src = (GLushort *)image->Data;
|
||||
|
||||
for (j = 0 ; j < image->Height ; j++, dst += (t->Pitch/2)) {
|
||||
__memcpy(dst, src, image->Width * 2 );
|
||||
src += image->Width;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "%s: Not supported texel size %d\n",
|
||||
__FUNCTION__, texelBytes);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
GLushort *dst = (GLushort *)(t->BufAddr + t->image[hwlevel].offset);
|
||||
GLushort *src = (GLushort *)image->Data;
|
||||
|
||||
for (j = 0 ; j < image->Height ; j++, dst += (t->Pitch/2)) {
|
||||
__memcpy(dst, src, image->Width * 2 );
|
||||
src += image->Width;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "%s: Not supported texel size %d\n",
|
||||
__FUNCTION__, image->TexFormat->TexelBytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include "main/glheader.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/mm.h"
|
||||
|
|
@ -53,7 +52,7 @@ static void i810SetTexImages( i810ContextPtr imesa,
|
|||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
|
||||
t->texelBytes = 2;
|
||||
switch (baseImage->TexFormat->MesaFormat) {
|
||||
switch (baseImage->TexFormat) {
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
textureFormat = MI1_FMT_16BPP | MI1_PF_16BPP_ARGB1555;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include "main/mtypes.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/mm.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "intel_mipmap_tree.h"
|
||||
#include "intel_tex.h"
|
||||
|
|
@ -173,7 +172,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
|||
i830->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
|
||||
intelObj->mt->cpp;
|
||||
|
||||
format = translate_texture_format(firstImage->TexFormat->MesaFormat,
|
||||
format = translate_texture_format(firstImage->TexFormat,
|
||||
firstImage->InternalFormat);
|
||||
pitch = intelObj->mt->pitch * intelObj->mt->cpp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
**************************************************************************/
|
||||
|
||||
#include "glapi/glapi.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "i830_context.h"
|
||||
#include "i830_reg.h"
|
||||
|
|
@ -646,7 +645,7 @@ i830_state_draw_region(struct intel_context *intel,
|
|||
DSTORG_VERT_BIAS(0x8) | DEPTH_IS_Z); /* .5 */
|
||||
|
||||
if (irb != NULL) {
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
value |= DV_PF_8888;
|
||||
break;
|
||||
|
|
@ -661,7 +660,7 @@ i830_state_draw_region(struct intel_context *intel,
|
|||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Bad renderbuffer format: %d\n",
|
||||
irb->texformat->MesaFormat);
|
||||
irb->texformat);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "intel_mipmap_tree.h"
|
||||
#include "intel_tex.h"
|
||||
|
|
@ -37,7 +36,7 @@
|
|||
|
||||
|
||||
static GLuint
|
||||
translate_texture_format(GLuint mesa_format, GLuint internal_format,
|
||||
translate_texture_format(gl_format mesa_format, GLuint internal_format,
|
||||
GLenum DepthMode)
|
||||
{
|
||||
switch (mesa_format) {
|
||||
|
|
@ -184,7 +183,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
|||
i915->state.tex_offset[unit] = (dst_x + dst_y * intelObj->mt->pitch) *
|
||||
intelObj->mt->cpp;
|
||||
|
||||
format = translate_texture_format(firstImage->TexFormat->MesaFormat,
|
||||
format = translate_texture_format(firstImage->TexFormat,
|
||||
firstImage->InternalFormat,
|
||||
tObj->DepthMode);
|
||||
pitch = intelObj->mt->pitch * intelObj->mt->cpp;
|
||||
|
|
@ -270,8 +269,8 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
|
|||
|
||||
/* YUV conversion:
|
||||
*/
|
||||
if (firstImage->TexFormat->MesaFormat == MESA_FORMAT_YCBCR ||
|
||||
firstImage->TexFormat->MesaFormat == MESA_FORMAT_YCBCR_REV)
|
||||
if (firstImage->TexFormat == MESA_FORMAT_YCBCR ||
|
||||
firstImage->TexFormat == MESA_FORMAT_YCBCR_REV)
|
||||
state[I915_TEXREG_SS2] |= SS2_COLORSPACE_CONVERSION;
|
||||
|
||||
/* Shadow:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "tnl/t_context.h"
|
||||
#include "tnl/t_vertex.h"
|
||||
|
|
@ -588,7 +587,7 @@ i915_state_draw_region(struct intel_context *intel,
|
|||
DSTORG_VERT_BIAS(0x8) | /* .5 */
|
||||
LOD_PRECLAMP_OGL | TEX_DEFAULT_COLOR_OGL);
|
||||
if (irb != NULL) {
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
value |= DV_PF_8888;
|
||||
break;
|
||||
|
|
@ -603,7 +602,7 @@ i915_state_draw_region(struct intel_context *intel,
|
|||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Bad renderbuffer format: %d\n",
|
||||
irb->texformat->MesaFormat);
|
||||
irb->texformat);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
*/
|
||||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "main/texformat.h"
|
||||
#include "brw_context.h"
|
||||
#include "brw_util.h"
|
||||
#include "brw_wm.h"
|
||||
|
|
@ -288,7 +287,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
|
|||
const struct gl_texture_image *img = t->Image[0][t->BaseLevel];
|
||||
if (img->InternalFormat == GL_YCBCR_MESA) {
|
||||
key->yuvtex_mask |= 1 << i;
|
||||
if (img->TexFormat->MesaFormat == MESA_FORMAT_YCBCR)
|
||||
if (img->TexFormat == MESA_FORMAT_YCBCR)
|
||||
key->yuvtex_swap_mask |= 1 << i;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
|
||||
|
|
@ -70,7 +69,8 @@ static GLuint translate_tex_target( GLenum target )
|
|||
}
|
||||
|
||||
|
||||
static GLuint translate_tex_format( GLuint mesa_format, GLenum internal_format,
|
||||
static GLuint translate_tex_format( gl_format mesa_format,
|
||||
GLenum internal_format,
|
||||
GLenum depth_mode )
|
||||
{
|
||||
switch( mesa_format ) {
|
||||
|
|
@ -287,7 +287,7 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
|
|||
key.bo = NULL;
|
||||
key.offset = intelObj->textureOffset;
|
||||
} else {
|
||||
key.format = firstImage->TexFormat->MesaFormat;
|
||||
key.format = firstImage->TexFormat;
|
||||
key.internal_format = firstImage->InternalFormat;
|
||||
key.pitch = intelObj->mt->pitch;
|
||||
key.depth = firstImage->Depth;
|
||||
|
|
@ -527,7 +527,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
|
|||
region_bo = region->buffer;
|
||||
|
||||
key.surface_type = BRW_SURFACE_2D;
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
key.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
|
||||
break;
|
||||
|
|
@ -541,8 +541,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
|
|||
key.surface_format = BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Bad renderbuffer format: %d\n",
|
||||
irb->texformat->MesaFormat);
|
||||
_mesa_problem(ctx, "Bad renderbuffer format: %d\n", irb->texformat);
|
||||
}
|
||||
key.tiling = region->tiling;
|
||||
if (brw->intel.intelScreen->driScrnPriv->dri2.enabled) {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include "main/mtypes.h"
|
||||
#include "main/context.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/colormac.h"
|
||||
|
||||
#include "intel_blit.h"
|
||||
|
|
@ -497,7 +496,7 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
|
|||
CLAMPED_FLOAT_TO_UBYTE(clear[2], color[2]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(clear[3], color[3]);
|
||||
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
clearVal = intel->ClearColor8888;
|
||||
break;
|
||||
|
|
@ -514,7 +513,7 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask)
|
|||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Unexpected renderbuffer format: %d\n",
|
||||
irb->texformat->MesaFormat);
|
||||
irb->texformat);
|
||||
clearVal = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb)
|
|||
if (fb->_StencilBuffer && fb->_StencilBuffer->Wrapped) {
|
||||
irbStencil = intel_renderbuffer(fb->_StencilBuffer->Wrapped);
|
||||
if (irbStencil && irbStencil->region) {
|
||||
ASSERT(irbStencil->Base._ActualFormat == GL_DEPTH24_STENCIL8_EXT);
|
||||
ASSERT(irbStencil->Base.Format == MESA_FORMAT_S8_Z24);
|
||||
FALLBACK(intel, INTEL_FALLBACK_STENCIL_BUFFER, GL_FALSE);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -189,19 +189,7 @@ intelGetString(GLcontext * ctx, GLenum name)
|
|||
static unsigned
|
||||
intel_bits_per_pixel(const struct intel_renderbuffer *rb)
|
||||
{
|
||||
switch (rb->Base._ActualFormat) {
|
||||
case GL_RGB5:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
return 16;
|
||||
case GL_RGB8:
|
||||
case GL_RGBA8:
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
case GL_STENCIL_INDEX8_EXT:
|
||||
return 32;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return _mesa_get_format_bytes(rb->Base.Format) * 8;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/context.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texrender.h"
|
||||
#include "drivers/common/meta.h"
|
||||
|
||||
|
|
@ -115,12 +114,9 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
rb->_ActualFormat = GL_RGB5;
|
||||
rb->Format = MESA_FORMAT_RGB565;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 5;
|
||||
rb->GreenBits = 6;
|
||||
rb->BlueBits = 5;
|
||||
irb->texformat = &_mesa_texformat_rgb565;
|
||||
irb->texformat = MESA_FORMAT_RGB565;
|
||||
cpp = 2;
|
||||
break;
|
||||
case GL_RGB:
|
||||
|
|
@ -128,13 +124,9 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
rb->_ActualFormat = GL_RGB8;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 8;
|
||||
rb->GreenBits = 8;
|
||||
rb->BlueBits = 8;
|
||||
rb->AlphaBits = 0;
|
||||
irb->texformat = &_mesa_texformat_argb8888; /* XXX: Need xrgb8888 */
|
||||
irb->texformat = MESA_FORMAT_ARGB8888; /* XXX: Need xrgb8888 */
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_RGBA:
|
||||
|
|
@ -145,13 +137,9 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
rb->_ActualFormat = GL_RGBA8;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 8;
|
||||
rb->GreenBits = 8;
|
||||
rb->BlueBits = 8;
|
||||
rb->AlphaBits = 8;
|
||||
irb->texformat = &_mesa_texformat_argb8888;
|
||||
irb->texformat = MESA_FORMAT_ARGB8888;
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_STENCIL_INDEX:
|
||||
|
|
@ -160,36 +148,31 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_STENCIL_INDEX8_EXT:
|
||||
case GL_STENCIL_INDEX16_EXT:
|
||||
/* alloc a depth+stencil buffer */
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->Format = MESA_FORMAT_S8_Z24;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->StencilBits = 8;
|
||||
cpp = 4;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
rb->DepthBits = 16;
|
||||
cpp = 2;
|
||||
irb->texformat = &_mesa_texformat_z16;
|
||||
irb->texformat = MESA_FORMAT_Z16;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH_COMPONENT32:
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->Format = MESA_FORMAT_S8_Z24;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->DepthBits = 24;
|
||||
cpp = 4;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->Format = MESA_FORMAT_S8_Z24;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->DepthBits = 24;
|
||||
rb->StencilBits = 8;
|
||||
cpp = 4;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx,
|
||||
|
|
@ -197,6 +180,8 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
return GL_FALSE;
|
||||
}
|
||||
|
||||
rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
|
||||
|
||||
intelFlush(ctx);
|
||||
|
||||
/* free old region */
|
||||
|
|
@ -246,7 +231,7 @@ intel_alloc_window_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
ASSERT(rb->Name == 0);
|
||||
rb->Width = width;
|
||||
rb->Height = height;
|
||||
rb->_ActualFormat = internalFormat;
|
||||
rb->InternalFormat = internalFormat;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
|
@ -325,62 +310,46 @@ intel_create_renderbuffer(GLenum intFormat)
|
|||
|
||||
switch (intFormat) {
|
||||
case GL_RGB5:
|
||||
irb->Base._ActualFormat = GL_RGB5;
|
||||
irb->Base._BaseFormat = GL_RGBA;
|
||||
irb->Base.RedBits = 5;
|
||||
irb->Base.GreenBits = 6;
|
||||
irb->Base.BlueBits = 5;
|
||||
irb->Base.Format = MESA_FORMAT_RGB565;
|
||||
irb->Base._BaseFormat = GL_RGB;
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
irb->texformat = &_mesa_texformat_rgb565;
|
||||
irb->texformat = MESA_FORMAT_RGB565;
|
||||
break;
|
||||
case GL_RGB8:
|
||||
irb->Base._ActualFormat = GL_RGB8;
|
||||
irb->Base.Format = MESA_FORMAT_ARGB8888; /* XXX: NEED XRGB8888 */
|
||||
irb->Base._BaseFormat = GL_RGB;
|
||||
irb->Base.RedBits = 8;
|
||||
irb->Base.GreenBits = 8;
|
||||
irb->Base.BlueBits = 8;
|
||||
irb->Base.AlphaBits = 0;
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
irb->texformat = &_mesa_texformat_argb8888; /* XXX: Need xrgb8888 */
|
||||
irb->texformat = MESA_FORMAT_ARGB8888; /* XXX: NEED XRGB8888 */
|
||||
break;
|
||||
case GL_RGBA8:
|
||||
irb->Base._ActualFormat = GL_RGBA8;
|
||||
irb->Base.Format = MESA_FORMAT_ARGB8888;
|
||||
irb->Base._BaseFormat = GL_RGBA;
|
||||
irb->Base.RedBits = 8;
|
||||
irb->Base.GreenBits = 8;
|
||||
irb->Base.BlueBits = 8;
|
||||
irb->Base.AlphaBits = 8;
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
irb->texformat = &_mesa_texformat_argb8888;
|
||||
irb->texformat = MESA_FORMAT_ARGB8888;
|
||||
break;
|
||||
case GL_STENCIL_INDEX8_EXT:
|
||||
irb->Base._ActualFormat = GL_STENCIL_INDEX8_EXT;
|
||||
irb->Base.Format = MESA_FORMAT_S8_Z24;
|
||||
irb->Base._BaseFormat = GL_STENCIL_INDEX;
|
||||
irb->Base.StencilBits = 8;
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
irb->Base._ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
irb->Base.Format = MESA_FORMAT_Z16;
|
||||
irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
irb->Base.DepthBits = 16;
|
||||
irb->Base.DataType = GL_UNSIGNED_SHORT;
|
||||
irb->texformat = &_mesa_texformat_z16;
|
||||
irb->texformat = MESA_FORMAT_Z16;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
irb->Base.Format = MESA_FORMAT_S8_Z24;
|
||||
irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
irb->Base.DepthBits = 24;
|
||||
irb->Base.DataType = GL_UNSIGNED_INT;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
irb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
|
||||
irb->Base.DepthBits = 24;
|
||||
irb->Base.StencilBits = 8;
|
||||
irb->Base.Format = MESA_FORMAT_S8_Z24;
|
||||
irb->Base._BaseFormat = GL_DEPTH_STENCIL;
|
||||
irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
irb->texformat = &_mesa_texformat_s8_z24;
|
||||
irb->texformat = MESA_FORMAT_S8_Z24;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL,
|
||||
|
|
@ -467,58 +436,45 @@ intel_update_wrapper(GLcontext *ctx, struct intel_renderbuffer *irb,
|
|||
struct gl_texture_image *texImage)
|
||||
{
|
||||
irb->texformat = texImage->TexFormat;
|
||||
gl_format texFormat;
|
||||
|
||||
if (texImage->TexFormat == &_mesa_texformat_argb8888) {
|
||||
irb->Base._ActualFormat = GL_RGBA8;
|
||||
irb->Base._BaseFormat = GL_RGBA;
|
||||
if (texImage->TexFormat == MESA_FORMAT_ARGB8888) {
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to RGBA8 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_rgb565) {
|
||||
irb->Base._ActualFormat = GL_RGB5;
|
||||
irb->Base._BaseFormat = GL_RGB;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_RGB565) {
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to RGB5 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_argb1555) {
|
||||
irb->Base._ActualFormat = GL_RGB5_A1;
|
||||
irb->Base._BaseFormat = GL_RGBA;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_ARGB1555) {
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to ARGB1555 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_argb4444) {
|
||||
irb->Base._ActualFormat = GL_RGBA4;
|
||||
irb->Base._BaseFormat = GL_RGBA;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_ARGB4444) {
|
||||
irb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to ARGB4444 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_z16) {
|
||||
irb->Base._ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_Z16) {
|
||||
irb->Base.DataType = GL_UNSIGNED_SHORT;
|
||||
DBG("Render to DEPTH16 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
|
||||
irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
irb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_S8_Z24) {
|
||||
irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
DBG("Render to DEPTH_STENCIL texture OK\n");
|
||||
}
|
||||
else {
|
||||
DBG("Render to texture BAD FORMAT %d\n",
|
||||
texImage->TexFormat->MesaFormat);
|
||||
DBG("Render to texture BAD FORMAT %d\n", texImage->TexFormat);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
irb->Base.InternalFormat = irb->Base._ActualFormat;
|
||||
irb->Base.Format = texImage->TexFormat;
|
||||
|
||||
texFormat = texImage->TexFormat;
|
||||
|
||||
irb->Base.InternalFormat = texImage->InternalFormat;
|
||||
irb->Base._BaseFormat = _mesa_base_fbo_format(ctx, irb->Base.InternalFormat);
|
||||
irb->Base.Width = texImage->Width;
|
||||
irb->Base.Height = texImage->Height;
|
||||
irb->Base.RedBits = texImage->TexFormat->RedBits;
|
||||
irb->Base.GreenBits = texImage->TexFormat->GreenBits;
|
||||
irb->Base.BlueBits = texImage->TexFormat->BlueBits;
|
||||
irb->Base.AlphaBits = texImage->TexFormat->AlphaBits;
|
||||
irb->Base.DepthBits = texImage->TexFormat->DepthBits;
|
||||
irb->Base.StencilBits = texImage->TexFormat->StencilBits;
|
||||
|
||||
irb->Base.Delete = intel_delete_renderbuffer;
|
||||
irb->Base.AllocStorage = intel_nop_alloc_storage;
|
||||
|
|
@ -686,7 +642,7 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
|
|||
continue;
|
||||
}
|
||||
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
case MESA_FORMAT_RGB565:
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#ifndef INTEL_FBO_H
|
||||
#define INTEL_FBO_H
|
||||
|
||||
#include "main/formats.h"
|
||||
#include "intel_screen.h"
|
||||
|
||||
struct intel_context;
|
||||
|
|
@ -61,7 +62,7 @@ struct intel_renderbuffer
|
|||
struct gl_renderbuffer Base;
|
||||
struct intel_region *region;
|
||||
|
||||
const struct gl_texture_format *texformat;
|
||||
gl_format texformat;
|
||||
|
||||
GLuint vbl_pending; /**< vblank sequence number of pending flip */
|
||||
|
||||
|
|
|
|||
|
|
@ -318,6 +318,8 @@ intel_miptree_match_image(struct intel_mipmap_tree *mt,
|
|||
struct gl_texture_image *image,
|
||||
GLuint face, GLuint level)
|
||||
{
|
||||
GLboolean isCompressed = _mesa_is_format_compressed(image->TexFormat);
|
||||
|
||||
/* Images with borders are never pulled into mipmap trees.
|
||||
*/
|
||||
if (image->Border ||
|
||||
|
|
@ -327,12 +329,12 @@ intel_miptree_match_image(struct intel_mipmap_tree *mt,
|
|||
return GL_FALSE;
|
||||
|
||||
if (image->InternalFormat != mt->internal_format ||
|
||||
image->IsCompressed != mt->compressed)
|
||||
isCompressed != mt->compressed)
|
||||
return GL_FALSE;
|
||||
|
||||
if (!image->IsCompressed &&
|
||||
if (!isCompressed &&
|
||||
!mt->compressed &&
|
||||
image->TexFormat->TexelBytes != mt->cpp)
|
||||
_mesa_get_format_bytes(image->TexFormat) != mt->cpp)
|
||||
return GL_FALSE;
|
||||
|
||||
/* Test image dimensions against the base level image adjusted for
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "intel_buffers.h"
|
||||
#include "intel_fbo.h"
|
||||
|
|
@ -132,18 +131,6 @@ pwrite_8(struct intel_renderbuffer *irb, uint32_t offset, uint8_t val)
|
|||
dri_bo_subdata(irb->region->buffer, offset, 1, &val);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
z24s8_to_s8z24(uint32_t val)
|
||||
{
|
||||
return (val << 24) | (val >> 8);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
s8z24_to_z24s8(uint32_t val)
|
||||
{
|
||||
return (val >> 24) | (val << 8);
|
||||
}
|
||||
|
||||
static uint32_t no_tile_swizzle(struct intel_renderbuffer *irb,
|
||||
int x, int y)
|
||||
{
|
||||
|
|
@ -381,8 +368,8 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb,
|
|||
|
||||
/* z24s8 depthbuffer functions. */
|
||||
#define INTEL_VALUE_TYPE GLuint
|
||||
#define INTEL_WRITE_DEPTH(offset, d) pwrite_32(irb, offset, z24s8_to_s8z24(d))
|
||||
#define INTEL_READ_DEPTH(offset) s8z24_to_z24s8(pread_32(irb, offset))
|
||||
#define INTEL_WRITE_DEPTH(offset, d) pwrite_32(irb, offset, d)
|
||||
#define INTEL_READ_DEPTH(offset) pread_32(irb, offset)
|
||||
#define INTEL_TAG(name) name##_z24_s8
|
||||
#include "intel_depthtmp.h"
|
||||
|
||||
|
|
@ -621,7 +608,7 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
else
|
||||
tiling = I915_TILING_NONE;
|
||||
|
||||
switch (irb->texformat->MesaFormat) {
|
||||
switch (irb->texformat) {
|
||||
case MESA_FORMAT_RGB565:
|
||||
switch (tiling) {
|
||||
case I915_TILING_NONE:
|
||||
|
|
@ -665,7 +652,7 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
}
|
||||
break;
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
if (rb->AlphaBits == 0) { /* XXX: Need xRGB8888 Mesa format */
|
||||
if (0 /*rb->AlphaBits == 0*/) { /* XXX: Need xRGB8888 Mesa format */
|
||||
/* 8888 RGBx */
|
||||
switch (tiling) {
|
||||
case I915_TILING_NONE:
|
||||
|
|
@ -715,20 +702,7 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
* S8Z24 depth reads
|
||||
* S8Z24 stencil reads.
|
||||
*/
|
||||
if (rb->_ActualFormat == GL_DEPTH_COMPONENT24) {
|
||||
switch (tiling) {
|
||||
case I915_TILING_NONE:
|
||||
default:
|
||||
intelInitDepthPointers_z24(rb);
|
||||
break;
|
||||
case I915_TILING_X:
|
||||
intel_XTile_InitDepthPointers_z24(rb);
|
||||
break;
|
||||
case I915_TILING_Y:
|
||||
intel_YTile_InitDepthPointers_z24(rb);
|
||||
break;
|
||||
}
|
||||
} else if (rb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT) {
|
||||
if (rb->Format == MESA_FORMAT_S8_Z24) {
|
||||
switch (tiling) {
|
||||
case I915_TILING_NONE:
|
||||
default:
|
||||
|
|
@ -741,7 +715,7 @@ intel_set_span_functions(struct intel_context *intel,
|
|||
intel_YTile_InitDepthPointers_z24_s8(rb);
|
||||
break;
|
||||
}
|
||||
} else if (rb->_ActualFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
} else if (rb->Format == MESA_FORMAT_S8) {
|
||||
switch (tiling) {
|
||||
case I915_TILING_NONE:
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#define INTELTEX_INC
|
||||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/formats.h"
|
||||
#include "intel_context.h"
|
||||
#include "texmem.h"
|
||||
|
||||
|
|
@ -41,10 +42,8 @@ void intelInitTextureSubImageFuncs(struct dd_function_table *functions);
|
|||
|
||||
void intelInitTextureCopyImageFuncs(struct dd_function_table *functions);
|
||||
|
||||
const struct gl_texture_format *intelChooseTextureFormat(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type);
|
||||
gl_format intelChooseTextureFormat(GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type);
|
||||
|
||||
void intelSetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
||||
unsigned long long offset, GLint depth, GLuint pitch);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#include "intel_context.h"
|
||||
#include "intel_tex.h"
|
||||
#include "intel_chipset.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/enums.h"
|
||||
|
||||
|
||||
|
|
@ -16,7 +15,7 @@
|
|||
* these if we take the step of simply swizzling the colors
|
||||
* immediately after sampling...
|
||||
*/
|
||||
const struct gl_texture_format *
|
||||
gl_format
|
||||
intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type)
|
||||
{
|
||||
|
|
@ -34,48 +33,48 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_COMPRESSED_RGBA:
|
||||
if (format == GL_BGRA) {
|
||||
if (type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_INT_8_8_8_8_REV) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
else if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
}
|
||||
}
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_COMPRESSED_RGB:
|
||||
if (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
}
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
|
||||
case GL_RGB5:
|
||||
case GL_RGB4:
|
||||
case GL_R3_G3_B2:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
|
|
@ -83,7 +82,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return &_mesa_texformat_a8;
|
||||
return MESA_FORMAT_A8;
|
||||
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -92,7 +91,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
return &_mesa_texformat_l8;
|
||||
return MESA_FORMAT_L8;
|
||||
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
|
|
@ -103,7 +102,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
|
|
@ -111,41 +110,41 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_i8;
|
||||
return MESA_FORMAT_I8;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
return MESA_FORMAT_RGB_FXT1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgba_fxt1;
|
||||
return MESA_FORMAT_RGBA_FXT1;
|
||||
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH_COMPONENT32:
|
||||
#if 0
|
||||
return &_mesa_texformat_z16;
|
||||
return MESA_FORMAT_Z16;
|
||||
#else
|
||||
/* fall-through.
|
||||
* 16bpp depth texture can't be paired with a stencil buffer so
|
||||
|
|
@ -154,7 +153,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
#endif
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
return &_mesa_texformat_s8_z24;
|
||||
return MESA_FORMAT_S8_Z24;
|
||||
|
||||
#ifndef I915
|
||||
case GL_SRGB_EXT:
|
||||
|
|
@ -165,41 +164,41 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
|
|||
case GL_COMPRESSED_SRGB_ALPHA_EXT:
|
||||
case GL_COMPRESSED_SLUMINANCE_EXT:
|
||||
case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
|
||||
return &_mesa_texformat_sargb8;
|
||||
return MESA_FORMAT_SARGB8;
|
||||
case GL_SLUMINANCE_EXT:
|
||||
case GL_SLUMINANCE8_EXT:
|
||||
if (IS_G4X(intel->intelScreen->deviceID))
|
||||
return &_mesa_texformat_sl8;
|
||||
return MESA_FORMAT_SL8;
|
||||
else
|
||||
return &_mesa_texformat_sargb8;
|
||||
return MESA_FORMAT_SARGB8;
|
||||
case GL_SLUMINANCE_ALPHA_EXT:
|
||||
case GL_SLUMINANCE8_ALPHA8_EXT:
|
||||
if (IS_G4X(intel->intelScreen->deviceID))
|
||||
return &_mesa_texformat_sla8;
|
||||
return MESA_FORMAT_SLA8;
|
||||
else
|
||||
return &_mesa_texformat_sargb8;
|
||||
return MESA_FORMAT_SARGB8;
|
||||
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_srgb_dxt1;
|
||||
return MESA_FORMAT_SRGB_DXT1;
|
||||
|
||||
/* i915 could also do this */
|
||||
case GL_DUDV_ATI:
|
||||
case GL_DU8DV8_ATI:
|
||||
return &_mesa_texformat_dudv8;
|
||||
return MESA_FORMAT_DUDV8;
|
||||
case GL_RGBA_SNORM:
|
||||
case GL_RGBA8_SNORM:
|
||||
return &_mesa_texformat_signed_rgba8888_rev;
|
||||
return MESA_FORMAT_SIGNED_RGBA8888_REV;
|
||||
#endif
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unexpected texture format %s in %s\n",
|
||||
_mesa_lookup_enum_by_nr(internalFormat), __FUNCTION__);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
|
||||
return NULL; /* never get here */
|
||||
return MESA_FORMAT_NONE; /* never get here */
|
||||
}
|
||||
|
||||
int intel_compressed_num_bytes(GLuint mesaFormat)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#include "main/convolve.h"
|
||||
#include "main/context.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texgetimage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/texstore.h"
|
||||
|
|
@ -69,6 +69,7 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
|
|||
GLuint depth = intelImage->base.Depth;
|
||||
GLuint l2width, l2height, l2depth;
|
||||
GLuint i, comp_byte = 0;
|
||||
GLuint texelBytes;
|
||||
|
||||
DBG("%s\n", __FUNCTION__);
|
||||
|
||||
|
|
@ -123,8 +124,11 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
|
|||
}
|
||||
|
||||
assert(!intelObj->mt);
|
||||
if (intelImage->base.IsCompressed)
|
||||
comp_byte = intel_compressed_num_bytes(intelImage->base.TexFormat->MesaFormat);
|
||||
if (_mesa_is_format_compressed(intelImage->base.TexFormat))
|
||||
comp_byte = intel_compressed_num_bytes(intelImage->base.TexFormat);
|
||||
|
||||
texelBytes = _mesa_get_format_bytes(intelImage->base.TexFormat);
|
||||
|
||||
intelObj->mt = intel_miptree_create(intel,
|
||||
intelObj->base.Target,
|
||||
intelImage->base._BaseFormat,
|
||||
|
|
@ -134,7 +138,7 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel,
|
|||
width,
|
||||
height,
|
||||
depth,
|
||||
intelImage->base.TexFormat->TexelBytes,
|
||||
texelBytes,
|
||||
comp_byte,
|
||||
expect_accelerated_upload);
|
||||
|
||||
|
|
@ -166,7 +170,7 @@ target_to_face(GLenum target)
|
|||
static GLboolean
|
||||
check_pbo_format(GLint internalFormat,
|
||||
GLenum format, GLenum type,
|
||||
const struct gl_texture_format *mesa_format)
|
||||
gl_format mesa_format)
|
||||
{
|
||||
switch (internalFormat) {
|
||||
case 4:
|
||||
|
|
@ -174,12 +178,12 @@ check_pbo_format(GLint internalFormat,
|
|||
return (format == GL_BGRA &&
|
||||
(type == GL_UNSIGNED_BYTE ||
|
||||
type == GL_UNSIGNED_INT_8_8_8_8_REV) &&
|
||||
mesa_format == &_mesa_texformat_argb8888);
|
||||
mesa_format == MESA_FORMAT_ARGB8888);
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
return (format == GL_RGB &&
|
||||
type == GL_UNSIGNED_SHORT_5_6_5 &&
|
||||
mesa_format == &_mesa_texformat_rgb565);
|
||||
mesa_format == MESA_FORMAT_RGB565);
|
||||
case GL_YCBCR_MESA:
|
||||
return (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE);
|
||||
default:
|
||||
|
|
@ -325,22 +329,11 @@ intelTexImage(GLcontext * ctx,
|
|||
&postConvHeight);
|
||||
}
|
||||
|
||||
/* choose the texture format */
|
||||
texImage->TexFormat = intelChooseTextureFormat(ctx, internalFormat,
|
||||
format, type);
|
||||
|
||||
_mesa_set_fetch_functions(texImage, dims);
|
||||
|
||||
if (texImage->TexFormat->TexelBytes == 0) {
|
||||
/* must be a compressed format */
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
texelBytes = 0;
|
||||
texImage->IsCompressed = GL_TRUE;
|
||||
texImage->CompressedSize =
|
||||
ctx->Driver.CompressedTextureSize(ctx, texImage->Width,
|
||||
texImage->Height, texImage->Depth,
|
||||
texImage->TexFormat->MesaFormat);
|
||||
} else {
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
}
|
||||
else {
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
/* Minimum pitch of 32 bytes */
|
||||
if (postConvWidth * texelBytes < 32) {
|
||||
|
|
@ -398,10 +391,11 @@ intelTexImage(GLcontext * ctx,
|
|||
assert(intelImage->mt);
|
||||
} else if (intelImage->base.Border == 0) {
|
||||
int comp_byte = 0;
|
||||
|
||||
if (intelImage->base.IsCompressed) {
|
||||
GLuint texelBytes = _mesa_get_format_bytes(intelImage->base.TexFormat);
|
||||
GLenum baseFormat = _mesa_get_format_base_format(intelImage->base.TexFormat);
|
||||
if (_mesa_is_format_compressed(intelImage->base.TexFormat)) {
|
||||
comp_byte =
|
||||
intel_compressed_num_bytes(intelImage->base.TexFormat->MesaFormat);
|
||||
intel_compressed_num_bytes(intelImage->base.TexFormat);
|
||||
}
|
||||
|
||||
/* Didn't fit in the object miptree, but it's suitable for inclusion in
|
||||
|
|
@ -409,11 +403,11 @@ intelTexImage(GLcontext * ctx,
|
|||
* It'll get moved into the object miptree at validate time.
|
||||
*/
|
||||
intelImage->mt = intel_miptree_create(intel, target,
|
||||
intelImage->base.TexFormat->BaseFormat,
|
||||
baseFormat,
|
||||
internalFormat,
|
||||
level, level,
|
||||
width, height, depth,
|
||||
intelImage->base.TexFormat->TexelBytes,
|
||||
texelBytes,
|
||||
comp_byte, pixels == NULL);
|
||||
|
||||
}
|
||||
|
|
@ -495,10 +489,13 @@ intelTexImage(GLcontext * ctx,
|
|||
}
|
||||
else {
|
||||
/* Allocate regular memory and store the image there temporarily. */
|
||||
if (texImage->IsCompressed) {
|
||||
sizeInBytes = texImage->CompressedSize;
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
sizeInBytes = _mesa_format_image_size(texImage->TexFormat,
|
||||
texImage->Width,
|
||||
texImage->Height,
|
||||
texImage->Depth);
|
||||
dstRowStride =
|
||||
_mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width);
|
||||
_mesa_format_row_stride(texImage->TexFormat, width);
|
||||
assert(dims != 3);
|
||||
}
|
||||
else {
|
||||
|
|
@ -529,17 +526,20 @@ intelTexImage(GLcontext * ctx,
|
|||
pixels,
|
||||
srcRowStride,
|
||||
0, 0);
|
||||
} else
|
||||
}
|
||||
else {
|
||||
memcpy(texImage->Data, pixels, imageSize);
|
||||
} else if (!texImage->TexFormat->StoreImage(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, unpack)) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
}
|
||||
}
|
||||
else if (!_mesa_texstore(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, unpack)) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -789,9 +789,6 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
|
|||
|
||||
intelImage->face = target_to_face(target);
|
||||
intelImage->level = level;
|
||||
texImage->TexFormat = intelChooseTextureFormat(&intel->ctx, internalFormat,
|
||||
type, format);
|
||||
_mesa_set_fetch_functions(texImage, 2);
|
||||
texImage->RowStride = rb->region->pitch;
|
||||
intel_miptree_reference(&intelImage->mt, intelObj->mt);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,13 +85,13 @@ intelTexSubimage(GLcontext * ctx,
|
|||
&dstRowStride,
|
||||
texImage->ImageOffsets);
|
||||
else {
|
||||
if (texImage->IsCompressed) {
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
dstRowStride =
|
||||
_mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width);
|
||||
_mesa_format_row_stride(texImage->TexFormat, width);
|
||||
assert(dims != 3);
|
||||
}
|
||||
else {
|
||||
dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes;
|
||||
dstRowStride = texImage->RowStride * _mesa_get_format_bytes(texImage->TexFormat);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -105,18 +105,20 @@ intelTexSubimage(GLcontext * ctx,
|
|||
xoffset, yoffset / 4,
|
||||
(width + 3) & ~3, (height + 3) / 4,
|
||||
pixels, (width + 3) & ~3, 0, 0);
|
||||
} else
|
||||
}
|
||||
else {
|
||||
memcpy(texImage->Data, pixels, imageSize);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!texImage->TexFormat->StoreImage(ctx, dims, texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data,
|
||||
xoffset, yoffset, zoffset,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing)) {
|
||||
if (!_mesa_texstore(ctx, dims, texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data,
|
||||
xoffset, yoffset, zoffset,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing)) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "intelTexSubImage");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,11 +165,12 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
|
|||
intel_miptree_reference(&intelObj->mt, firstImage->mt);
|
||||
}
|
||||
|
||||
if (firstImage->base.IsCompressed) {
|
||||
comp_byte = intel_compressed_num_bytes(firstImage->base.TexFormat->MesaFormat);
|
||||
if (_mesa_is_format_compressed(firstImage->base.TexFormat)) {
|
||||
comp_byte = intel_compressed_num_bytes(firstImage->base.TexFormat);
|
||||
cpp = comp_byte;
|
||||
}
|
||||
else cpp = firstImage->base.TexFormat->TexelBytes;
|
||||
else
|
||||
cpp = _mesa_get_format_bytes(firstImage->base.TexFormat);
|
||||
|
||||
/* Check tree can hold all active levels. Check tree matches
|
||||
* target, imageFormat, etc.
|
||||
|
|
@ -189,7 +190,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
|
|||
intelObj->mt->height0 != firstImage->base.Height ||
|
||||
intelObj->mt->depth0 != firstImage->base.Depth ||
|
||||
intelObj->mt->cpp != cpp ||
|
||||
intelObj->mt->compressed != firstImage->base.IsCompressed)) {
|
||||
intelObj->mt->compressed != _mesa_is_format_compressed(firstImage->base.TexFormat))) {
|
||||
intel_miptree_release(intel, &intelObj->mt);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ mach64CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->frontOffset, screen->frontPitch,
|
||||
|
|
@ -325,7 +325,7 @@ mach64CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
|
|
@ -336,7 +336,7 @@ mach64CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16,
|
||||
NULL, screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
driDrawPriv);
|
||||
|
|
@ -346,7 +346,7 @@ mach64CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
else if (mesaVis->depthBits == 24) {
|
||||
/* XXX I don't think 24-bit Z is supported - so this isn't used */
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
|
|||
|
|
@ -157,15 +157,13 @@ void mach64DDInitSpanFuncs( GLcontext *ctx )
|
|||
void
|
||||
mach64SetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
if (drb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
mach64InitPointers_RGB565(&drb->Base);
|
||||
}
|
||||
else {
|
||||
mach64InitPointers_ARGB8888(&drb->Base);
|
||||
}
|
||||
if (drb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
mach64InitPointers_RGB565(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
mach64InitPointers_ARGB8888(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z16) {
|
||||
mach64InitDepthPointers_z16(&drb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@
|
|||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/imports.h"
|
||||
|
|
@ -138,7 +137,7 @@ mach64AllocTexObj( struct gl_texture_object *texObj )
|
|||
|
||||
|
||||
/* Called by the _mesa_store_teximage[123]d() functions. */
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -167,15 +166,15 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGBA2:
|
||||
case GL_COMPRESSED_RGBA:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
else
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
else
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
|
|
@ -183,9 +182,9 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGBA16:
|
||||
case GL_RGBA4:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
else
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
|
|
@ -198,9 +197,9 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGB16:
|
||||
case GL_COMPRESSED_RGB:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
else
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -210,9 +209,9 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888; /* inefficient but accurate */
|
||||
return MESA_FORMAT_ARGB8888; /* inefficient but accurate */
|
||||
else
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_INTENSITY4:
|
||||
case GL_INTENSITY:
|
||||
|
|
@ -221,9 +220,9 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
if (mmesa->mach64Screen->cpp == 4)
|
||||
return &_mesa_texformat_argb8888; /* inefficient but accurate */
|
||||
return MESA_FORMAT_ARGB8888; /* inefficient but accurate */
|
||||
else
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
|
|
@ -232,18 +231,18 @@ mach64ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_COLOR_INDEX8_EXT:
|
||||
case GL_COLOR_INDEX12_EXT:
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
return &_mesa_texformat_ci8;
|
||||
return MESA_FORMAT_CI8;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
default:
|
||||
_mesa_problem( ctx, "unexpected format in %s", __FUNCTION__ );
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@
|
|||
* Jose Fonseca <j_r_fonseca@yahoo.co.uk>
|
||||
*/
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/imports.h"
|
||||
|
||||
#include "mach64_context.h"
|
||||
#include "mach64_state.h"
|
||||
#include "mach64_ioctl.h"
|
||||
|
|
@ -38,12 +43,6 @@
|
|||
#include "mach64_tris.h"
|
||||
#include "mach64_tex.h"
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/imports.h"
|
||||
|
||||
|
||||
/* Destroy hardware state associated with texture `t'.
|
||||
*/
|
||||
|
|
@ -76,6 +75,7 @@ static void mach64UploadAGPSubImage( mach64ContextPtr mmesa,
|
|||
struct gl_texture_image *image;
|
||||
int texelsPerDword = 0;
|
||||
int dwords;
|
||||
GLuint texelBytes;
|
||||
|
||||
/* Ensure we have a valid texture to upload */
|
||||
if ( ( level < 0 ) || ( level > mmesa->glCtx->Const.MaxTextureLevels ) )
|
||||
|
|
@ -85,7 +85,9 @@ static void mach64UploadAGPSubImage( mach64ContextPtr mmesa,
|
|||
if ( !image )
|
||||
return;
|
||||
|
||||
switch ( image->TexFormat->TexelBytes ) {
|
||||
texelBytes = _mesa_get_format_bytes(image->TexFormat);
|
||||
|
||||
switch ( texelBytes ) {
|
||||
case 1: texelsPerDword = 4; break;
|
||||
case 2: texelsPerDword = 2; break;
|
||||
case 4: texelsPerDword = 1; break;
|
||||
|
|
@ -118,8 +120,8 @@ static void mach64UploadAGPSubImage( mach64ContextPtr mmesa,
|
|||
{
|
||||
CARD32 *dst = (CARD32 *)((char *)mach64Screen->agpTextures.map + t->base.memBlock->ofs);
|
||||
const GLubyte *src = (const GLubyte *) image->Data +
|
||||
(y * image->Width + x) * image->TexFormat->TexelBytes;
|
||||
const GLuint bytes = width * height * image->TexFormat->TexelBytes;
|
||||
(y * image->Width + x) * texelBytes;
|
||||
const GLuint bytes = width * height * texelBytes;
|
||||
memcpy(dst, src, bytes);
|
||||
}
|
||||
|
||||
|
|
@ -140,6 +142,7 @@ static void mach64UploadLocalSubImage( mach64ContextPtr mmesa,
|
|||
const int maxdwords = (MACH64_BUFFER_MAX_DWORDS - (MACH64_HOSTDATA_BLIT_OFFSET / 4));
|
||||
CARD32 pitch, offset;
|
||||
int i;
|
||||
GLuint texelBytes;
|
||||
|
||||
/* Ensure we have a valid texture to upload */
|
||||
if ( ( level < 0 ) || ( level > mmesa->glCtx->Const.MaxTextureLevels ) )
|
||||
|
|
@ -149,7 +152,9 @@ static void mach64UploadLocalSubImage( mach64ContextPtr mmesa,
|
|||
if ( !image )
|
||||
return;
|
||||
|
||||
switch ( image->TexFormat->TexelBytes ) {
|
||||
texelBytes = _mesa_get_format_bytes(image->TexFormat);
|
||||
|
||||
switch ( texelBytes ) {
|
||||
case 1: texelsPerDword = 4; break;
|
||||
case 2: texelsPerDword = 2; break;
|
||||
case 4: texelsPerDword = 1; break;
|
||||
|
|
@ -259,7 +264,7 @@ static void mach64UploadLocalSubImage( mach64ContextPtr mmesa,
|
|||
|
||||
{
|
||||
const GLubyte *src = (const GLubyte *) image->Data +
|
||||
(y * image->Width + x) * image->TexFormat->TexelBytes;
|
||||
(y * image->Width + x) * texelBytes;
|
||||
|
||||
mach64FireBlitLocked( mmesa, (void *)src, offset, pitch, format,
|
||||
x, y, width, height );
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "mach64_context.h"
|
||||
#include "mach64_ioctl.h"
|
||||
|
|
@ -55,7 +54,7 @@ static void mach64SetTexImages( mach64ContextPtr mmesa,
|
|||
if ( MACH64_DEBUG & DEBUG_VERBOSE_API )
|
||||
fprintf( stderr, "%s( %p )\n", __FUNCTION__, tObj );
|
||||
|
||||
switch (baseImage->TexFormat->MesaFormat) {
|
||||
switch (baseImage->TexFormat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
t->textureFormat = MACH64_DATATYPE_ARGB8888;
|
||||
break;
|
||||
|
|
@ -89,7 +88,7 @@ static void mach64SetTexImages( mach64ContextPtr mmesa,
|
|||
|
||||
totalSize = ( baseImage->Height *
|
||||
baseImage->Width *
|
||||
baseImage->TexFormat->TexelBytes );
|
||||
_mesa_get_format_bytes(baseImage->TexFormat) );
|
||||
|
||||
totalSize = (totalSize + 31) & ~31;
|
||||
|
||||
|
|
|
|||
|
|
@ -27,22 +27,19 @@
|
|||
* Keith Whitwell <keithw@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "main/context.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mm.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/simple_list.h"
|
||||
|
||||
#include "mgacontext.h"
|
||||
#include "mgatex.h"
|
||||
#include "mgaregs.h"
|
||||
#include "mgatris.h"
|
||||
#include "mgaioctl.h"
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/imports.h"
|
||||
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#define MGA_USE_TABLE_FOR_FORMAT
|
||||
#ifdef MGA_USE_TABLE_FOR_FORMAT
|
||||
#define TMC_nr_tformat (MESA_FORMAT_YCBCR_REV + 1)
|
||||
|
|
@ -94,14 +91,14 @@ mgaSetTexImages( mgaContextPtr mmesa,
|
|||
return;
|
||||
}
|
||||
#else
|
||||
if ( (baseImage->TexFormat->MesaFormat >= TMC_nr_tformat)
|
||||
|| (TMC_tformat[ baseImage->TexFormat->MesaFormat ] == 0) )
|
||||
if ( (baseImage->TexFormat >= TMC_nr_tformat)
|
||||
|| (TMC_tformat[ baseImage->TexFormat ] == 0) )
|
||||
{
|
||||
_mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__);
|
||||
return;
|
||||
}
|
||||
|
||||
txformat = TMC_tformat[ baseImage->TexFormat->MesaFormat ];
|
||||
txformat = TMC_tformat[ baseImage->TexFormat ];
|
||||
|
||||
#endif /* MGA_USE_TABLE_FOR_FORMAT */
|
||||
|
||||
|
|
@ -131,7 +128,7 @@ mgaSetTexImages( mgaContextPtr mmesa,
|
|||
break;
|
||||
|
||||
size = texImage->Width * texImage->Height *
|
||||
baseImage->TexFormat->TexelBytes;
|
||||
_mesa_get_format_bytes(baseImage->TexFormat);
|
||||
|
||||
t->offsets[i] = totalSize;
|
||||
t->base.dirty_images[0] |= (1<<i);
|
||||
|
|
|
|||
|
|
@ -723,7 +723,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->frontOffset, screen->frontPitch,
|
||||
|
|
@ -734,7 +734,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
|
|
@ -745,7 +745,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -757,7 +757,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
/* XXX is this right? */
|
||||
if (mesaVis->stencilBits) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -767,7 +767,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT32,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z32,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -778,7 +778,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 32) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT32,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z32,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -789,7 +789,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
|
|||
|
|
@ -206,24 +206,22 @@ void mgaDDInitSpanFuncs( GLcontext *ctx )
|
|||
void
|
||||
mgaSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
if (drb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
mgaInitPointers_565(&drb->Base);
|
||||
}
|
||||
else {
|
||||
mgaInitPointers_8888(&drb->Base);
|
||||
}
|
||||
if (drb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
mgaInitPointers_565(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
mgaInitPointers_8888(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z16) {
|
||||
mgaInitDepthPointers_z16(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z24_S8) {
|
||||
mgaInitDepthPointers_z24_s8(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT32) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z32) {
|
||||
mgaInitDepthPointers_z32(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_S8) {
|
||||
mgaInitStencilPointers_z24_s8(&drb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,23 +27,22 @@
|
|||
|
||||
#include "main/glheader.h"
|
||||
#include "main/mm.h"
|
||||
#include "mgacontext.h"
|
||||
#include "mgatex.h"
|
||||
#include "mgaregs.h"
|
||||
#include "mgatris.h"
|
||||
#include "mgaioctl.h"
|
||||
|
||||
#include "main/colormac.h"
|
||||
#include "main/context.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
||||
#include "mgacontext.h"
|
||||
#include "mgatex.h"
|
||||
#include "mgaregs.h"
|
||||
#include "mgatris.h"
|
||||
#include "mgaioctl.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
|
||||
#include "xmlpool.h"
|
||||
|
|
@ -164,7 +163,7 @@ static void mgaSetTexBorderColor(mgaTextureObjectPtr t, const GLfloat color[4])
|
|||
}
|
||||
|
||||
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -182,15 +181,15 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_INT_10_10_10_2:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
|
||||
case 3:
|
||||
|
|
@ -199,15 +198,15 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
}
|
||||
|
||||
case GL_RGBA8:
|
||||
|
|
@ -215,25 +214,25 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return !force16bpt ?
|
||||
&_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_RGB5:
|
||||
case GL_RGB4:
|
||||
case GL_R3_G3_B2:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
|
|
@ -242,7 +241,7 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
/* FIXME: This will report incorrect component sizes... */
|
||||
return MGA_IS_G400(mmesa) ? &_mesa_texformat_al88 : &_mesa_texformat_argb4444;
|
||||
return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -252,7 +251,7 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
/* FIXME: This will report incorrect component sizes... */
|
||||
return MGA_IS_G400(mmesa) ? &_mesa_texformat_al88 : &_mesa_texformat_rgb565;
|
||||
return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_RGB565;
|
||||
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
|
|
@ -264,7 +263,7 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
/* FIXME: This will report incorrect component sizes... */
|
||||
return MGA_IS_G400(mmesa) ? &_mesa_texformat_al88 : &_mesa_texformat_argb4444;
|
||||
return MGA_IS_G400(mmesa) ? MESA_FORMAT_AL88 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
|
|
@ -273,15 +272,15 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
/* FIXME: This will report incorrect component sizes... */
|
||||
return MGA_IS_G400(mmesa) ? &_mesa_texformat_i8 : &_mesa_texformat_argb4444;
|
||||
return MGA_IS_G400(mmesa) ? MESA_FORMAT_I8 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (MGA_IS_G400(mmesa) &&
|
||||
(type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||
type == GL_UNSIGNED_BYTE))
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
|
|
@ -290,14 +289,14 @@ mgaChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_COLOR_INDEX8_EXT:
|
||||
case GL_COLOR_INDEX12_EXT:
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
return &_mesa_texformat_ci8;
|
||||
return MESA_FORMAT_CI8;
|
||||
|
||||
default:
|
||||
_mesa_problem( ctx, "unexpected texture format in %s", __FUNCTION__ );
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
|
||||
return NULL; /* never get here */
|
||||
return MESA_FORMAT_NONE; /* never get here */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ static void mgaUploadSubImage( mgaContextPtr mmesa,
|
|||
* directly used by the hardware for texturing.
|
||||
*/
|
||||
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
length = texImage->Width * texImage->Height * texelBytes;
|
||||
if ( t->base.heap->heapId == MGA_CARD_HEAP ) {
|
||||
unsigned tex_offset = 0;
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->frontOffset, screen->frontPitch,
|
||||
|
|
@ -293,7 +293,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
|
|
@ -304,7 +304,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -314,7 +314,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8_Z24,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
@ -325,7 +325,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8,
|
||||
NULL,
|
||||
screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
|
|
|
|||
|
|
@ -433,21 +433,19 @@ void r128DDInitSpanFuncs( GLcontext *ctx )
|
|||
void
|
||||
r128SetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
|
||||
{
|
||||
if (drb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
r128InitPointers_RGB565(&drb->Base);
|
||||
}
|
||||
else {
|
||||
r128InitPointers_ARGB8888(&drb->Base);
|
||||
}
|
||||
if (drb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
r128InitPointers_RGB565(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
r128InitPointers_ARGB8888(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z16) {
|
||||
r128InitDepthPointers_z16(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_S8_Z24) {
|
||||
r128InitDepthPointers_z24_s8(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_S8) {
|
||||
radeonInitStencilPointers_z24_s8(&drb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/imports.h"
|
||||
|
|
@ -178,7 +177,7 @@ static r128TexObjPtr r128AllocTexObj( struct gl_texture_object *texObj )
|
|||
|
||||
|
||||
/* Called by the _mesa_store_teximage[123]d() functions. */
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
r128ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -282,13 +281,13 @@ r128ChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
default:
|
||||
_mesa_problem( ctx, "unexpected format in %s", __FUNCTION__ );
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/imports.h"
|
||||
|
||||
#define TEX_0 1
|
||||
|
|
@ -95,7 +94,7 @@ static void uploadSubImage( r128ContextPtr rmesa, r128TexObjPtr t,
|
|||
if ( !image )
|
||||
return;
|
||||
|
||||
switch ( image->TexFormat->TexelBytes ) {
|
||||
switch ( _mesa_get_format_bytes(image->TexFormat) ) {
|
||||
case 1: texelsPerDword = 4; break;
|
||||
case 2: texelsPerDword = 2; break;
|
||||
case 4: texelsPerDword = 1; break;
|
||||
|
|
@ -215,9 +214,11 @@ static void uploadSubImage( r128ContextPtr rmesa, r128TexObjPtr t,
|
|||
|
||||
/* Copy the next chunck of the texture image into the blit buffer */
|
||||
{
|
||||
const GLuint texelBytes =
|
||||
_mesa_get_format_bytes(image->TexFormat);
|
||||
const GLubyte *src = (const GLubyte *) image->Data +
|
||||
(y * image->Width + x) * image->TexFormat->TexelBytes;
|
||||
const GLuint bytes = width * height * image->TexFormat->TexelBytes;
|
||||
(y * image->Width + x) * texelBytes;
|
||||
const GLuint bytes = width * height * texelBytes;
|
||||
memcpy(dst, src, bytes);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "r128_context.h"
|
||||
#include "r128_state.h"
|
||||
|
|
@ -61,7 +60,7 @@ static void r128SetTexImages( r128ContextPtr rmesa,
|
|||
if ( R128_DEBUG & DEBUG_VERBOSE_API )
|
||||
fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *) tObj );
|
||||
|
||||
switch (baseImage->TexFormat->MesaFormat) {
|
||||
switch (baseImage->TexFormat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
case MESA_FORMAT_ARGB8888_REV:
|
||||
t->textureFormat = R128_DATATYPE_ARGB8888;
|
||||
|
|
@ -123,7 +122,7 @@ static void r128SetTexImages( r128ContextPtr rmesa,
|
|||
|
||||
totalSize += (tObj->Image[0][i]->Height *
|
||||
tObj->Image[0][i]->Width *
|
||||
tObj->Image[0][i]->TexFormat->TexelBytes);
|
||||
_mesa_get_format_bytes(tObj->Image[0][i]->TexFormat));
|
||||
|
||||
/* Offsets must be 32-byte aligned for host data blits and tiling */
|
||||
totalSize = (totalSize + 31) & ~31;
|
||||
|
|
|
|||
|
|
@ -529,16 +529,18 @@ static void ctx_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom)
|
|||
atom->cmd[CTX_RB3D_CNTL] &= ~(0xf << 10);
|
||||
if (rrb->cpp == 4)
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB8888;
|
||||
else switch (rrb->base._ActualFormat) {
|
||||
case GL_RGB5:
|
||||
else switch (rrb->base.Format) {
|
||||
case MESA_FORMAT_RGB565:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_RGB565;
|
||||
break;
|
||||
case GL_RGBA4:
|
||||
case MESA_FORMAT_ARGB4444:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB4444;
|
||||
break;
|
||||
case GL_RGB5_A1:
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB1555;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "Unexpected format in ctx_emit_cs");
|
||||
}
|
||||
|
||||
cbpitch = (rrb->pitch / rrb->cpp);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/enums.h"
|
||||
#include "main/image.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/enums.h"
|
||||
|
|
@ -836,9 +835,7 @@ void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
|
|||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||
rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
|
||||
texImage->RowStride = rb->pitch / rb->cpp;
|
||||
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||
internalFormat,
|
||||
type, format, 0);
|
||||
|
||||
rImage->bo = rb->bo;
|
||||
radeon_bo_ref(rImage->bo);
|
||||
t->bo = rb->bo;
|
||||
|
|
@ -1437,11 +1434,11 @@ static void setup_hardware_state(r200ContextPtr rmesa, radeonTexObj *t)
|
|||
log2Width = firstImage->WidthLog2;
|
||||
log2Height = firstImage->HeightLog2;
|
||||
log2Depth = firstImage->DepthLog2;
|
||||
texelBytes = firstImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(firstImage->TexFormat);
|
||||
|
||||
|
||||
if (!t->image_override) {
|
||||
if (VALID_FORMAT(firstImage->TexFormat->MesaFormat)) {
|
||||
if (VALID_FORMAT(firstImage->TexFormat)) {
|
||||
const struct tx_table *table = _mesa_little_endian() ? tx_table_le :
|
||||
tx_table_be;
|
||||
|
||||
|
|
@ -1449,8 +1446,8 @@ static void setup_hardware_state(r200ContextPtr rmesa, radeonTexObj *t)
|
|||
R200_TXFORMAT_ALPHA_IN_MAP);
|
||||
t->pp_txfilter &= ~R200_YUV_TO_RGB;
|
||||
|
||||
t->pp_txformat |= table[ firstImage->TexFormat->MesaFormat ].format;
|
||||
t->pp_txfilter |= table[ firstImage->TexFormat->MesaFormat ].filter;
|
||||
t->pp_txformat |= table[ firstImage->TexFormat ].format;
|
||||
t->pp_txfilter |= table[ firstImage->TexFormat ].filter;
|
||||
} else {
|
||||
_mesa_problem(NULL, "unexpected texture format in %s",
|
||||
__FUNCTION__);
|
||||
|
|
@ -1504,7 +1501,7 @@ static void setup_hardware_state(r200ContextPtr rmesa, radeonTexObj *t)
|
|||
| ((firstImage->Height - 1) << R200_PP_TX_HEIGHTMASK_SHIFT));
|
||||
|
||||
if ( !t->image_override ) {
|
||||
if (firstImage->IsCompressed)
|
||||
if (_mesa_is_format_compressed(firstImage->TexFormat))
|
||||
t->pp_txpitch = (firstImage->Width + 63) & ~(63);
|
||||
else
|
||||
t->pp_txpitch = ((firstImage->Width * texelBytes) + 63) & ~(63);
|
||||
|
|
|
|||
|
|
@ -279,16 +279,18 @@ static void emit_cb_offset(GLcontext *ctx, struct radeon_state_atom * atom)
|
|||
cbpitch = (rrb->pitch / rrb->cpp);
|
||||
if (rrb->cpp == 4)
|
||||
cbpitch |= R300_COLOR_FORMAT_ARGB8888;
|
||||
else switch (rrb->base._ActualFormat) {
|
||||
case GL_RGB5:
|
||||
else switch (rrb->base.Format) {
|
||||
case MESA_FORMAT_RGB565:
|
||||
cbpitch |= R300_COLOR_FORMAT_RGB565;
|
||||
break;
|
||||
case GL_RGBA4:
|
||||
case MESA_FORMAT_ARGB4444:
|
||||
cbpitch |= R300_COLOR_FORMAT_ARGB4444;
|
||||
break;
|
||||
case GL_RGB5_A1:
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
cbpitch |= R300_COLOR_FORMAT_ARGB1555;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "unexpected format in emit_cb_offset()");
|
||||
}
|
||||
|
||||
if (rrb->bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/framebuffer.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/api_arrayelt.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/image.h"
|
||||
#include "main/mipmap.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
@ -196,6 +195,7 @@ static void r300TexParameter(GLcontext * ctx, GLenum target,
|
|||
GLenum pname, const GLfloat * params)
|
||||
{
|
||||
radeonTexObj* t = radeon_tex_obj(texObj);
|
||||
GLenum texBaseFormat;
|
||||
|
||||
if (RADEON_DEBUG & (RADEON_STATE | RADEON_TEXTURE)) {
|
||||
fprintf(stderr, "%s( %s )\n", __FUNCTION__,
|
||||
|
|
@ -238,8 +238,10 @@ static void r300TexParameter(GLcontext * ctx, GLenum target,
|
|||
case GL_DEPTH_TEXTURE_MODE:
|
||||
if (!texObj->Image[0][texObj->BaseLevel])
|
||||
return;
|
||||
if (texObj->Image[0][texObj->BaseLevel]->TexFormat->BaseFormat
|
||||
== GL_DEPTH_COMPONENT) {
|
||||
texBaseFormat = texObj->Image[0][texObj->BaseLevel]->_BaseFormat;
|
||||
|
||||
if (texBaseFormat == GL_DEPTH_COMPONENT ||
|
||||
texBaseFormat == GL_DEPTH_STENCIL) {
|
||||
r300SetDepthTexMode(texObj);
|
||||
break;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/enums.h"
|
||||
|
|
@ -156,11 +155,11 @@ void r300SetDepthTexMode(struct gl_texture_object *tObj)
|
|||
|
||||
t = radeon_tex_obj(tObj);
|
||||
|
||||
switch (tObj->Image[0][tObj->BaseLevel]->TexFormat->MesaFormat) {
|
||||
switch (tObj->Image[0][tObj->BaseLevel]->TexFormat) {
|
||||
case MESA_FORMAT_Z16:
|
||||
format = formats[0];
|
||||
break;
|
||||
case MESA_FORMAT_Z24_S8:
|
||||
case MESA_FORMAT_S8_Z24:
|
||||
format = formats[1];
|
||||
break;
|
||||
case MESA_FORMAT_Z32:
|
||||
|
|
@ -208,14 +207,14 @@ static void setup_hardware_state(r300ContextPtr rmesa, radeonTexObj *t)
|
|||
firstImage = t->base.Image[0][firstlevel];
|
||||
|
||||
if (!t->image_override
|
||||
&& VALID_FORMAT(firstImage->TexFormat->MesaFormat)) {
|
||||
if (firstImage->TexFormat->BaseFormat == GL_DEPTH_COMPONENT) {
|
||||
&& VALID_FORMAT(firstImage->TexFormat)) {
|
||||
if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
|
||||
r300SetDepthTexMode(&t->base);
|
||||
} else {
|
||||
t->pp_txformat = tx_table[firstImage->TexFormat->MesaFormat].format;
|
||||
t->pp_txformat = tx_table[firstImage->TexFormat].format;
|
||||
}
|
||||
|
||||
t->pp_txfilter |= tx_table[firstImage->TexFormat->MesaFormat].filter;
|
||||
t->pp_txfilter |= tx_table[firstImage->TexFormat].filter;
|
||||
} else if (!t->image_override) {
|
||||
_mesa_problem(NULL, "unexpected texture format in %s",
|
||||
__FUNCTION__);
|
||||
|
|
@ -449,9 +448,6 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
|
|||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||
rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
|
||||
texImage->RowStride = rb->pitch / rb->cpp;
|
||||
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||
internalFormat,
|
||||
type, format, 0);
|
||||
rImage->bo = rb->bo;
|
||||
radeon_bo_ref(rImage->bo);
|
||||
t->bo = rb->bo;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/image.h"
|
||||
#include "main/mipmap.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
@ -286,6 +285,7 @@ static void r600TexParameter(GLcontext * ctx, GLenum target,
|
|||
GLenum pname, const GLfloat * params)
|
||||
{
|
||||
radeonTexObj* t = radeon_tex_obj(texObj);
|
||||
GLenum baseFormat;
|
||||
|
||||
radeon_print(RADEON_STATE | RADEON_TEXTURE, RADEON_VERBOSE,
|
||||
"%s( %s )\n", __FUNCTION__,
|
||||
|
|
@ -327,8 +327,9 @@ static void r600TexParameter(GLcontext * ctx, GLenum target,
|
|||
case GL_DEPTH_TEXTURE_MODE:
|
||||
if (!texObj->Image[0][texObj->BaseLevel])
|
||||
return;
|
||||
if (texObj->Image[0][texObj->BaseLevel]->TexFormat->BaseFormat
|
||||
== GL_DEPTH_COMPONENT) {
|
||||
baseFormat = texObj->Image[0][texObj->BaseLevel]->_BaseFormat;
|
||||
if (baseFormat == GL_DEPTH_COMPONENT ||
|
||||
baseFormat == GL_DEPTH_STENCIL) {
|
||||
r600SetDepthTexMode(texObj);
|
||||
break;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/enums.h"
|
||||
|
|
@ -78,7 +77,7 @@ void r600UpdateTextureState(GLcontext * ctx)
|
|||
}
|
||||
}
|
||||
|
||||
static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, GLuint mesa_format)
|
||||
static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa_format)
|
||||
{
|
||||
radeonTexObj *t = radeon_tex_obj(tObj);
|
||||
|
||||
|
|
@ -480,14 +479,14 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, GLuint mesa_fo
|
|||
SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
|
||||
break;
|
||||
case MESA_FORMAT_Z16:
|
||||
case MESA_FORMAT_Z24_S8:
|
||||
case MESA_FORMAT_S8_Z24:
|
||||
case MESA_FORMAT_Z32:
|
||||
switch (mesa_format) {
|
||||
case MESA_FORMAT_Z16:
|
||||
SETfield(t->SQ_TEX_RESOURCE1, FMT_16,
|
||||
SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
|
||||
break;
|
||||
case MESA_FORMAT_Z24_S8:
|
||||
case MESA_FORMAT_S8_Z24:
|
||||
SETfield(t->SQ_TEX_RESOURCE1, FMT_24_8,
|
||||
SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
|
||||
break;
|
||||
|
|
@ -591,7 +590,7 @@ void r600SetDepthTexMode(struct gl_texture_object *tObj)
|
|||
|
||||
t = radeon_tex_obj(tObj);
|
||||
|
||||
r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat->MesaFormat);
|
||||
r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -616,7 +615,7 @@ static void setup_hardware_state(context_t *rmesa, struct gl_texture_object *tex
|
|||
firstImage = t->base.Image[0][firstlevel];
|
||||
|
||||
if (!t->image_override) {
|
||||
if (!r600GetTexFormat(texObj, firstImage->TexFormat->MesaFormat)) {
|
||||
if (!r600GetTexFormat(texObj, firstImage->TexFormat)) {
|
||||
radeon_error("unexpected texture format in %s\n",
|
||||
__FUNCTION__);
|
||||
return;
|
||||
|
|
@ -916,9 +915,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
|
|||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||
rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
|
||||
texImage->RowStride = rb->pitch / rb->cpp;
|
||||
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||
internalFormat,
|
||||
type, format, 0);
|
||||
|
||||
rImage->bo = rb->bo;
|
||||
radeon_bo_ref(rImage->bo);
|
||||
t->bo = rb->bo;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@
|
|||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "vbo/vbo.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "r600_context.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ void
|
|||
radeon_renderbuffer_set_bo(struct radeon_renderbuffer *rb,
|
||||
struct radeon_bo *bo);
|
||||
struct radeon_renderbuffer *
|
||||
radeon_create_renderbuffer(GLenum format, __DRIdrawablePrivate *driDrawPriv);
|
||||
radeon_create_renderbuffer(gl_format format, __DRIdrawablePrivate *driDrawPriv);
|
||||
static inline struct radeon_renderbuffer *radeon_renderbuffer(struct gl_renderbuffer *rb)
|
||||
{
|
||||
struct radeon_renderbuffer *rrb = (struct radeon_renderbuffer *)rb;
|
||||
|
|
|
|||
|
|
@ -496,19 +496,7 @@ radeon_make_renderbuffer_current(radeonContextPtr radeon,
|
|||
static unsigned
|
||||
radeon_bits_per_pixel(const struct radeon_renderbuffer *rb)
|
||||
{
|
||||
switch (rb->base._ActualFormat) {
|
||||
case GL_RGB5:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
return 16;
|
||||
case GL_RGB8:
|
||||
case GL_RGBA8:
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
case GL_STENCIL_INDEX8_EXT:
|
||||
return 32;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return _mesa_get_format_bytes(rb->base.Format) * 8;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/context.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texrender.h"
|
||||
#include "drivers/common/meta.h"
|
||||
|
||||
|
|
@ -91,11 +90,8 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
rb->_ActualFormat = GL_RGB5;
|
||||
rb->Format = MESA_FORMAT_RGB565;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 5;
|
||||
rb->GreenBits = 6;
|
||||
rb->BlueBits = 5;
|
||||
cpp = 2;
|
||||
break;
|
||||
case GL_RGB:
|
||||
|
|
@ -103,12 +99,8 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
rb->_ActualFormat = GL_RGB8;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 8;
|
||||
rb->GreenBits = 8;
|
||||
rb->BlueBits = 8;
|
||||
rb->AlphaBits = 0;
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_RGBA:
|
||||
|
|
@ -119,12 +111,8 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
rb->_ActualFormat = GL_RGBA8;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
rb->RedBits = 8;
|
||||
rb->GreenBits = 8;
|
||||
rb->BlueBits = 8;
|
||||
rb->AlphaBits = 8;
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_STENCIL_INDEX:
|
||||
|
|
@ -133,31 +121,26 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
case GL_STENCIL_INDEX8_EXT:
|
||||
case GL_STENCIL_INDEX16_EXT:
|
||||
/* alloc a depth+stencil buffer */
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->Format = MESA_FORMAT_S8_Z24;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->StencilBits = 8;
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->DataType = GL_UNSIGNED_SHORT;
|
||||
rb->DepthBits = 16;
|
||||
cpp = 2;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
case GL_DEPTH_COMPONENT32:
|
||||
rb->_ActualFormat = GL_DEPTH_COMPONENT24;
|
||||
rb->Format = MESA_FORMAT_Z32;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
rb->DepthBits = 24;
|
||||
cpp = 4;
|
||||
break;
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rb->Format = MESA_FORMAT_S8_Z24;
|
||||
rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rb->DepthBits = 24;
|
||||
rb->StencilBits = 8;
|
||||
cpp = 4;
|
||||
break;
|
||||
default:
|
||||
|
|
@ -166,6 +149,8 @@ radeon_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
return GL_FALSE;
|
||||
}
|
||||
|
||||
rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
|
||||
|
||||
if (ctx->Driver.Flush)
|
||||
ctx->Driver.Flush(ctx); /* +r6/r7 */
|
||||
|
||||
|
|
@ -213,7 +198,7 @@ radeon_alloc_window_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
ASSERT(rb->Name == 0);
|
||||
rb->Width = width;
|
||||
rb->Height = height;
|
||||
rb->_ActualFormat = internalFormat;
|
||||
rb->InternalFormat = internalFormat;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
|
@ -255,8 +240,13 @@ radeon_nop_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a renderbuffer for a window's color, depth and/or stencil buffer.
|
||||
* Not used for user-created renderbuffers.
|
||||
*/
|
||||
struct radeon_renderbuffer *
|
||||
radeon_create_renderbuffer(GLenum format, __DRIdrawablePrivate *driDrawPriv)
|
||||
radeon_create_renderbuffer(gl_format format, __DRIdrawablePrivate *driDrawPriv)
|
||||
{
|
||||
struct radeon_renderbuffer *rrb;
|
||||
|
||||
|
|
@ -267,67 +257,46 @@ radeon_create_renderbuffer(GLenum format, __DRIdrawablePrivate *driDrawPriv)
|
|||
_mesa_init_renderbuffer(&rrb->base, 0);
|
||||
rrb->base.ClassID = RADEON_RB_CLASS;
|
||||
|
||||
/* XXX format junk */
|
||||
rrb->base.Format = format;
|
||||
|
||||
switch (format) {
|
||||
case GL_RGB5:
|
||||
rrb->base._ActualFormat = GL_RGB5;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
rrb->base.RedBits = 5;
|
||||
rrb->base.GreenBits = 6;
|
||||
rrb->base.BlueBits = 5;
|
||||
case MESA_FORMAT_RGB565:
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
rrb->base._BaseFormat = GL_RGB;
|
||||
break;
|
||||
case GL_RGB8:
|
||||
rrb->base._ActualFormat = GL_RGB8;
|
||||
rrb->base._BaseFormat = GL_RGB;
|
||||
rrb->base.RedBits = 8;
|
||||
rrb->base.GreenBits = 8;
|
||||
rrb->base.BlueBits = 8;
|
||||
rrb->base.AlphaBits = 0;
|
||||
case MESA_FORMAT_XRGB8888:
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
rrb->base._BaseFormat = GL_RGB;
|
||||
break;
|
||||
case GL_RGBA8:
|
||||
rrb->base._ActualFormat = GL_RGBA8;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
rrb->base.RedBits = 8;
|
||||
rrb->base.GreenBits = 8;
|
||||
rrb->base.BlueBits = 8;
|
||||
rrb->base.AlphaBits = 8;
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
break;
|
||||
case GL_STENCIL_INDEX8_EXT:
|
||||
rrb->base._ActualFormat = GL_STENCIL_INDEX8_EXT;
|
||||
rrb->base._BaseFormat = GL_STENCIL_INDEX;
|
||||
rrb->base.StencilBits = 8;
|
||||
case MESA_FORMAT_S8:
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
rrb->base._BaseFormat = GL_STENCIL_INDEX;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
rrb->base._ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rrb->base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
rrb->base.DepthBits = 16;
|
||||
case MESA_FORMAT_Z16:
|
||||
rrb->base.DataType = GL_UNSIGNED_SHORT;
|
||||
rrb->base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
break;
|
||||
case GL_DEPTH_COMPONENT24:
|
||||
rrb->base._ActualFormat = GL_DEPTH_COMPONENT24;
|
||||
rrb->base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
rrb->base.DepthBits = 24;
|
||||
case MESA_FORMAT_X8_Z24:
|
||||
rrb->base.DataType = GL_UNSIGNED_INT;
|
||||
rrb->base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
break;
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
rrb->base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rrb->base._BaseFormat = GL_DEPTH_STENCIL_EXT;
|
||||
rrb->base.DepthBits = 24;
|
||||
rrb->base.StencilBits = 8;
|
||||
case MESA_FORMAT_S8_Z24:
|
||||
rrb->base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
rrb->base._BaseFormat = GL_DEPTH_STENCIL;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "%s: Unknown format 0x%04x\n", __FUNCTION__, format);
|
||||
fprintf(stderr, "%s: Unknown format %s\n",
|
||||
__FUNCTION__, _mesa_get_format_name(format));
|
||||
_mesa_delete_renderbuffer(&rrb->base);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rrb->dPriv = driDrawPriv;
|
||||
rrb->base.InternalFormat = format;
|
||||
rrb->base.InternalFormat = _mesa_get_format_base_format(format);
|
||||
|
||||
rrb->base.Delete = radeon_delete_renderbuffer;
|
||||
rrb->base.AllocStorage = radeon_alloc_window_storage;
|
||||
|
|
@ -387,46 +356,30 @@ radeon_update_wrapper(GLcontext *ctx, struct radeon_renderbuffer *rrb,
|
|||
struct gl_texture_image *texImage)
|
||||
{
|
||||
int retry = 0;
|
||||
gl_format texFormat;
|
||||
|
||||
restart:
|
||||
if (texImage->TexFormat == &_mesa_texformat_argb8888) {
|
||||
rrb->cpp = 4;
|
||||
rrb->base._ActualFormat = GL_RGBA8;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
if (texImage->TexFormat == MESA_FORMAT_ARGB8888) {
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to RGBA8 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_rgb565) {
|
||||
rrb->cpp = 2;
|
||||
rrb->base._ActualFormat = GL_RGB5;
|
||||
rrb->base._BaseFormat = GL_RGB;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_RGB565) {
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to RGB5 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_argb1555) {
|
||||
rrb->cpp = 2;
|
||||
rrb->base._ActualFormat = GL_RGB5_A1;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_ARGB1555) {
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to ARGB1555 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_argb4444) {
|
||||
rrb->cpp = 2;
|
||||
rrb->base._ActualFormat = GL_RGBA4;
|
||||
rrb->base._BaseFormat = GL_RGBA;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_ARGB4444) {
|
||||
rrb->base.DataType = GL_UNSIGNED_BYTE;
|
||||
DBG("Render to ARGB1555 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_z16) {
|
||||
rrb->cpp = 2;
|
||||
rrb->base._ActualFormat = GL_DEPTH_COMPONENT16;
|
||||
rrb->base._BaseFormat = GL_DEPTH_COMPONENT;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_Z16) {
|
||||
rrb->base.DataType = GL_UNSIGNED_SHORT;
|
||||
DBG("Render to DEPTH16 texture OK\n");
|
||||
}
|
||||
else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
|
||||
rrb->cpp = 4;
|
||||
rrb->base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
rrb->base._BaseFormat = GL_DEPTH_STENCIL_EXT;
|
||||
else if (texImage->TexFormat == MESA_FORMAT_S8_Z24) {
|
||||
rrb->base.DataType = GL_UNSIGNED_INT_24_8_EXT;
|
||||
DBG("Render to DEPTH_STENCIL texture OK\n");
|
||||
}
|
||||
|
|
@ -434,26 +387,31 @@ restart:
|
|||
/* try redoing the FBO */
|
||||
if (retry == 1) {
|
||||
DBG("Render to texture BAD FORMAT %d\n",
|
||||
texImage->TexFormat->MesaFormat);
|
||||
texImage->TexFormat);
|
||||
return GL_FALSE;
|
||||
}
|
||||
/* XXX why is the tex format being set here?
|
||||
* I think this can be removed.
|
||||
*/
|
||||
texImage->TexFormat = radeonChooseTextureFormat(ctx, texImage->InternalFormat, 0,
|
||||
texImage->TexFormat->DataType,
|
||||
_mesa_get_format_datatype(texImage->TexFormat),
|
||||
1);
|
||||
|
||||
retry++;
|
||||
goto restart;
|
||||
}
|
||||
|
||||
rrb->base.InternalFormat = rrb->base._ActualFormat;
|
||||
texFormat = texImage->TexFormat;
|
||||
|
||||
rrb->base.Format = texFormat;
|
||||
|
||||
rrb->cpp = _mesa_get_format_bytes(texFormat);
|
||||
rrb->pitch = texImage->Width * rrb->cpp;
|
||||
rrb->base.InternalFormat = texImage->InternalFormat;
|
||||
rrb->base._BaseFormat = _mesa_base_fbo_format(ctx, rrb->base.InternalFormat);
|
||||
|
||||
rrb->base.Width = texImage->Width;
|
||||
rrb->base.Height = texImage->Height;
|
||||
rrb->base.RedBits = texImage->TexFormat->RedBits;
|
||||
rrb->base.GreenBits = texImage->TexFormat->GreenBits;
|
||||
rrb->base.BlueBits = texImage->TexFormat->BlueBits;
|
||||
rrb->base.AlphaBits = texImage->TexFormat->AlphaBits;
|
||||
rrb->base.DepthBits = texImage->TexFormat->DepthBits;
|
||||
rrb->base.StencilBits = texImage->TexFormat->StencilBits;
|
||||
|
||||
rrb->base.Delete = radeon_delete_renderbuffer;
|
||||
rrb->base.AllocStorage = radeon_nop_alloc_storage;
|
||||
|
|
|
|||
|
|
@ -32,13 +32,12 @@
|
|||
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
static GLuint radeon_compressed_texture_size(GLcontext *ctx,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLuint mesaFormat)
|
||||
{
|
||||
GLuint size = _mesa_compressed_texture_size(ctx, width, height, depth, mesaFormat);
|
||||
GLuint size = _mesa_format_image_size(mesaFormat, width, height, depth);
|
||||
|
||||
if (mesaFormat == MESA_FORMAT_RGB_DXT1 ||
|
||||
mesaFormat == MESA_FORMAT_RGBA_DXT1) {
|
||||
|
|
@ -314,18 +313,19 @@ static void calculate_first_last_level(struct gl_texture_object *tObj,
|
|||
GLboolean radeon_miptree_matches_image(radeon_mipmap_tree *mt,
|
||||
struct gl_texture_image *texImage, GLuint face, GLuint level)
|
||||
{
|
||||
GLboolean isCompressed = _mesa_is_format_compressed(texImage->TexFormat);
|
||||
radeon_mipmap_level *lvl;
|
||||
|
||||
if (face >= mt->faces || level < mt->firstLevel || level > mt->lastLevel)
|
||||
return GL_FALSE;
|
||||
|
||||
if (texImage->InternalFormat != mt->internal_format ||
|
||||
texImage->IsCompressed != mt->compressed)
|
||||
isCompressed != mt->compressed)
|
||||
return GL_FALSE;
|
||||
|
||||
if (!texImage->IsCompressed &&
|
||||
if (!isCompressed &&
|
||||
!mt->compressed &&
|
||||
texImage->TexFormat->TexelBytes != mt->bpp)
|
||||
_mesa_get_format_bytes(texImage->TexFormat) != mt->bpp)
|
||||
return GL_FALSE;
|
||||
|
||||
lvl = &mt->levels[level - mt->firstLevel];
|
||||
|
|
@ -347,13 +347,15 @@ GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct gl_textu
|
|||
GLuint compressed;
|
||||
GLuint numfaces = 1;
|
||||
GLuint firstLevel, lastLevel;
|
||||
GLuint texelBytes;
|
||||
|
||||
calculate_first_last_level(texObj, &firstLevel, &lastLevel, 0, texObj->BaseLevel);
|
||||
if (texObj->Target == GL_TEXTURE_CUBE_MAP)
|
||||
numfaces = 6;
|
||||
|
||||
firstImage = texObj->Image[0][firstLevel];
|
||||
compressed = firstImage->IsCompressed ? firstImage->TexFormat->MesaFormat : 0;
|
||||
compressed = _mesa_is_format_compressed(firstImage->TexFormat) ? firstImage->TexFormat : 0;
|
||||
texelBytes = _mesa_get_format_bytes(firstImage->TexFormat);
|
||||
|
||||
return (mt->firstLevel == firstLevel &&
|
||||
mt->lastLevel == lastLevel &&
|
||||
|
|
@ -361,7 +363,7 @@ GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct gl_textu
|
|||
mt->height0 == firstImage->Height &&
|
||||
mt->depth0 == firstImage->Depth &&
|
||||
mt->compressed == compressed &&
|
||||
(!mt->compressed ? (mt->bpp == firstImage->TexFormat->TexelBytes) : 1));
|
||||
(!mt->compressed ? (mt->bpp == texelBytes) : 1));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -372,9 +374,10 @@ GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct gl_textu
|
|||
void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t,
|
||||
radeon_texture_image *image, GLuint face, GLuint level)
|
||||
{
|
||||
GLuint compressed = image->base.IsCompressed ? image->base.TexFormat->MesaFormat : 0;
|
||||
GLuint compressed = _mesa_is_format_compressed(image->base.TexFormat) ? image->base.TexFormat : 0;
|
||||
GLuint numfaces = 1;
|
||||
GLuint firstLevel, lastLevel;
|
||||
GLuint texelBytes;
|
||||
|
||||
assert(!t->mt);
|
||||
|
||||
|
|
@ -385,11 +388,13 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t,
|
|||
if (level != firstLevel || face >= numfaces)
|
||||
return;
|
||||
|
||||
texelBytes = _mesa_get_format_bytes(image->base.TexFormat);
|
||||
|
||||
t->mt = radeon_miptree_create(rmesa, t, t->base.Target,
|
||||
image->base.InternalFormat,
|
||||
firstLevel, lastLevel,
|
||||
image->base.Width, image->base.Height, image->base.Depth,
|
||||
image->base.TexFormat->TexelBytes, t->tile_bits, compressed);
|
||||
texelBytes, t->tile_bits, compressed);
|
||||
}
|
||||
|
||||
/* Although we use the image_offset[] array to store relative offsets
|
||||
|
|
|
|||
|
|
@ -1469,7 +1469,7 @@ radeonCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
const GLboolean swAccum = mesaVis->accumRedBits > 0;
|
||||
const GLboolean swStencil = mesaVis->stencilBits > 0 &&
|
||||
mesaVis->depthBits != 24;
|
||||
GLenum rgbFormat;
|
||||
gl_format rgbFormat;
|
||||
struct radeon_framebuffer *rfb;
|
||||
|
||||
if (isPixmap)
|
||||
|
|
@ -1482,11 +1482,11 @@ radeonCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
_mesa_initialize_framebuffer(&rfb->base, mesaVis);
|
||||
|
||||
if (mesaVis->redBits == 5)
|
||||
rgbFormat = GL_RGB5;
|
||||
rgbFormat = MESA_FORMAT_RGB565;
|
||||
else if (mesaVis->alphaBits == 0)
|
||||
rgbFormat = GL_RGB8;
|
||||
rgbFormat = MESA_FORMAT_XRGB8888;
|
||||
else
|
||||
rgbFormat = GL_RGBA8;
|
||||
rgbFormat = MESA_FORMAT_ARGB8888;
|
||||
|
||||
/* front color renderbuffer */
|
||||
rfb->color_rb[0] = radeon_create_renderbuffer(rgbFormat, driDrawPriv);
|
||||
|
|
@ -1502,19 +1502,22 @@ radeonCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 24) {
|
||||
if (mesaVis->stencilBits == 8) {
|
||||
struct radeon_renderbuffer *depthStencilRb = radeon_create_renderbuffer(GL_DEPTH24_STENCIL8_EXT, driDrawPriv);
|
||||
struct radeon_renderbuffer *depthStencilRb =
|
||||
radeon_create_renderbuffer(MESA_FORMAT_S8_Z24, driDrawPriv);
|
||||
_mesa_add_renderbuffer(&rfb->base, BUFFER_DEPTH, &depthStencilRb->base);
|
||||
_mesa_add_renderbuffer(&rfb->base, BUFFER_STENCIL, &depthStencilRb->base);
|
||||
depthStencilRb->has_surface = screen->depthHasSurface;
|
||||
} else {
|
||||
/* depth renderbuffer */
|
||||
struct radeon_renderbuffer *depth = radeon_create_renderbuffer(GL_DEPTH_COMPONENT24, driDrawPriv);
|
||||
struct radeon_renderbuffer *depth =
|
||||
radeon_create_renderbuffer(MESA_FORMAT_X8_Z24, driDrawPriv);
|
||||
_mesa_add_renderbuffer(&rfb->base, BUFFER_DEPTH, &depth->base);
|
||||
depth->has_surface = screen->depthHasSurface;
|
||||
}
|
||||
} else if (mesaVis->depthBits == 16) {
|
||||
/* just 16-bit depth buffer, no hw stencil */
|
||||
struct radeon_renderbuffer *depth = radeon_create_renderbuffer(GL_DEPTH_COMPONENT16, driDrawPriv);
|
||||
/* just 16-bit depth buffer, no hw stencil */
|
||||
struct radeon_renderbuffer *depth =
|
||||
radeon_create_renderbuffer(MESA_FORMAT_Z16, driDrawPriv);
|
||||
_mesa_add_renderbuffer(&rfb->base, BUFFER_DEPTH, &depth->base);
|
||||
depth->has_surface = screen->depthHasSurface;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -334,22 +334,6 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
|
|||
|
||||
#endif
|
||||
|
||||
#ifndef RADEON_R300
|
||||
#ifndef RADEON_R600
|
||||
static uint32_t
|
||||
z24s8_to_s8z24(uint32_t val)
|
||||
{
|
||||
return (val << 24) | (val >> 8);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
s8z24_to_z24s8(uint32_t val)
|
||||
{
|
||||
return (val >> 24) | (val << 8);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Note that all information needed to access pixels in a renderbuffer
|
||||
* should be obtained through the gl_renderbuffer parameter, not per-context
|
||||
|
|
@ -619,27 +603,25 @@ do { \
|
|||
GLuint *_ptr = (GLuint*)r600_ptr_depth( rrb, _x + x_off, _y + y_off ); \
|
||||
GLuint tmp = *_ptr; \
|
||||
tmp &= 0xff000000; \
|
||||
tmp |= (((d) >> 8) & 0x00ffffff); \
|
||||
tmp |= ((d) & 0x00ffffff); \
|
||||
*_ptr = tmp; \
|
||||
_ptr = (GLuint*)r600_ptr_stencil(rrb, _x + x_off, _y + y_off); \
|
||||
tmp = *_ptr; \
|
||||
tmp &= 0xffffff00; \
|
||||
tmp |= (d) & 0xff; \
|
||||
tmp |= ((d) >> 24) & 0xff; \
|
||||
*_ptr = tmp; \
|
||||
} while (0)
|
||||
#elif defined(RADEON_R200)
|
||||
#define WRITE_DEPTH( _x, _y, d ) \
|
||||
do { \
|
||||
GLuint *_ptr = (GLuint*)r200_depth_4byte( rrb, _x + x_off, _y + y_off ); \
|
||||
GLuint tmp = z24s8_to_s8z24(d); \
|
||||
*_ptr = tmp; \
|
||||
*_ptr = d; \
|
||||
} while (0)
|
||||
#else
|
||||
#define WRITE_DEPTH( _x, _y, d ) \
|
||||
do { \
|
||||
GLuint *_ptr = (GLuint*)radeon_ptr_4byte( rrb, _x + x_off, _y + y_off ); \
|
||||
GLuint tmp = z24s8_to_s8z24(d); \
|
||||
*_ptr = tmp; \
|
||||
*_ptr = d; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
|
|
@ -651,21 +633,21 @@ do { \
|
|||
#elif defined(RADEON_R600)
|
||||
#define READ_DEPTH( d, _x, _y ) \
|
||||
do { \
|
||||
d = ((*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off))) << 8) & 0xffffff00; \
|
||||
d |= (*(GLuint*)(r600_ptr_stencil(rrb, _x + x_off, _y + y_off))) & 0x000000ff; \
|
||||
d = (*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off))) & 0x00ffffff; \
|
||||
d |= ((*(GLuint*)(r600_ptr_stencil(rrb, _x + x_off, _y + y_off))) << 24) & 0xff000000; \
|
||||
}while(0)
|
||||
#elif defined(RADEON_R200)
|
||||
#define READ_DEPTH( d, _x, _y ) \
|
||||
do { \
|
||||
d = s8z24_to_z24s8(*(GLuint*)(r200_depth_4byte(rrb, _x + x_off, _y + y_off))); \
|
||||
d = *(GLuint*)(r200_depth_4byte(rrb, _x + x_off, _y + y_off)); \
|
||||
}while(0)
|
||||
#else
|
||||
#define READ_DEPTH( d, _x, _y ) do { \
|
||||
d = s8z24_to_z24s8(*(GLuint*)(radeon_ptr_4byte(rrb, _x + x_off, _y + y_off ))); \
|
||||
d = *(GLuint*)(radeon_ptr_4byte(rrb, _x + x_off, _y + y_off )); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define TAG(x) radeon##x##_z24_s8
|
||||
#define TAG(x) radeon##x##_s8_z24
|
||||
#include "depthtmp.h"
|
||||
|
||||
/* ================================================================
|
||||
|
|
@ -742,7 +724,7 @@ do { \
|
|||
} while (0)
|
||||
#endif
|
||||
|
||||
#define TAG(x) radeon##x##_z24_s8
|
||||
#define TAG(x) radeon##x##_s8_z24
|
||||
#include "stenciltmp.h"
|
||||
|
||||
|
||||
|
|
@ -864,25 +846,25 @@ void radeonInitSpanFuncs(GLcontext * ctx)
|
|||
*/
|
||||
static void radeonSetSpanFunctions(struct radeon_renderbuffer *rrb)
|
||||
{
|
||||
if (rrb->base._ActualFormat == GL_RGB5) {
|
||||
if (rrb->base.Format == MESA_FORMAT_RGB565) {
|
||||
radeonInitPointers_RGB565(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_RGB8) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_XRGB8888) {
|
||||
radeonInitPointers_xRGB8888(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_RGBA8) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_ARGB8888) {
|
||||
radeonInitPointers_ARGB8888(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_RGBA4) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_ARGB4444) {
|
||||
radeonInitPointers_ARGB4444(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_RGB5_A1) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_ARGB1555) {
|
||||
radeonInitPointers_ARGB1555(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_DEPTH_COMPONENT16) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_Z16) {
|
||||
radeonInitDepthPointers_z16(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_DEPTH_COMPONENT24) {
|
||||
} else if (rrb->base.Format == MESA_FORMAT_X8_Z24) {
|
||||
radeonInitDepthPointers_z24(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_DEPTH24_STENCIL8_EXT) {
|
||||
radeonInitDepthPointers_z24_s8(&rrb->base);
|
||||
} else if (rrb->base._ActualFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
radeonInitStencilPointers_z24_s8(&rrb->base);
|
||||
} else if (rrb->base.Format == MESA_FORMAT_S8_Z24) {
|
||||
radeonInitDepthPointers_s8_z24(&rrb->base);
|
||||
} else if (rrb->base.Format == MESA_FORMAT_S8) {
|
||||
radeonInitStencilPointers_s8_z24(&rrb->base);
|
||||
} else {
|
||||
fprintf(stderr, "radeonSetSpanFunctions: bad actual format: 0x%04X\n", rrb->base._ActualFormat);
|
||||
fprintf(stderr, "radeonSetSpanFunctions: bad format: 0x%04X\n", rrb->base.Format);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -440,16 +440,18 @@ static void ctx_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom)
|
|||
atom->cmd[CTX_RB3D_CNTL] &= ~(0xf << 10);
|
||||
if (rrb->cpp == 4)
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB8888;
|
||||
else switch (rrb->base._ActualFormat) {
|
||||
case GL_RGB5:
|
||||
else switch (rrb->base.Format) {
|
||||
case MESA_FORMAT_RGB565:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_RGB565;
|
||||
break;
|
||||
case GL_RGBA4:
|
||||
case MESA_FORMAT_ARGB4444:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB4444;
|
||||
break;
|
||||
case GL_RGB5_A1:
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB1555;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(ctx, "unexpected format in ctx_emit_cs()");
|
||||
}
|
||||
|
||||
cbpitch = (rrb->pitch / rrb->cpp);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/enums.h"
|
||||
#include "main/image.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/colormac.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/enums.h"
|
||||
|
|
@ -81,8 +80,10 @@ struct tx_table {
|
|||
GLuint format, filter;
|
||||
};
|
||||
|
||||
/* XXX verify this table against MESA_FORMAT_x values */
|
||||
static const struct tx_table tx_table[] =
|
||||
{
|
||||
_INVALID(NONE), /* MESA_FORMAT_NONE */
|
||||
_ALPHA(RGBA8888),
|
||||
_ALPHA_REV(RGBA8888),
|
||||
_ALPHA(ARGB8888),
|
||||
|
|
@ -708,9 +709,7 @@ void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_
|
|||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||
rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
|
||||
texImage->RowStride = rb->pitch / rb->cpp;
|
||||
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||
internalFormat,
|
||||
type, format, 0);
|
||||
|
||||
rImage->bo = rb->bo;
|
||||
radeon_bo_ref(rImage->bo);
|
||||
t->bo = rb->bo;
|
||||
|
|
@ -1031,18 +1030,18 @@ static GLboolean setup_hardware_state(r100ContextPtr rmesa, radeonTexObj *t, int
|
|||
log2Width = firstImage->WidthLog2;
|
||||
log2Height = firstImage->HeightLog2;
|
||||
log2Depth = firstImage->DepthLog2;
|
||||
texelBytes = firstImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(firstImage->TexFormat);
|
||||
|
||||
if (!t->image_override) {
|
||||
if (VALID_FORMAT(firstImage->TexFormat->MesaFormat)) {
|
||||
if (VALID_FORMAT(firstImage->TexFormat)) {
|
||||
const struct tx_table *table = tx_table;
|
||||
|
||||
t->pp_txformat &= ~(RADEON_TXFORMAT_FORMAT_MASK |
|
||||
RADEON_TXFORMAT_ALPHA_IN_MAP);
|
||||
t->pp_txfilter &= ~RADEON_YUV_TO_RGB;
|
||||
|
||||
t->pp_txformat |= table[ firstImage->TexFormat->MesaFormat ].format;
|
||||
t->pp_txfilter |= table[ firstImage->TexFormat->MesaFormat ].filter;
|
||||
t->pp_txformat |= table[ firstImage->TexFormat ].format;
|
||||
t->pp_txfilter |= table[ firstImage->TexFormat ].filter;
|
||||
} else {
|
||||
_mesa_problem(NULL, "unexpected texture format in %s",
|
||||
__FUNCTION__);
|
||||
|
|
@ -1083,7 +1082,7 @@ static GLboolean setup_hardware_state(r100ContextPtr rmesa, radeonTexObj *t, int
|
|||
| ((firstImage->Height - 1) << RADEON_TEX_VSIZE_SHIFT));
|
||||
|
||||
if ( !t->image_override ) {
|
||||
if (firstImage->IsCompressed)
|
||||
if (_mesa_is_format_compressed(firstImage->TexFormat))
|
||||
t->pp_txpitch = (firstImage->Width + 63) & ~(63);
|
||||
else
|
||||
t->pp_txpitch = ((firstImage->Width * texelBytes) + 63) & ~(63);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
#include "main/convolve.h"
|
||||
#include "main/mipmap.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
@ -144,7 +143,6 @@ static void map_override(GLcontext *ctx, radeonTexObj *t)
|
|||
radeon_bo_map(t->bo, GL_FALSE);
|
||||
|
||||
img->base.Data = t->bo->ptr;
|
||||
_mesa_set_fetch_functions(&img->base, 2);
|
||||
}
|
||||
|
||||
static void unmap_override(GLcontext *ctx, radeonTexObj *t)
|
||||
|
|
@ -261,9 +259,9 @@ void radeonGenerateMipmap(GLcontext* ctx, GLenum target, struct gl_texture_objec
|
|||
|
||||
|
||||
/* try to find a format which will only need a memcopy */
|
||||
static const struct gl_texture_format *radeonChoose8888TexFormat(radeonContextPtr rmesa,
|
||||
GLenum srcFormat,
|
||||
GLenum srcType, GLboolean fbo)
|
||||
static gl_format radeonChoose8888TexFormat(radeonContextPtr rmesa,
|
||||
GLenum srcFormat,
|
||||
GLenum srcType, GLboolean fbo)
|
||||
{
|
||||
const GLuint ui = 1;
|
||||
const GLubyte littleEndian = *((const GLubyte *)&ui);
|
||||
|
|
@ -276,37 +274,37 @@ static const struct gl_texture_format *radeonChoose8888TexFormat(radeonContextPt
|
|||
(srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && !littleEndian) ||
|
||||
(srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) ||
|
||||
(srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && littleEndian)) {
|
||||
return &_mesa_texformat_rgba8888;
|
||||
return MESA_FORMAT_RGBA8888;
|
||||
} else if ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) ||
|
||||
(srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && littleEndian) ||
|
||||
(srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8) ||
|
||||
(srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && !littleEndian)) {
|
||||
return &_mesa_texformat_rgba8888_rev;
|
||||
return MESA_FORMAT_RGBA8888_REV;
|
||||
} else if (IS_R200_CLASS(rmesa->radeonScreen)) {
|
||||
return _dri_texformat_argb8888;
|
||||
} else if (srcFormat == GL_BGRA && ((srcType == GL_UNSIGNED_BYTE && !littleEndian) ||
|
||||
srcType == GL_UNSIGNED_INT_8_8_8_8)) {
|
||||
return &_mesa_texformat_argb8888_rev;
|
||||
return MESA_FORMAT_ARGB8888_REV;
|
||||
} else if (srcFormat == GL_BGRA && ((srcType == GL_UNSIGNED_BYTE && littleEndian) ||
|
||||
srcType == GL_UNSIGNED_INT_8_8_8_8_REV)) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
} else
|
||||
return _dri_texformat_argb8888;
|
||||
}
|
||||
|
||||
const struct gl_texture_format *radeonChooseTextureFormat_mesa(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type)
|
||||
gl_format radeonChooseTextureFormat_mesa(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type)
|
||||
{
|
||||
return radeonChooseTextureFormat(ctx, internalFormat, format,
|
||||
type, 0);
|
||||
}
|
||||
|
||||
const struct gl_texture_format *radeonChooseTextureFormat(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type, GLboolean fbo)
|
||||
gl_format radeonChooseTextureFormat(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type, GLboolean fbo)
|
||||
{
|
||||
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
|
||||
const GLboolean do32bpt =
|
||||
|
|
@ -430,50 +428,50 @@ const struct gl_texture_format *radeonChooseTextureFormat(GLcontext * ctx,
|
|||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
|
||||
case GL_ALPHA16F_ARB:
|
||||
return &_mesa_texformat_alpha_float16;
|
||||
return MESA_FORMAT_ALPHA_FLOAT16;
|
||||
case GL_ALPHA32F_ARB:
|
||||
return &_mesa_texformat_alpha_float32;
|
||||
return MESA_FORMAT_ALPHA_FLOAT32;
|
||||
case GL_LUMINANCE16F_ARB:
|
||||
return &_mesa_texformat_luminance_float16;
|
||||
return MESA_FORMAT_LUMINANCE_FLOAT16;
|
||||
case GL_LUMINANCE32F_ARB:
|
||||
return &_mesa_texformat_luminance_float32;
|
||||
return MESA_FORMAT_LUMINANCE_FLOAT32;
|
||||
case GL_LUMINANCE_ALPHA16F_ARB:
|
||||
return &_mesa_texformat_luminance_alpha_float16;
|
||||
return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16;
|
||||
case GL_LUMINANCE_ALPHA32F_ARB:
|
||||
return &_mesa_texformat_luminance_alpha_float32;
|
||||
return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32;
|
||||
case GL_INTENSITY16F_ARB:
|
||||
return &_mesa_texformat_intensity_float16;
|
||||
return MESA_FORMAT_INTENSITY_FLOAT16;
|
||||
case GL_INTENSITY32F_ARB:
|
||||
return &_mesa_texformat_intensity_float32;
|
||||
return MESA_FORMAT_INTENSITY_FLOAT32;
|
||||
case GL_RGB16F_ARB:
|
||||
return &_mesa_texformat_rgba_float16;
|
||||
return MESA_FORMAT_RGBA_FLOAT16;
|
||||
case GL_RGB32F_ARB:
|
||||
return &_mesa_texformat_rgba_float32;
|
||||
return MESA_FORMAT_RGBA_FLOAT32;
|
||||
case GL_RGBA16F_ARB:
|
||||
return &_mesa_texformat_rgba_float16;
|
||||
return MESA_FORMAT_RGBA_FLOAT16;
|
||||
case GL_RGBA32F_ARB:
|
||||
return &_mesa_texformat_rgba_float32;
|
||||
return MESA_FORMAT_RGBA_FLOAT32;
|
||||
|
||||
case GL_DEPTH_COMPONENT:
|
||||
case GL_DEPTH_COMPONENT16:
|
||||
|
|
@ -481,7 +479,7 @@ const struct gl_texture_format *radeonChooseTextureFormat(GLcontext * ctx,
|
|||
case GL_DEPTH_COMPONENT32:
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
case GL_DEPTH24_STENCIL8_EXT:
|
||||
return &_mesa_texformat_s8_z24;
|
||||
return MESA_FORMAT_S8_Z24;
|
||||
|
||||
/* EXT_texture_sRGB */
|
||||
case GL_SRGB:
|
||||
|
|
@ -490,26 +488,26 @@ const struct gl_texture_format *radeonChooseTextureFormat(GLcontext * ctx,
|
|||
case GL_SRGB8_ALPHA8:
|
||||
case GL_COMPRESSED_SRGB:
|
||||
case GL_COMPRESSED_SRGB_ALPHA:
|
||||
return &_mesa_texformat_srgba8;
|
||||
return MESA_FORMAT_SRGBA8;
|
||||
|
||||
case GL_SLUMINANCE:
|
||||
case GL_SLUMINANCE8:
|
||||
case GL_COMPRESSED_SLUMINANCE:
|
||||
return &_mesa_texformat_sl8;
|
||||
return MESA_FORMAT_SL8;
|
||||
|
||||
case GL_SLUMINANCE_ALPHA:
|
||||
case GL_SLUMINANCE8_ALPHA8:
|
||||
case GL_COMPRESSED_SLUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_sla8;
|
||||
return MESA_FORMAT_SLA8;
|
||||
|
||||
default:
|
||||
_mesa_problem(ctx,
|
||||
"unexpected internalFormat 0x%x in %s",
|
||||
(int)internalFormat, __func__);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
|
||||
return NULL; /* never get here */
|
||||
return MESA_FORMAT_NONE; /* never get here */
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -545,22 +543,10 @@ static void radeon_teximage(
|
|||
&postConvHeight);
|
||||
}
|
||||
|
||||
/* Choose and fill in the texture format for this image */
|
||||
texImage->TexFormat = radeonChooseTextureFormat(ctx, internalFormat, format, type, 0);
|
||||
_mesa_set_fetch_functions(texImage, dims);
|
||||
|
||||
if (texImage->TexFormat->TexelBytes == 0) {
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
texelBytes = 0;
|
||||
texImage->IsCompressed = GL_TRUE;
|
||||
texImage->CompressedSize =
|
||||
ctx->Driver.CompressedTextureSize(ctx, texImage->Width,
|
||||
texImage->Height, texImage->Depth,
|
||||
texImage->TexFormat->MesaFormat);
|
||||
} else {
|
||||
texImage->IsCompressed = GL_FALSE;
|
||||
texImage->CompressedSize = 0;
|
||||
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
/* Minimum pitch of 32 bytes */
|
||||
if (postConvWidth * texelBytes < 32) {
|
||||
postConvWidth = 32 / texelBytes;
|
||||
|
|
@ -595,10 +581,13 @@ static void radeon_teximage(
|
|||
dstRowStride = lvl->rowstride;
|
||||
} else {
|
||||
int size;
|
||||
if (texImage->IsCompressed) {
|
||||
size = texImage->CompressedSize;
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
size = _mesa_format_image_size(texImage->TexFormat,
|
||||
texImage->Width,
|
||||
texImage->Height,
|
||||
texImage->Depth);
|
||||
} else {
|
||||
size = texImage->Width * texImage->Height * texImage->Depth * texImage->TexFormat->TexelBytes;
|
||||
size = texImage->Width * texImage->Height * texImage->Depth * _mesa_get_format_bytes(texImage->TexFormat);
|
||||
}
|
||||
texImage->Data = _mesa_alloc_texmemory(size);
|
||||
}
|
||||
|
|
@ -618,7 +607,7 @@ static void radeon_teximage(
|
|||
if (compressed) {
|
||||
if (image->mt) {
|
||||
uint32_t srcRowStride, bytesPerRow, rows;
|
||||
srcRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width);
|
||||
srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
|
||||
bytesPerRow = srcRowStride;
|
||||
rows = (height + 3) / 4;
|
||||
copy_rows(texImage->Data, image->mt->levels[level].rowstride,
|
||||
|
|
@ -634,7 +623,7 @@ static void radeon_teximage(
|
|||
radeon_mipmap_level *lvl = &image->mt->levels[image->mtlevel];
|
||||
dstRowStride = lvl->rowstride;
|
||||
} else {
|
||||
dstRowStride = texImage->Width * texImage->TexFormat->TexelBytes;
|
||||
dstRowStride = texImage->Width * _mesa_get_format_bytes(texImage->TexFormat);
|
||||
}
|
||||
|
||||
if (dims == 3) {
|
||||
|
|
@ -645,21 +634,22 @@ static void radeon_teximage(
|
|||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
|
||||
for (i = 0; i < depth; ++i) {
|
||||
dstImageOffsets[i] = dstRowStride/texImage->TexFormat->TexelBytes * height * i;
|
||||
dstImageOffsets[i] = dstRowStride/_mesa_get_format_bytes(texImage->TexFormat) * height * i;
|
||||
}
|
||||
} else {
|
||||
dstImageOffsets = texImage->ImageOffsets;
|
||||
}
|
||||
|
||||
if (!texImage->TexFormat->StoreImage(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
dstImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing))
|
||||
if (!_mesa_texstore(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
dstImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing)) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
}
|
||||
|
||||
if (dims == 3)
|
||||
_mesa_free(dstImageOffsets);
|
||||
|
|
@ -760,37 +750,39 @@ static void radeon_texsubimage(GLcontext* ctx, int dims, GLenum target, int leve
|
|||
radeon_mipmap_level *lvl = &image->mt->levels[image->mtlevel];
|
||||
dstRowStride = lvl->rowstride;
|
||||
} else {
|
||||
dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes;
|
||||
dstRowStride = texImage->RowStride * _mesa_get_format_bytes(texImage->TexFormat);
|
||||
}
|
||||
|
||||
if (compressed) {
|
||||
uint32_t srcRowStride, bytesPerRow, rows;
|
||||
GLubyte *img_start;
|
||||
if (!image->mt) {
|
||||
dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, texImage->Width);
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, texImage->Width);
|
||||
img_start = _mesa_compressed_image_address(xoffset, yoffset, 0,
|
||||
texImage->TexFormat->MesaFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Width, texImage->Data);
|
||||
}
|
||||
else {
|
||||
uint32_t blocks_x = dstRowStride / (image->mt->bpp * 4);
|
||||
img_start = texImage->Data + image->mt->bpp * 4 * (blocks_x * (yoffset / 4) + xoffset / 4);
|
||||
}
|
||||
srcRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width);
|
||||
srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
|
||||
bytesPerRow = srcRowStride;
|
||||
rows = (height + 3) / 4;
|
||||
|
||||
copy_rows(img_start, dstRowStride, pixels, srcRowStride, rows, bytesPerRow);
|
||||
|
||||
} else {
|
||||
if (!texImage->TexFormat->StoreImage(ctx, dims, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset, yoffset, zoffset,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing))
|
||||
}
|
||||
else {
|
||||
if (!_mesa_texstore(ctx, dims, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset, yoffset, zoffset,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, depth,
|
||||
format, type, pixels, packing)) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexSubImage");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -897,10 +889,10 @@ static void migrate_image_to_miptree(radeon_mipmap_tree *mt, radeon_texture_imag
|
|||
/* need to confirm this value is correct */
|
||||
if (mt->compressed) {
|
||||
height = (image->base.Height + 3) / 4;
|
||||
srcrowstride = _mesa_compressed_row_stride(image->base.TexFormat->MesaFormat, image->base.Width);
|
||||
srcrowstride = _mesa_format_row_stride(image->base.TexFormat, image->base.Width);
|
||||
} else {
|
||||
height = image->base.Height * image->base.Depth;
|
||||
srcrowstride = image->base.Width * image->base.TexFormat->TexelBytes;
|
||||
srcrowstride = image->base.Width * _mesa_get_format_bytes(image->base.TexFormat);
|
||||
}
|
||||
|
||||
// if (mt->tilebits)
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@
|
|||
|
||||
#ifndef RADEON_TEXTURE_H
|
||||
#define RADEON_TEXTURE_H
|
||||
|
||||
#include "main/formats.h"
|
||||
|
||||
|
||||
struct gl_texture_image *radeonNewTextureImage(GLcontext *ctx);
|
||||
void radeonFreeTexImageData(GLcontext *ctx, struct gl_texture_image *timage);
|
||||
|
||||
|
|
@ -40,14 +44,16 @@ void radeonUnmapTexture(GLcontext *ctx, struct gl_texture_object *texObj);
|
|||
void radeonGenerateMipmap(GLcontext* ctx, GLenum target, struct gl_texture_object *texObj);
|
||||
int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *texObj);
|
||||
GLuint radeon_face_for_target(GLenum target);
|
||||
const struct gl_texture_format *radeonChooseTextureFormat_mesa(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type);
|
||||
const struct gl_texture_format *radeonChooseTextureFormat(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type, GLboolean fbo);
|
||||
|
||||
gl_format radeonChooseTextureFormat_mesa(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type);
|
||||
|
||||
gl_format radeonChooseTextureFormat(GLcontext * ctx,
|
||||
GLint internalFormat,
|
||||
GLenum format,
|
||||
GLenum type, GLboolean fbo);
|
||||
|
||||
void radeonTexImage1D(GLcontext * ctx, GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
|
|
|
|||
544
src/mesa/drivers/dri/s3v/s3v_tex.c
Normal file
544
src/mesa/drivers/dri/s3v/s3v_tex.c
Normal file
|
|
@ -0,0 +1,544 @@
|
|||
/*
|
||||
* Author: Max Lingua <sunmax@libero.it>
|
||||
*/
|
||||
|
||||
#include "main/glheader.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/mm.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "swrast/swrast.h"
|
||||
|
||||
#include "s3v_context.h"
|
||||
#include "s3v_tex.h"
|
||||
|
||||
|
||||
extern void s3vSwapOutTexObj(s3vContextPtr vmesa, s3vTextureObjectPtr t);
|
||||
extern void s3vDestroyTexObj(s3vContextPtr vmesa, s3vTextureObjectPtr t);
|
||||
|
||||
/*
|
||||
static GLuint s3vComputeLodBias(GLfloat bias)
|
||||
{
|
||||
#if TEX_DEBUG_ON
|
||||
DEBUG_TEX(("*** s3vComputeLodBias ***\n"));
|
||||
#endif
|
||||
return bias;
|
||||
}
|
||||
*/
|
||||
|
||||
static void s3vSetTexWrapping(s3vContextPtr vmesa,
|
||||
s3vTextureObjectPtr t,
|
||||
GLenum wraps, GLenum wrapt)
|
||||
{
|
||||
GLuint t0 = t->TextureCMD;
|
||||
GLuint cmd = vmesa->CMD;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vSetTexWrapping: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
|
||||
t0 &= ~TEX_WRAP_MASK;
|
||||
cmd &= ~TEX_WRAP_MASK;
|
||||
|
||||
if ((wraps != GL_CLAMP) || (wrapt != GL_CLAMP)) {
|
||||
DEBUG(("TEX_WRAP_ON\n"));
|
||||
t0 |= TEX_WRAP_ON;
|
||||
cmd |= TEX_WRAP_ON;
|
||||
}
|
||||
|
||||
cmd |= TEX_WRAP_ON; /* FIXME: broken if off */
|
||||
t->TextureCMD = t0;
|
||||
vmesa->CMD = cmd;
|
||||
}
|
||||
|
||||
|
||||
static void s3vSetTexFilter(s3vContextPtr vmesa,
|
||||
s3vTextureObjectPtr t,
|
||||
GLenum minf, GLenum magf)
|
||||
{
|
||||
GLuint t0 = t->TextureCMD;
|
||||
GLuint cmd = vmesa->CMD;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vSetTexFilter: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
t0 &= ~TEX_FILTER_MASK;
|
||||
cmd &= ~TEX_FILTER_MASK;
|
||||
|
||||
switch (minf) {
|
||||
case GL_NEAREST:
|
||||
DEBUG(("GL_NEAREST\n"));
|
||||
t0 |= NEAREST;
|
||||
cmd |= NEAREST;
|
||||
break;
|
||||
case GL_LINEAR:
|
||||
DEBUG(("GL_LINEAR\n"));
|
||||
t0 |= LINEAR;
|
||||
cmd |= LINEAR;
|
||||
break;
|
||||
case GL_NEAREST_MIPMAP_NEAREST:
|
||||
DEBUG(("GL_MIPMAP_NEAREST\n"));
|
||||
t0 |= MIP_NEAREST;
|
||||
cmd |= MIP_NEAREST;
|
||||
break;
|
||||
case GL_LINEAR_MIPMAP_NEAREST:
|
||||
DEBUG(("GL_LINEAR_MIPMAP_NEAREST\n"));
|
||||
t0 |= LINEAR_MIP_NEAREST;
|
||||
cmd |= LINEAR_MIP_NEAREST;
|
||||
break;
|
||||
case GL_NEAREST_MIPMAP_LINEAR:
|
||||
DEBUG(("GL_NEAREST_MIPMAP_LINEAR\n"));
|
||||
t0 |= MIP_LINEAR;
|
||||
cmd |= MIP_LINEAR;
|
||||
break;
|
||||
case GL_LINEAR_MIPMAP_LINEAR:
|
||||
DEBUG(("GL_LINEAR_MIPMAP_LINEAR\n"));
|
||||
t0 |= LINEAR_MIP_LINEAR;
|
||||
cmd |= LINEAR_MIP_LINEAR;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* FIXME: bilinear? */
|
||||
|
||||
#if 0
|
||||
switch (magf) {
|
||||
case GL_NEAREST:
|
||||
break;
|
||||
case GL_LINEAR:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
t->TextureCMD = t0;
|
||||
|
||||
DEBUG(("CMD was = 0x%x\n", vmesa->CMD));
|
||||
DEBUG(("CMD is = 0x%x\n", cmd));
|
||||
|
||||
vmesa->CMD = cmd;
|
||||
/* CMDCHANGE(); */
|
||||
}
|
||||
|
||||
|
||||
static void s3vSetTexBorderColor(s3vContextPtr vmesa,
|
||||
s3vTextureObjectPtr t,
|
||||
const GLfloat color[4])
|
||||
{
|
||||
GLubyte c[4];
|
||||
CLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
|
||||
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vSetTexBorderColor: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
/*FIXME: it should depend on tex col format */
|
||||
/* switch(t0 ... t->TextureColorMode) */
|
||||
|
||||
/* case TEX_COL_ARGB1555: */
|
||||
t->TextureBorderColor = S3VIRGEPACKCOLOR555(c[0], c[1], c[2], c[3]);
|
||||
|
||||
DEBUG(("TextureBorderColor = 0x%x\n", t->TextureBorderColor));
|
||||
|
||||
vmesa->TextureBorderColor = t->TextureBorderColor;
|
||||
}
|
||||
|
||||
static void s3vTexParameter( GLcontext *ctx, GLenum target,
|
||||
struct gl_texture_object *tObj,
|
||||
GLenum pname, const GLfloat *params )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) tObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexParameter: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
if (!t) return;
|
||||
|
||||
/* Can't do the update now as we don't know whether to flush
|
||||
* vertices or not. Setting vmesa->new_state means that
|
||||
* s3vUpdateTextureState() will be called before any triangles are
|
||||
* rendered. If a statechange has occurred, it will be detected at
|
||||
* that point, and buffered vertices flushed.
|
||||
*/
|
||||
switch (pname) {
|
||||
case GL_TEXTURE_MIN_FILTER:
|
||||
case GL_TEXTURE_MAG_FILTER:
|
||||
s3vSetTexFilter( vmesa, t, tObj->MinFilter, tObj->MagFilter );
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_WRAP_S:
|
||||
case GL_TEXTURE_WRAP_T:
|
||||
s3vSetTexWrapping( vmesa, t, tObj->WrapS, tObj->WrapT );
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_BORDER_COLOR:
|
||||
s3vSetTexBorderColor( vmesa, t, tObj->BorderColor );
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_BASE_LEVEL:
|
||||
case GL_TEXTURE_MAX_LEVEL:
|
||||
case GL_TEXTURE_MIN_LOD:
|
||||
case GL_TEXTURE_MAX_LOD:
|
||||
/* This isn't the most efficient solution but there doesn't appear to
|
||||
* be a nice alternative for Virge. Since there's no LOD clamping,
|
||||
* we just have to rely on loading the right subset of mipmap levels
|
||||
* to simulate a clamped LOD.
|
||||
*/
|
||||
s3vSwapOutTexObj( vmesa, t );
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (t == vmesa->CurrentTexObj[0])
|
||||
vmesa->dirty |= S3V_UPLOAD_TEX0;
|
||||
|
||||
#if 0
|
||||
if (t == vmesa->CurrentTexObj[1]) {
|
||||
vmesa->dirty |= S3V_UPLOAD_TEX1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void s3vTexEnv( GLcontext *ctx, GLenum target,
|
||||
GLenum pname, const GLfloat *param )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
GLuint unit = ctx->Texture.CurrentUnit;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexEnv: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
/* Only one env color. Need a fallback if env colors are different
|
||||
* and texture setup references env color in both units.
|
||||
*/
|
||||
switch (pname) {
|
||||
case GL_TEXTURE_ENV_COLOR: {
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||
GLfloat *fc = texUnit->EnvColor;
|
||||
GLuint r, g, b, a, col;
|
||||
CLAMPED_FLOAT_TO_UBYTE(r, fc[0]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(g, fc[1]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(b, fc[2]);
|
||||
CLAMPED_FLOAT_TO_UBYTE(a, fc[3]);
|
||||
|
||||
col = ((a << 24) |
|
||||
(r << 16) |
|
||||
(g << 8) |
|
||||
(b << 0));
|
||||
|
||||
break;
|
||||
}
|
||||
case GL_TEXTURE_ENV_MODE:
|
||||
vmesa->TexEnvImageFmt[unit] = 0; /* force recalc of env state */
|
||||
break;
|
||||
case GL_TEXTURE_LOD_BIAS_EXT: {
|
||||
/*
|
||||
struct gl_texture_object *tObj =
|
||||
ctx->Texture.Unit[unit]._Current;
|
||||
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) tObj->DriverData;
|
||||
*/
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void s3vTexImage1D( GLcontext *ctx, GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLint width, GLint border,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) texObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexImage1D: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
if (t) {
|
||||
#if _TEXFLUSH
|
||||
DMAFLUSH();
|
||||
#endif
|
||||
s3vSwapOutTexObj( vmesa, t );
|
||||
/*
|
||||
s3vDestroyTexObj( vmesa, t );
|
||||
texObj->DriverData = 0;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
_mesa_store_teximage1d( ctx, target, level, internalFormat,
|
||||
width, border, format, type,
|
||||
pixels, pack, texObj, texImage );
|
||||
}
|
||||
|
||||
static void s3vTexSubImage1D( GLcontext *ctx,
|
||||
GLenum target,
|
||||
GLint level,
|
||||
GLint xoffset,
|
||||
GLsizei width,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels,
|
||||
const struct gl_pixelstore_attrib *pack,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) texObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexSubImage1D: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
if (t) {
|
||||
#if _TEXFLUSH
|
||||
DMAFLUSH();
|
||||
#endif
|
||||
s3vSwapOutTexObj( vmesa, t );
|
||||
/*
|
||||
s3vDestroyTexObj( vmesa, t );
|
||||
texObj->DriverData = 0;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
_mesa_store_texsubimage1d(ctx, target, level, xoffset, width,
|
||||
format, type, pixels, pack, texObj,
|
||||
texImage);
|
||||
}
|
||||
|
||||
static void s3vTexImage2D( GLcontext *ctx, GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLint width, GLint height, GLint border,
|
||||
GLenum format, GLenum type, const GLvoid *pixels,
|
||||
const struct gl_pixelstore_attrib *packing,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) texObj->DriverData;
|
||||
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexImage2D: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
if (t) {
|
||||
#if _TEXFLUSH
|
||||
DMAFLUSH();
|
||||
#endif
|
||||
s3vSwapOutTexObj( vmesa, t );
|
||||
/*
|
||||
s3vDestroyTexObj( vmesa, t );
|
||||
texObj->DriverData = 0;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
_mesa_store_teximage2d( ctx, target, level, internalFormat,
|
||||
width, height, border, format, type,
|
||||
pixels, packing, texObj, texImage );
|
||||
}
|
||||
|
||||
static void s3vTexSubImage2D( GLcontext *ctx,
|
||||
GLenum target,
|
||||
GLint level,
|
||||
GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels,
|
||||
const struct gl_pixelstore_attrib *packing,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) texObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vTexSubImage2D: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
if (t) {
|
||||
#if _TEXFLUSH
|
||||
DMAFLUSH();
|
||||
#endif
|
||||
s3vSwapOutTexObj( vmesa, t );
|
||||
/*
|
||||
s3vDestroyTexObj( vmesa, t );
|
||||
texObj->DriverData = 0;
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
_mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width,
|
||||
height, format, type, pixels, packing, texObj,
|
||||
texImage);
|
||||
}
|
||||
|
||||
|
||||
static void s3vBindTexture( GLcontext *ctx, GLenum target,
|
||||
struct gl_texture_object *tObj )
|
||||
{
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr) tObj->DriverData;
|
||||
GLuint cmd = vmesa->CMD;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vBindTexture: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
if (!t) {
|
||||
/*
|
||||
GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
|
||||
*/
|
||||
t = CALLOC_STRUCT(s3v_texture_object_t);
|
||||
|
||||
/* Initialize non-image-dependent parts of the state:
|
||||
*/
|
||||
t->globj = tObj;
|
||||
#if 0
|
||||
if (target == GL_TEXTURE_2D) {
|
||||
} else
|
||||
if (target == GL_TEXTURE_1D) {
|
||||
}
|
||||
|
||||
#if X_BYTE_ORDER == X_LITTLE_ENDIAN
|
||||
t->TextureFormat = (TF_LittleEndian |
|
||||
#else
|
||||
t->TextureFormat = (TF_BigEndian |
|
||||
#endif
|
||||
#endif
|
||||
t->dirty_images = ~0;
|
||||
|
||||
tObj->DriverData = t;
|
||||
make_empty_list( t );
|
||||
#if 0
|
||||
s3vSetTexWrapping( vmesa, t, tObj->WrapS, tObj->WrapT );
|
||||
s3vSetTexFilter( vmesa, t, tObj->MinFilter, tObj->MagFilter );
|
||||
s3vSetTexBorderColor( vmesa, t, tObj->BorderColor );
|
||||
#endif
|
||||
}
|
||||
|
||||
cmd = vmesa->CMD & ~MIP_MASK;
|
||||
vmesa->dirty |= S3V_UPLOAD_TEX0;
|
||||
vmesa->TexOffset = t->TextureBaseAddr[tObj->BaseLevel];
|
||||
vmesa->TexStride = t->Pitch;
|
||||
cmd |= MIPMAP_LEVEL(t->WidthLog2);
|
||||
vmesa->CMD = cmd;
|
||||
vmesa->restore_primitive = -1;
|
||||
#if 0
|
||||
printf("t->TextureBaseAddr[0] = 0x%x\n", t->TextureBaseAddr[0]);
|
||||
printf("t->TextureBaseAddr[1] = 0x%x\n", t->TextureBaseAddr[1]);
|
||||
printf("t->TextureBaseAddr[2] = 0x%x\n", t->TextureBaseAddr[2]);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void s3vDeleteTexture( GLcontext *ctx, struct gl_texture_object *tObj )
|
||||
{
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr)tObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vDeleteTexture: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
if (t) {
|
||||
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
|
||||
|
||||
#if _TEXFLUSH
|
||||
if (vmesa) {
|
||||
DMAFLUSH();
|
||||
}
|
||||
#endif
|
||||
|
||||
s3vDestroyTexObj( vmesa, t );
|
||||
tObj->DriverData = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static GLboolean s3vIsTextureResident( GLcontext *ctx,
|
||||
struct gl_texture_object *tObj )
|
||||
{
|
||||
s3vTextureObjectPtr t = (s3vTextureObjectPtr)tObj->DriverData;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vIsTextureResident: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
return (t && t->MemBlock);
|
||||
}
|
||||
|
||||
static void s3vInitTextureObjects( GLcontext *ctx )
|
||||
{
|
||||
/* s3vContextPtr vmesa = S3V_CONTEXT(ctx); */
|
||||
struct gl_texture_object *texObj;
|
||||
GLuint tmp = ctx->Texture.CurrentUnit;
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vInitTextureObjects: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
ctx->Texture.CurrentUnit = 0;
|
||||
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
ctx->Texture.CurrentUnit = 1;
|
||||
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
#endif
|
||||
|
||||
ctx->Texture.CurrentUnit = tmp;
|
||||
}
|
||||
|
||||
|
||||
void s3vInitTextureFuncs( GLcontext *ctx )
|
||||
{
|
||||
#if TEX_DEBUG_ON
|
||||
static unsigned int times=0;
|
||||
DEBUG_TEX(("*** s3vInitTextureFuncs: #%i ***\n", ++times));
|
||||
#endif
|
||||
|
||||
ctx->Driver.TexEnv = s3vTexEnv;
|
||||
ctx->Driver.TexImage2D = s3vTexImage2D;
|
||||
ctx->Driver.TexSubImage2D = s3vTexSubImage2D;
|
||||
ctx->Driver.BindTexture = s3vBindTexture;
|
||||
ctx->Driver.DeleteTexture = s3vDeleteTexture;
|
||||
ctx->Driver.TexParameter = s3vTexParameter;
|
||||
ctx->Driver.UpdateTexturePalette = 0;
|
||||
ctx->Driver.IsTextureResident = s3vIsTextureResident;
|
||||
|
||||
s3vInitTextureObjects( ctx );
|
||||
}
|
||||
341
src/mesa/drivers/dri/s3v/s3v_xmesa.c
Normal file
341
src/mesa/drivers/dri/s3v/s3v_xmesa.c
Normal file
|
|
@ -0,0 +1,341 @@
|
|||
/*
|
||||
* Author: Max Lingua <sunmax@libero.it>
|
||||
*/
|
||||
|
||||
#include "s3v_context.h"
|
||||
#include "s3v_vb.h"
|
||||
#include "s3v_dri.h"
|
||||
#include "main/context.h"
|
||||
#include "main/matrix.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/viewport.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
#include "tnl/tnl.h"
|
||||
#include "vbo/vbo.h"
|
||||
|
||||
/* #define DEBUG(str) printf str */
|
||||
|
||||
static const __DRIconfig **
|
||||
s3vInitScreen(__DRIscreen *sPriv)
|
||||
{
|
||||
sPriv->private = (void *) s3vCreateScreen( sPriv );
|
||||
|
||||
if (!sPriv->private) {
|
||||
s3vDestroyScreen( sPriv );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
s3vDestroyContext(__DRIcontextPrivate *driContextPriv)
|
||||
{
|
||||
s3vContextPtr vmesa = (s3vContextPtr)driContextPriv->driverPrivate;
|
||||
|
||||
if (vmesa) {
|
||||
_swsetup_DestroyContext( vmesa->glCtx );
|
||||
_tnl_DestroyContext( vmesa->glCtx );
|
||||
_vbo_DestroyContext( vmesa->glCtx );
|
||||
_swrast_DestroyContext( vmesa->glCtx );
|
||||
|
||||
s3vFreeVB( vmesa->glCtx );
|
||||
|
||||
/* free the Mesa context */
|
||||
vmesa->glCtx->DriverCtx = NULL;
|
||||
_mesa_destroy_context(vmesa->glCtx);
|
||||
|
||||
_mesa_free(vmesa);
|
||||
driContextPriv->driverPrivate = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static GLboolean
|
||||
s3vCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
||||
__DRIdrawablePrivate *driDrawPriv,
|
||||
const __GLcontextModes *mesaVis,
|
||||
GLboolean isPixmap )
|
||||
{
|
||||
s3vScreenPtr screen = (s3vScreenPtr) driScrnPriv->private;
|
||||
|
||||
if (isPixmap) {
|
||||
return GL_FALSE; /* not implemented */
|
||||
}
|
||||
else {
|
||||
struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
|
||||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->frontOffset, screen->frontPitch,
|
||||
driDrawPriv);
|
||||
s3vSetSpanFunctions(frontRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
driDrawPriv);
|
||||
s3vSetSpanFunctions(backRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
|
||||
backRb->backBuffer = GL_TRUE;
|
||||
}
|
||||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
driDrawPriv);
|
||||
s3vSetSpanFunctions(depthRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
driDrawPriv);
|
||||
s3vSetSpanFunctions(depthRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
}
|
||||
|
||||
/* no h/w stencil yet?
|
||||
if (mesaVis->stencilBits > 0) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8, NULL,
|
||||
screen->cpp, screen->depthOffset,
|
||||
screen->depthPitch, driDrawPriv);
|
||||
s3vSetSpanFunctions(stencilRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
|
||||
}
|
||||
*/
|
||||
|
||||
_mesa_add_soft_renderbuffers(fb,
|
||||
GL_FALSE, /* color */
|
||||
GL_FALSE, /* depth */
|
||||
mesaVis->stencilBits > 0,
|
||||
mesaVis->accumRedBits > 0,
|
||||
GL_FALSE, /* alpha */
|
||||
GL_FALSE /* aux */);
|
||||
driDrawPriv->driverPrivate = (void *) fb;
|
||||
|
||||
return (driDrawPriv->driverPrivate != NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
s3vDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
|
||||
{
|
||||
_mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
s3vSwapBuffers(__DRIdrawablePrivate *drawablePrivate)
|
||||
{
|
||||
__DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
|
||||
__DRIscreenPrivate *sPriv;
|
||||
GLcontext *ctx;
|
||||
s3vContextPtr vmesa;
|
||||
s3vScreenPtr s3vscrn;
|
||||
|
||||
vmesa = (s3vContextPtr) dPriv->driContextPriv->driverPrivate;
|
||||
sPriv = vmesa->driScreen;
|
||||
s3vscrn = vmesa->s3vScreen;
|
||||
ctx = vmesa->glCtx;
|
||||
|
||||
DEBUG(("*** s3vSwapBuffers ***\n"));
|
||||
|
||||
/* DMAFLUSH(); */
|
||||
|
||||
_mesa_notifySwapBuffers( ctx );
|
||||
|
||||
vmesa = (s3vContextPtr) dPriv->driContextPriv->driverPrivate;
|
||||
/* driScrnPriv = vmesa->driScreen; */
|
||||
|
||||
/* if (vmesa->EnabledFlags & S3V_BACK_BUFFER) */
|
||||
|
||||
/* _mesa_notifySwapBuffers( ctx ); */
|
||||
#if 1
|
||||
{
|
||||
int x0, y0, x1, y1;
|
||||
/*
|
||||
int nRect = dPriv->numClipRects;
|
||||
XF86DRIClipRectPtr pRect = dPriv->pClipRects;
|
||||
|
||||
__DRIscreenPrivate *driScrnPriv = vmesa->driScreen;
|
||||
*/
|
||||
|
||||
/*
|
||||
DEBUG(("s3vSwapBuffers: S3V_BACK_BUFFER = 1 - nClip = %i\n", nRect));
|
||||
*/
|
||||
/* vmesa->drawOffset=vmesa->s3vScreen->backOffset; */
|
||||
|
||||
x0 = dPriv->x;
|
||||
y0 = dPriv->y;
|
||||
|
||||
x1 = x0 + dPriv->w - 1;
|
||||
y1 = y0 + dPriv->h - 1;
|
||||
|
||||
DMAOUT_CHECK(BITBLT_SRC_BASE, 15);
|
||||
DMAOUT(vmesa->s3vScreen->backOffset);
|
||||
DMAOUT(0); /* 0xc0000000 */
|
||||
DMAOUT( ((x0 << 16) | x1) );
|
||||
DMAOUT( ((y0 << 16) | y1) );
|
||||
DMAOUT( (vmesa->DestStride << 16) | vmesa->SrcStride );
|
||||
DMAOUT( (~(0)) );
|
||||
DMAOUT( (~(0)) );
|
||||
DMAOUT(0);
|
||||
DMAOUT(0);
|
||||
/* FIXME */
|
||||
DMAOUT(0);
|
||||
DMAOUT(0);
|
||||
DMAOUT( (0x01 | /* Autoexecute */
|
||||
0x02 | /* clip */
|
||||
0x04 | /* 16 bit */
|
||||
0x20 | /* draw */
|
||||
0x400 | /* word alignment (bit 10=1) */
|
||||
(0x2 << 11) | /* offset = 1 byte */
|
||||
(0xCC << 17) | /* rop #204 */
|
||||
(0x3 << 25)) ); /* l-r, t-b */
|
||||
DMAOUT(vmesa->ScissorWH);
|
||||
DMAOUT( /* 0 */ vmesa->SrcXY );
|
||||
DMAOUT( (dPriv->x << 16) | dPriv->y );
|
||||
DMAFINISH();
|
||||
|
||||
DMAFLUSH();
|
||||
|
||||
vmesa->restore_primitive = -1;
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
s3vMakeCurrent(__DRIcontextPrivate *driContextPriv,
|
||||
__DRIdrawablePrivate *driDrawPriv,
|
||||
__DRIdrawablePrivate *driReadPriv)
|
||||
{
|
||||
int x1,x2,y1,y2;
|
||||
int cx, cy, cw, ch;
|
||||
unsigned int src_stride, dest_stride;
|
||||
int cl;
|
||||
|
||||
s3vContextPtr vmesa;
|
||||
__DRIdrawablePrivate *dPriv = driDrawPriv;
|
||||
vmesa = (s3vContextPtr) dPriv->driContextPriv->driverPrivate;
|
||||
|
||||
DEBUG(("s3vMakeCurrent\n"));
|
||||
|
||||
DEBUG(("dPriv->x=%i y=%i w=%i h=%i\n", dPriv->x, dPriv->y,
|
||||
dPriv->w, dPriv->h));
|
||||
|
||||
if (driContextPriv) {
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
s3vContextPtr oldVirgeCtx = ctx ? S3V_CONTEXT(ctx) : NULL;
|
||||
s3vContextPtr newVirgeCtx = (s3vContextPtr) driContextPriv->driverPrivate;
|
||||
|
||||
if ( newVirgeCtx != oldVirgeCtx ) {
|
||||
|
||||
newVirgeCtx->dirty = ~0;
|
||||
cl = 1;
|
||||
DEBUG(("newVirgeCtx != oldVirgeCtx\n"));
|
||||
/* s3vUpdateClipping(newVirgeCtx->glCtx ); */
|
||||
}
|
||||
|
||||
if (newVirgeCtx->driDrawable != driDrawPriv) {
|
||||
newVirgeCtx->driDrawable = driDrawPriv;
|
||||
DEBUG(("driDrawable != driDrawPriv\n"));
|
||||
s3vUpdateWindow ( newVirgeCtx->glCtx );
|
||||
s3vUpdateViewportOffset( newVirgeCtx->glCtx );
|
||||
/* s3vUpdateClipping(newVirgeCtx->glCtx ); */
|
||||
}
|
||||
/*
|
||||
s3vUpdateWindow ( newVirgeCtx->glCtx );
|
||||
s3vUpdateViewportOffset( newVirgeCtx->glCtx );
|
||||
*/
|
||||
|
||||
/*
|
||||
_mesa_make_current( newVirgeCtx->glCtx,
|
||||
(GLframebuffer *) driDrawPriv->driverPrivate,
|
||||
(GLframebuffer *) driReadPriv->driverPrivate );
|
||||
|
||||
_mesa_set_viewport(newVirgeCtx->glCtx, 0, 0,
|
||||
newVirgeCtx->driDrawable->w,
|
||||
newVirgeCtx->driDrawable->h);
|
||||
*/
|
||||
|
||||
#if 0
|
||||
newVirgeCtx->Window &= ~W_GIDMask;
|
||||
newVirgeCtx->Window |= (driDrawPriv->index << 5);
|
||||
CHECK_DMA_BUFFER(newVirgeCtx,1);
|
||||
WRITE(newVirgeCtx->buf, S3VWindow, newVirgeCtx->Window);
|
||||
#endif
|
||||
|
||||
newVirgeCtx->new_state |= S3V_NEW_WINDOW; /* FIXME */
|
||||
|
||||
_mesa_make_current( newVirgeCtx->glCtx,
|
||||
(GLframebuffer *) driDrawPriv->driverPrivate,
|
||||
(GLframebuffer *) driReadPriv->driverPrivate );
|
||||
|
||||
if (!newVirgeCtx->glCtx->Viewport.Width) {
|
||||
_mesa_set_viewport(newVirgeCtx->glCtx, 0, 0,
|
||||
driDrawPriv->w, driDrawPriv->h);
|
||||
|
||||
/* s3vUpdateClipping(newVirgeCtx->glCtx ); */
|
||||
}
|
||||
|
||||
/*
|
||||
if (cl) {
|
||||
s3vUpdateClipping(newVirgeCtx->glCtx );
|
||||
cl =0;
|
||||
}
|
||||
*/
|
||||
|
||||
newVirgeCtx->new_state |= S3V_NEW_CLIP;
|
||||
|
||||
if (1) {
|
||||
cx = dPriv->x;
|
||||
cw = dPriv->w;
|
||||
cy = dPriv->y;
|
||||
ch = dPriv->h;
|
||||
}
|
||||
|
||||
x1 = y1 = 0;
|
||||
x2 = cw-1;
|
||||
y2 = ch-1;
|
||||
|
||||
/* src_stride = vmesa->s3vScreen->w * vmesa->s3vScreen->cpp;
|
||||
dest_stride = ((x2+31)&~31) * vmesa->s3vScreen->cpp; */
|
||||
src_stride = vmesa->driScreen->fbWidth * 2;
|
||||
dest_stride = ((x2+31)&~31) * 2;
|
||||
} else {
|
||||
_mesa_make_current( NULL, NULL, NULL );
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
static GLboolean
|
||||
s3vUnbindContext( __DRIcontextPrivate *driContextPriv )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
const struct __DriverAPIRec driDriverAPI = {
|
||||
.InitScreen = s3vInitScreen,
|
||||
.DestroyScreen = s3vDestroyScreen,
|
||||
.CreateContext = s3vCreateContext,
|
||||
.DestroyContext = s3vDestroyContext,
|
||||
.CreateBuffer = s3vCreateBuffer,
|
||||
.DestroyBuffer = s3vDestroyBuffer,
|
||||
.SwapBuffers = s3vSwapBuffers,
|
||||
.MakeCurrent = s3vMakeCurrent,
|
||||
.UnbindContext = s3vUnbindContext,
|
||||
};
|
||||
|
|
@ -436,7 +436,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
|
|||
if (ctx->Const.MaxTextureLevels <= 6) { /*spec requires at least 64x64*/
|
||||
__driUtilMessage("Not enough texture memory. "
|
||||
"Falling back to indirect rendering.");
|
||||
Xfree(imesa);
|
||||
_mesa_free(imesa);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -574,7 +574,7 @@ savageDestroyContext(__DRIcontextPrivate *driContextPriv)
|
|||
_mesa_destroy_context(imesa->glCtx);
|
||||
|
||||
/* no longer use vertex_dma_buf*/
|
||||
Xfree(imesa);
|
||||
_mesa_free(imesa);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -602,7 +602,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
(GLubyte *) screen->aperture.map
|
||||
+ 0x01000000 * TARGET_FRONT,
|
||||
screen->cpp,
|
||||
|
|
@ -615,7 +615,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888,
|
||||
(GLubyte *) screen->aperture.map
|
||||
+ 0x01000000 * TARGET_BACK,
|
||||
screen->cpp,
|
||||
|
|
@ -628,7 +628,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16,
|
||||
(GLubyte *) screen->aperture.map
|
||||
+ 0x01000000 * TARGET_DEPTH,
|
||||
screen->zpp,
|
||||
|
|
@ -639,7 +639,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8_Z24,
|
||||
(GLubyte *) screen->aperture.map
|
||||
+ 0x01000000 * TARGET_DEPTH,
|
||||
screen->zpp,
|
||||
|
|
@ -651,7 +651,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8,
|
||||
(GLubyte *) screen->aperture.map
|
||||
+ 0x01000000 * TARGET_DEPTH,
|
||||
screen->zpp,
|
||||
|
|
|
|||
|
|
@ -255,15 +255,13 @@ void
|
|||
savageSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis,
|
||||
GLboolean float_depth)
|
||||
{
|
||||
if (drb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
savageInitPointers_565(&drb->Base);
|
||||
}
|
||||
else {
|
||||
savageInitPointers_8888(&drb->Base);
|
||||
}
|
||||
if (drb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
savageInitPointers_565(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
savageInitPointers_8888(&drb->Base);
|
||||
}
|
||||
else if (drb->Base.Format == MESA_FORMAT_Z16) {
|
||||
if (float_depth) {
|
||||
savageInitDepthPointers_z16f(&drb->Base);
|
||||
}
|
||||
|
|
@ -271,7 +269,7 @@ savageSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis,
|
|||
savageInitDepthPointers_z16(&drb->Base);
|
||||
}
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_S8_Z24) {
|
||||
if (float_depth) {
|
||||
savageInitDepthPointers_s8_z24f(&drb->Base);
|
||||
}
|
||||
|
|
@ -279,7 +277,7 @@ savageSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis,
|
|||
savageInitDepthPointers_s8_z24(&drb->Base);
|
||||
}
|
||||
}
|
||||
else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
else if (drb->Base.Format == MESA_FORMAT_S8) {
|
||||
savageInitStencilPointers_s8_z24(&drb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,29 +23,24 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <GL/gl.h>
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/mm.h"
|
||||
#include "savagecontext.h"
|
||||
#include "savagetex.h"
|
||||
#include "savagetris.h"
|
||||
#include "savageioctl.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
#include "savage_bci.h"
|
||||
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/convolve.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/enums.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
|
||||
#include "savagecontext.h"
|
||||
#include "savagetex.h"
|
||||
#include "savagetris.h"
|
||||
#include "savageioctl.h"
|
||||
#include "savage_bci.h"
|
||||
|
||||
#include "xmlpool.h"
|
||||
|
||||
#define TILE_INDEX_DXT1 0
|
||||
|
|
@ -527,6 +522,11 @@ savageAllocTexObj( struct gl_texture_object *texObj )
|
|||
* components to white. This way we get the correct result.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
/* Using MESA_FORMAT_RGBA8888 to store alpha-only textures should
|
||||
* work but is space inefficient.
|
||||
*/
|
||||
|
||||
static GLboolean
|
||||
_savage_texstore_a1114444(TEXSTORE_PARAMS);
|
||||
|
||||
|
|
@ -590,10 +590,11 @@ _savage_texstore_a1114444(TEXSTORE_PARAMS)
|
|||
return GL_FALSE;
|
||||
_mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);
|
||||
for (img = 0; img < srcDepth; img++) {
|
||||
GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
|
||||
GLubyte *dstRow = (GLubyte *) dstAddr
|
||||
+ dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes
|
||||
+ dstImageOffsets[dstZoffset + img] * texelBytes
|
||||
+ dstYoffset * dstRowStride
|
||||
+ dstXoffset * dstFormat->TexelBytes;
|
||||
+ dstXoffset * texelBytes;
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
GLushort *dstUI = (GLushort *) dstRow;
|
||||
for (col = 0; col < srcWidth; col++) {
|
||||
|
|
@ -629,10 +630,11 @@ _savage_texstore_a1118888(TEXSTORE_PARAMS)
|
|||
return GL_FALSE;
|
||||
_mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);
|
||||
for (img = 0; img < srcDepth; img++) {
|
||||
GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
|
||||
GLubyte *dstRow = (GLubyte *) dstAddr
|
||||
+ dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes
|
||||
+ dstImageOffsets[dstZoffset + img] * texelBytes
|
||||
+ dstYoffset * dstRowStride
|
||||
+ dstXoffset * dstFormat->TexelBytes;
|
||||
+ dstXoffset * texelBytes;
|
||||
for (row = 0; row < srcHeight; row++) {
|
||||
GLuint *dstUI = (GLuint *) dstRow;
|
||||
for (col = 0; col < srcWidth; col++) {
|
||||
|
|
@ -647,10 +649,11 @@ _savage_texstore_a1118888(TEXSTORE_PARAMS)
|
|||
|
||||
return GL_TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Called by the _mesa_store_teximage[123]d() functions. */
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -669,15 +672,15 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_INT_10_10_10_2:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
|
||||
case 3:
|
||||
|
|
@ -686,129 +689,152 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
}
|
||||
|
||||
case GL_RGBA8:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return !force16bpt ?
|
||||
&_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB10_A2:
|
||||
return !force16bpt ?
|
||||
&_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
|
||||
MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_RGB5:
|
||||
case GL_RGB4:
|
||||
case GL_R3_G3_B2:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return isSavage4 ? &_mesa_texformat_a8 : (
|
||||
#if 0
|
||||
return isSavage4 ? MESA_FORMAT_a8 : (
|
||||
do32bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
|
||||
#else
|
||||
if (isSavage4)
|
||||
return MESA_FORMAT_A8;
|
||||
else if (do32bpt)
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
else
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
#endif
|
||||
case GL_ALPHA4:
|
||||
return isSavage4 ? &_mesa_texformat_a8 : &_savage_texformat_a1114444;
|
||||
#if 0
|
||||
return isSavage4 ? MESA_FORMAT_a8 : &_savage_texformat_a1114444;
|
||||
#else
|
||||
if (isSavage4)
|
||||
return MESA_FORMAT_A8;
|
||||
else
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
#endif
|
||||
case GL_ALPHA8:
|
||||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
return isSavage4 ? &_mesa_texformat_a8 : (
|
||||
#if 0
|
||||
return isSavage4 ? MESA_FORMAT_a8 : (
|
||||
!force16bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
|
||||
|
||||
#else
|
||||
if (isSavage4)
|
||||
return MESA_FORMAT_A8;
|
||||
else if (force16bpt)
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
else
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
#endif
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
/* no alpha, but use argb1555 in 16bit case to get pure grey values */
|
||||
return isSavage4 ? &_mesa_texformat_l8 : (
|
||||
do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555);
|
||||
return isSavage4 ? MESA_FORMAT_L8 : (
|
||||
do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
|
||||
case GL_LUMINANCE4:
|
||||
return isSavage4 ? &_mesa_texformat_l8 : &_mesa_texformat_argb1555;
|
||||
return isSavage4 ? MESA_FORMAT_L8 : MESA_FORMAT_ARGB1555;
|
||||
case GL_LUMINANCE8:
|
||||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
return isSavage4 ? &_mesa_texformat_l8 : (
|
||||
!force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555);
|
||||
return isSavage4 ? MESA_FORMAT_L8 : (
|
||||
!force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
|
||||
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
/* Savage4 has a al44 texture format. But it's not supported by Mesa. */
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
case GL_LUMINANCE4_ALPHA4:
|
||||
case GL_LUMINANCE6_ALPHA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_LUMINANCE8_ALPHA8:
|
||||
case GL_LUMINANCE12_ALPHA4:
|
||||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
#if 0
|
||||
/* TFT_I8 produces garbage on ProSavageDDR and subsequent texture
|
||||
* disable keeps rendering garbage. Disabled for now. */
|
||||
case GL_INTENSITY:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return isSavage4 ? &_mesa_texformat_i8 : (
|
||||
do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444);
|
||||
return isSavage4 ? MESA_FORMAT_i8 : (
|
||||
do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
|
||||
case GL_INTENSITY4:
|
||||
return isSavage4 ? &_mesa_texformat_i8 : &_mesa_texformat_argb4444;
|
||||
return isSavage4 ? MESA_FORMAT_i8 : MESA_FORMAT_ARGB4444;
|
||||
case GL_INTENSITY8:
|
||||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
return isSavage4 ? &_mesa_texformat_i8 : (
|
||||
!force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444);
|
||||
return isSavage4 ? MESA_FORMAT_i8 : (
|
||||
!force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
|
||||
#else
|
||||
case GL_INTENSITY:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
case GL_INTENSITY4:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_INTENSITY8:
|
||||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
return !force16bpt ? &_mesa_texformat_argb8888 :
|
||||
&_mesa_texformat_argb4444;
|
||||
return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
#endif
|
||||
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
if (!isSavage4)
|
||||
/* Not the best choice but Savage3D/MX/IX don't support DXT3 or DXT5. */
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
/* fall through */
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
|
||||
/*
|
||||
case GL_COLOR_INDEX:
|
||||
|
|
@ -822,7 +848,7 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
*/
|
||||
default:
|
||||
_mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -837,7 +863,7 @@ static void savageSetTexImages( savageContextPtr imesa,
|
|||
assert(t);
|
||||
assert(image);
|
||||
|
||||
switch (image->TexFormat->MesaFormat) {
|
||||
switch (image->TexFormat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
textureFormat = TFT_ARGB8888;
|
||||
t->texelBytes = tileIndex = 4;
|
||||
|
|
@ -2083,6 +2109,7 @@ void savageDDInitTextureFuncs( struct dd_function_table *functions )
|
|||
|
||||
/* Texel fetching with our custom texture formats works just like
|
||||
* the standard argb formats. */
|
||||
#if 0
|
||||
_savage_texformat_a1114444.FetchTexel1D = _mesa_texformat_argb4444.FetchTexel1D;
|
||||
_savage_texformat_a1114444.FetchTexel2D = _mesa_texformat_argb4444.FetchTexel2D;
|
||||
_savage_texformat_a1114444.FetchTexel3D = _mesa_texformat_argb4444.FetchTexel3D;
|
||||
|
|
@ -2096,4 +2123,5 @@ void savageDDInitTextureFuncs( struct dd_function_table *functions )
|
|||
_savage_texformat_a1118888.FetchTexel1Df= _mesa_texformat_argb8888.FetchTexel1Df;
|
||||
_savage_texformat_a1118888.FetchTexel2Df= _mesa_texformat_argb8888.FetchTexel2Df;
|
||||
_savage_texformat_a1118888.FetchTexel3Df= _mesa_texformat_argb8888.FetchTexel3Df;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "sis_tris.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
|
||||
|
|
@ -142,25 +143,25 @@ sisInitRenderbuffer(struct gl_renderbuffer *rb, GLenum format)
|
|||
|
||||
if (format == GL_RGBA) {
|
||||
/* Color */
|
||||
rb->_BaseFormat = GL_RGBA;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT16) {
|
||||
/* Depth */
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT24) {
|
||||
/* Depth */
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
rb->Format = MESA_FORMAT_Z32;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
}
|
||||
else {
|
||||
/* Stencil */
|
||||
ASSERT(format == GL_STENCIL_INDEX8_EXT);
|
||||
rb->_BaseFormat = GL_STENCIL_INDEX;
|
||||
rb->Format = MESA_FORMAT_S8;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,24 +176,22 @@ sisDDInitSpanFuncs( GLcontext *ctx )
|
|||
void
|
||||
sisSetSpanFunctions(struct sis_renderbuffer *srb, const GLvisual *vis)
|
||||
{
|
||||
if (srb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
sisInitPointers_RGB565( &srb->Base );
|
||||
}
|
||||
else {
|
||||
sisInitPointers_ARGB8888( &srb->Base );
|
||||
}
|
||||
if (srb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
sisInitPointers_RGB565( &srb->Base );
|
||||
}
|
||||
else if (srb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (srb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
sisInitPointers_ARGB8888( &srb->Base );
|
||||
}
|
||||
else if (srb->Base.Format == MESA_FORMAT_Z16) {
|
||||
sisInitDepthPointers_z16(&srb->Base);
|
||||
}
|
||||
else if (srb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
|
||||
else if (srb->Base.Format == MESA_FORMAT_S8_Z24) {
|
||||
sisInitDepthPointers_z24_s8(&srb->Base);
|
||||
}
|
||||
else if (srb->Base.InternalFormat == GL_DEPTH_COMPONENT32) {
|
||||
else if (srb->Base.Format == MESA_FORMAT_Z32) {
|
||||
sisInitDepthPointers_z32(&srb->Base);
|
||||
}
|
||||
else if (srb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
else if (srb->Base.Format == MESA_FORMAT_S8) {
|
||||
sisInitStencilPointers_z24_s8(&srb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,17 +28,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
* Eric Anholt <anholt@FreeBSD.org>
|
||||
*/
|
||||
|
||||
#include "sis_context.h"
|
||||
#include "sis_alloc.h"
|
||||
#include "sis_tex.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texobj.h"
|
||||
|
||||
#include "sis_context.h"
|
||||
#include "sis_alloc.h"
|
||||
#include "sis_tex.h"
|
||||
#include "xmlpool.h"
|
||||
|
||||
#define ALIGN(value, align) (GLubyte *)((long)(value + align - 1) & ~(align - 1))
|
||||
|
|
@ -65,7 +63,7 @@ sisAllocTexImage( sisContextPtr smesa, sisTexObjPtr t, int level,
|
|||
|
||||
if (t->format == 0) {
|
||||
t->format = image->_BaseFormat;
|
||||
switch (image->TexFormat->MesaFormat)
|
||||
switch (image->TexFormat)
|
||||
{
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
t->hwformat = TEXEL_ARGB_8888_32;
|
||||
|
|
@ -101,13 +99,12 @@ sisAllocTexImage( sisContextPtr smesa, sisTexObjPtr t, int level,
|
|||
t->hwformat = TEXEL_VUY422;
|
||||
break;
|
||||
default:
|
||||
sis_fatal_error("Bad texture format 0x%x.\n",
|
||||
image->TexFormat->MesaFormat);
|
||||
sis_fatal_error("Bad texture format 0x%x.\n", image->TexFormat);
|
||||
}
|
||||
}
|
||||
assert(t->format == image->_BaseFormat);
|
||||
|
||||
texel_size = image->TexFormat->TexelBytes;
|
||||
texel_size = _mesa_get_format_bytes(image->TexFormat);
|
||||
size = image->Width * image->Height * texel_size + TEXTURE_HW_PLUS;
|
||||
|
||||
addr = sisAllocFB( smesa, size, &t->image[level].handle );
|
||||
|
|
@ -230,7 +227,7 @@ static GLboolean sisIsTextureResident( GLcontext * ctx,
|
|||
return (texObj->DriverData != NULL);
|
||||
}
|
||||
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -248,15 +245,15 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_INT_10_10_10_2:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
|
||||
case 3:
|
||||
|
|
@ -265,46 +262,46 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
switch ( type ) {
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
default:
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
}
|
||||
|
||||
case GL_RGBA8:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return !force16bpt ?
|
||||
&_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB10_A2:
|
||||
return !force16bpt ?
|
||||
&_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
|
||||
MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_RGB5:
|
||||
case GL_RGB4:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_R3_G3_B2:
|
||||
return &_mesa_texformat_rgb332;
|
||||
return MESA_FORMAT_RGB332;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4: /* FIXME: This could use its own texstore */
|
||||
|
|
@ -312,7 +309,7 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return &_mesa_texformat_a8;
|
||||
return MESA_FORMAT_A8;
|
||||
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -321,7 +318,7 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
return &_mesa_texformat_l8;
|
||||
return MESA_FORMAT_L8;
|
||||
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
|
|
@ -332,7 +329,7 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
|
|
@ -340,19 +337,19 @@ sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_i8;
|
||||
return MESA_FORMAT_I8;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
default:
|
||||
_mesa_problem(ctx, "unexpected format in sisDDChooseTextureFormat: %d",
|
||||
internalFormat);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -425,7 +422,7 @@ static void sisTexSubImage1D( GLcontext *ctx,
|
|||
|
||||
/* Upload the texture */
|
||||
WaitEngIdle(smesa);
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
copySize = width * texelBytes;
|
||||
src = (char *)texImage->Data + xoffset * texelBytes;
|
||||
|
|
@ -513,7 +510,7 @@ static void sisTexSubImage2D( GLcontext *ctx,
|
|||
|
||||
/* Upload the texture */
|
||||
WaitEngIdle(smesa);
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
copySize = width * texelBytes;
|
||||
src = (char *)texImage->Data + (xoffset + yoffset * texImage->Width) *
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "main/colormac.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/texformat.h"
|
||||
|
||||
#include "sis_context.h"
|
||||
#include "sis_state.h"
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
|
||||
#include "main/context.h"
|
||||
#include "main/extensions.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/renderbuffer.h"
|
||||
|
|
@ -306,50 +307,38 @@ swrast_new_renderbuffer(const GLvisual *visual, GLboolean front)
|
|||
|
||||
switch (pixel_format) {
|
||||
case PF_A8R8G8B8:
|
||||
xrb->Base.Format = MESA_FORMAT_ARGB8888;
|
||||
xrb->Base.InternalFormat = GL_RGBA;
|
||||
xrb->Base._BaseFormat = GL_RGBA;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.RedBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.GreenBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.BlueBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.AlphaBits = 8 * sizeof(GLubyte);
|
||||
xrb->bpp = 32;
|
||||
break;
|
||||
case PF_X8R8G8B8:
|
||||
xrb->Base.Format = MESA_FORMAT_ARGB8888; /* XXX */
|
||||
xrb->Base.InternalFormat = GL_RGB;
|
||||
xrb->Base._BaseFormat = GL_RGB;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.RedBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.GreenBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.BlueBits = 8 * sizeof(GLubyte);
|
||||
xrb->Base.AlphaBits = 0;
|
||||
xrb->bpp = 32;
|
||||
break;
|
||||
case PF_R5G6B5:
|
||||
xrb->Base.Format = MESA_FORMAT_RGB565;
|
||||
xrb->Base.InternalFormat = GL_RGB;
|
||||
xrb->Base._BaseFormat = GL_RGB;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.RedBits = 5 * sizeof(GLubyte);
|
||||
xrb->Base.GreenBits = 6 * sizeof(GLubyte);
|
||||
xrb->Base.BlueBits = 5 * sizeof(GLubyte);
|
||||
xrb->Base.AlphaBits = 0;
|
||||
xrb->bpp = 16;
|
||||
break;
|
||||
case PF_R3G3B2:
|
||||
xrb->Base.Format = MESA_FORMAT_RGB332;
|
||||
xrb->Base.InternalFormat = GL_RGB;
|
||||
xrb->Base._BaseFormat = GL_RGB;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.RedBits = 3 * sizeof(GLubyte);
|
||||
xrb->Base.GreenBits = 3 * sizeof(GLubyte);
|
||||
xrb->Base.BlueBits = 2 * sizeof(GLubyte);
|
||||
xrb->Base.AlphaBits = 0;
|
||||
xrb->bpp = 8;
|
||||
break;
|
||||
case PF_CI8:
|
||||
xrb->Base.Format = MESA_FORMAT_CI8;
|
||||
xrb->Base.InternalFormat = GL_COLOR_INDEX8_EXT;
|
||||
xrb->Base._BaseFormat = GL_COLOR_INDEX;
|
||||
xrb->Base.DataType = GL_UNSIGNED_BYTE;
|
||||
xrb->Base.IndexBits = 8 * sizeof(GLubyte);
|
||||
xrb->bpp = 8;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL, screen->cpp,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->fbOffset, screen->width, driDrawPriv);
|
||||
tdfxSetSpanFunctions(frontRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
|
||||
|
|
@ -178,7 +178,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL, screen->cpp,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->backOffset, screen->width,
|
||||
driDrawPriv);
|
||||
tdfxSetSpanFunctions(backRb, mesaVis);
|
||||
|
|
@ -188,7 +188,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16, NULL, screen->cpp,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->width,
|
||||
driDrawPriv);
|
||||
tdfxSetSpanFunctions(depthRb, mesaVis);
|
||||
|
|
@ -196,7 +196,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24, NULL, screen->cpp,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->width,
|
||||
driDrawPriv);
|
||||
tdfxSetSpanFunctions(depthRb, mesaVis);
|
||||
|
|
@ -205,7 +205,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT, NULL, screen->cpp,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->width,
|
||||
driDrawPriv);
|
||||
tdfxSetSpanFunctions(stencilRb, mesaVis);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@
|
|||
|
||||
#include "main/mtypes.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/teximage.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@
|
|||
#include "main/image.h"
|
||||
#include "main/mipmap.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
@ -72,13 +71,13 @@ _mesa_halve2x2_teximage2d ( GLcontext *ctx,
|
|||
GLubyte *_d = NULL;
|
||||
GLenum _t = 0;
|
||||
|
||||
if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) {
|
||||
if (texImage->TexFormat == MESA_FORMAT_RGB565) {
|
||||
_t = GL_UNSIGNED_SHORT_5_6_5_REV;
|
||||
bpt = bytesPerPixel;
|
||||
} else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB4444) {
|
||||
} else if (texImage->TexFormat == MESA_FORMAT_ARGB4444) {
|
||||
_t = GL_UNSIGNED_SHORT_4_4_4_4_REV;
|
||||
bpt = bytesPerPixel;
|
||||
} else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB1555) {
|
||||
} else if (texImage->TexFormat == MESA_FORMAT_ARGB1555) {
|
||||
_t = GL_UNSIGNED_SHORT_1_5_5_5_REV;
|
||||
bpt = bytesPerPixel;
|
||||
}
|
||||
|
|
@ -93,13 +92,13 @@ _mesa_halve2x2_teximage2d ( GLcontext *ctx,
|
|||
}
|
||||
_s = src = MALLOC(srcRowStride * srcHeight);
|
||||
_d = dst = MALLOC(dstWidth * bytesPerPixel * dstHeight);
|
||||
_mesa_texstore_rgba8888(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, src,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
srcRowStride, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
srcWidth, srcHeight, 1,
|
||||
texImage->_BaseFormat, _t, srcImage, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, GL_RGBA,
|
||||
MESA_FORMAT_RGBA8888_REV, src,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
srcRowStride, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
srcWidth, srcHeight, 1,
|
||||
texImage->_BaseFormat, _t, srcImage, &ctx->DefaultPacking);
|
||||
}
|
||||
|
||||
if (srcHeight == 1) {
|
||||
|
|
@ -140,13 +139,13 @@ _mesa_halve2x2_teximage2d ( GLcontext *ctx,
|
|||
if (bpt) {
|
||||
src = _s;
|
||||
dst = _d;
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, dstImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstWidth * bpt,
|
||||
&dstImageOffsets,
|
||||
dstWidth, dstHeight, 1,
|
||||
GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, dstImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstWidth * bpt,
|
||||
&dstImageOffsets,
|
||||
dstWidth, dstHeight, 1,
|
||||
GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
|
||||
FREE(dst);
|
||||
FREE(src);
|
||||
}
|
||||
|
|
@ -190,7 +189,7 @@ tdfxGenerateMipmap(GLcontext *ctx, GLenum target,
|
|||
const tdfxMipMapLevel *mml;
|
||||
|
||||
texImage = _mesa_get_tex_image(ctx, texObj, target, level);
|
||||
assert(!texImage->IsCompressed);
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
mml = TDFX_TEXIMAGE_DATA(texImage);
|
||||
|
||||
|
|
@ -760,7 +759,7 @@ fxTexusError(const char *string, FxBool fatal)
|
|||
#endif
|
||||
|
||||
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum srcFormat, GLenum srcType )
|
||||
{
|
||||
|
|
@ -774,7 +773,7 @@ tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return &_mesa_texformat_a8;
|
||||
return MESA_FORMAT_A8;
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
case GL_LUMINANCE4:
|
||||
|
|
@ -782,7 +781,7 @@ tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
return &_mesa_texformat_l8;
|
||||
return MESA_FORMAT_L8;
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
case GL_LUMINANCE4_ALPHA4:
|
||||
|
|
@ -792,48 +791,47 @@ tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
case GL_INTENSITY8:
|
||||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_i8;
|
||||
return MESA_FORMAT_I8;
|
||||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
case GL_COMPRESSED_RGB:
|
||||
/* intentional fall-through */
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
if ( srcFormat == GL_RGB && srcType == GL_UNSIGNED_SHORT_5_6_5 ) {
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
}
|
||||
/* intentional fall through */
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return (allow32bpt) ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_rgb565;
|
||||
return (allow32bpt) ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
case GL_RGBA2:
|
||||
case GL_RGBA4:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_COMPRESSED_RGBA:
|
||||
/* intentional fall-through */
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
if ( srcFormat == GL_BGRA ) {
|
||||
if ( srcType == GL_UNSIGNED_INT_8_8_8_8_REV ) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
else if ( srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ) {
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
else if ( srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ) {
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
}
|
||||
}
|
||||
/* intentional fall through */
|
||||
|
|
@ -841,10 +839,9 @@ tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return allow32bpt ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_argb4444;
|
||||
return allow32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
case GL_COLOR_INDEX2_EXT:
|
||||
|
|
@ -852,29 +849,29 @@ tdfxChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_COLOR_INDEX8_EXT:
|
||||
case GL_COLOR_INDEX12_EXT:
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
return &_mesa_texformat_ci8;
|
||||
return MESA_FORMAT_CI8;
|
||||
/* GL_EXT_texture_compression_s3tc */
|
||||
/* GL_S3_s3tc */
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
/* GL_3DFX_texture_compression_FXT1 */
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
return MESA_FORMAT_RGB_FXT1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgba_fxt1;
|
||||
return MESA_FORMAT_RGBA_FXT1;
|
||||
default:
|
||||
_mesa_problem(ctx, "unexpected format in tdfxChooseTextureFormat");
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1126,7 +1123,9 @@ fetch_rgb_dxt1(const struct gl_texture_image *texImage,
|
|||
i = i * mml->wScale;
|
||||
j = j * mml->hScale;
|
||||
|
||||
/* XXX Get fetch func from _mesa_get_texel_fetch_func()
|
||||
_mesa_texformat_rgb_dxt1.FetchTexel2D(texImage, i, j, k, rgba);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1139,7 +1138,9 @@ fetch_rgba_dxt1(const struct gl_texture_image *texImage,
|
|||
i = i * mml->wScale;
|
||||
j = j * mml->hScale;
|
||||
|
||||
/* XXX Get fetch func from _mesa_get_texel_fetch_func()
|
||||
_mesa_texformat_rgba_dxt1.FetchTexel2D(texImage, i, j, k, rgba);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1152,7 +1153,9 @@ fetch_rgba_dxt3(const struct gl_texture_image *texImage,
|
|||
i = i * mml->wScale;
|
||||
j = j * mml->hScale;
|
||||
|
||||
/* XXX Get fetch func from _mesa_get_texel_fetch_func()
|
||||
_mesa_texformat_rgba_dxt3.FetchTexel2D(texImage, i, j, k, rgba);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1165,7 +1168,9 @@ fetch_rgba_dxt5(const struct gl_texture_image *texImage,
|
|||
i = i * mml->wScale;
|
||||
j = j * mml->hScale;
|
||||
|
||||
/* XXX Get fetch func from _mesa_get_texel_fetch_func()
|
||||
_mesa_texformat_rgba_dxt5.FetchTexel2D(texImage, i, j, k, rgba);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1226,20 +1231,21 @@ adjust2DRatio (GLcontext *ctx,
|
|||
GLvoid *tempImage;
|
||||
GLuint dstImageOffsets = 0;
|
||||
|
||||
if (!texImage->IsCompressed) {
|
||||
if (!_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
GLubyte *destAddr;
|
||||
|
||||
tempImage = MALLOC(width * height * texelBytes);
|
||||
if (!tempImage) {
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, tempImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * texelBytes, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, tempImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * texelBytes, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
|
||||
/* now rescale */
|
||||
/* compute address of dest subimage within the overal tex image */
|
||||
|
|
@ -1256,6 +1262,7 @@ adjust2DRatio (GLcontext *ctx,
|
|||
} else {
|
||||
const GLint rawBytes = 4;
|
||||
GLvoid *rawImage = MALLOC(width * height * rawBytes);
|
||||
|
||||
if (!rawImage) {
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
|
@ -1265,26 +1272,26 @@ adjust2DRatio (GLcontext *ctx,
|
|||
return GL_FALSE;
|
||||
}
|
||||
/* unpack image, apply transfer ops and store in rawImage */
|
||||
_mesa_texstore_rgba8888(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, rawImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * rawBytes, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, GL_RGBA,
|
||||
MESA_FORMAT_RGBA8888_REV, rawImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * rawBytes, /* dstRowStride */
|
||||
&dstImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_rescale_teximage2d(rawBytes,
|
||||
width,
|
||||
newWidth * rawBytes, /* dst stride */
|
||||
width, height, /* src */
|
||||
newWidth, newHeight, /* dst */
|
||||
rawImage /*src*/, tempImage /*dst*/ );
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset * mml->wScale, yoffset * mml->hScale, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
&dstImageOffsets,
|
||||
newWidth, newHeight, 1,
|
||||
GL_RGBA, CHAN_TYPE, tempImage, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset * mml->wScale, yoffset * mml->hScale, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
&dstImageOffsets,
|
||||
newWidth, newHeight, 1,
|
||||
GL_RGBA, CHAN_TYPE, tempImage, &ctx->DefaultPacking);
|
||||
FREE(rawImage);
|
||||
}
|
||||
|
||||
|
|
@ -1357,7 +1364,7 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||
* be correct, since it would mess with "compressedSize".
|
||||
* Ditto for GL_RGBA[4]_S3TC, which is always mapped to DXT3.
|
||||
*/
|
||||
if (texImage->IsCompressed) {
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
switch (internalFormat) {
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
case GL_RGB_S3TC:
|
||||
|
|
@ -1384,30 +1391,22 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||
}
|
||||
if (texNapalm) {
|
||||
texImage->InternalFormat = internalFormat = texNapalm;
|
||||
texImage->IsCompressed = GL_TRUE;
|
||||
_mesa_is_format_compressed(texImage->TexFormat) = GL_TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* choose the texture format */
|
||||
assert(ctx->Driver.ChooseTextureFormat);
|
||||
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
|
||||
internalFormat, format, type);
|
||||
assert(texImage->TexFormat);
|
||||
mesaFormat = texImage->TexFormat->MesaFormat;
|
||||
mesaFormat = texImage->TexFormat;
|
||||
mml->glideFormat = fxGlideFormat(mesaFormat);
|
||||
ti->info.format = mml->glideFormat;
|
||||
texImage->FetchTexelc = fxFetchFunction(mesaFormat);
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
if (texImage->IsCompressed) {
|
||||
texImage->CompressedSize = _mesa_compressed_texture_size(ctx,
|
||||
mml->width,
|
||||
mml->height,
|
||||
1,
|
||||
mesaFormat);
|
||||
dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, mml->width);
|
||||
texImage->Data = _mesa_alloc_texmemory(texImage->CompressedSize);
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
GLuint compressedSize = _mesa_format_image_size(mesaFormat, mml->width,
|
||||
mml->height, 1);
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
texImage->Data = _mesa_alloc_texmemory(compressedSize);
|
||||
} else {
|
||||
dstRowStride = mml->width * texelBytes;
|
||||
texImage->Data = _mesa_alloc_texmemory(mml->width * mml->height * texelBytes);
|
||||
|
|
@ -1437,13 +1436,13 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||
else {
|
||||
/* no rescaling needed */
|
||||
/* unpack image, apply transfer ops and store in texImage->Data */
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1482,9 +1481,9 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||
assert(texImage->Data); /* must have an existing texture image! */
|
||||
assert(texImage->_BaseFormat);
|
||||
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
if (texImage->IsCompressed) {
|
||||
dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, mml->width);
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
} else {
|
||||
dstRowStride = mml->width * texelBytes;
|
||||
}
|
||||
|
|
@ -1507,13 +1506,13 @@ tdfxTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
|
|||
}
|
||||
else {
|
||||
/* no rescaling needed */
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset, yoffset, 0,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset, yoffset, 0,
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
}
|
||||
|
||||
ti->reloadImages = GL_TRUE; /* signal the image needs to be reloaded */
|
||||
|
|
@ -1572,7 +1571,8 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx);
|
||||
tdfxTexInfo *ti;
|
||||
tdfxMipMapLevel *mml;
|
||||
GLuint mesaFormat;
|
||||
gl_format mesaFormat;
|
||||
GLuint compressedSize;
|
||||
|
||||
if (TDFX_DEBUG & DEBUG_VERBOSE_DRI) {
|
||||
fprintf(stderr, "tdfxCompressedTexImage2D: id=%d int 0x%x %dx%d\n",
|
||||
|
|
@ -1585,8 +1585,6 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
return;
|
||||
}
|
||||
|
||||
assert(texImage->IsCompressed);
|
||||
|
||||
ti = TDFX_TEXTURE_DATA(texObj);
|
||||
if (!ti) {
|
||||
texObj->DriverData = fxAllocTexObjData(fxMesa);
|
||||
|
|
@ -1615,28 +1613,19 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
mml->height = height * mml->hScale;
|
||||
|
||||
|
||||
/* choose the texture format */
|
||||
assert(ctx->Driver.ChooseTextureFormat);
|
||||
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
|
||||
internalFormat, -1/*format*/, -1/*type*/);
|
||||
assert(texImage->TexFormat);
|
||||
|
||||
/* Determine the appropriate Glide texel format,
|
||||
* given the user's internal texture format hint.
|
||||
*/
|
||||
mesaFormat = texImage->TexFormat->MesaFormat;
|
||||
mesaFormat = texImage->TexFormat;
|
||||
mml->glideFormat = fxGlideFormat(mesaFormat);
|
||||
ti->info.format = mml->glideFormat;
|
||||
texImage->FetchTexelc = fxFetchFunction(mesaFormat);
|
||||
|
||||
/* allocate new storage for texture image, if needed */
|
||||
if (!texImage->Data) {
|
||||
texImage->CompressedSize = _mesa_compressed_texture_size(ctx,
|
||||
mml->width,
|
||||
mml->height,
|
||||
1,
|
||||
mesaFormat);
|
||||
texImage->Data = _mesa_alloc_texmemory(texImage->CompressedSize);
|
||||
compressedSize = _mesa_format_image_size(mesaFormat, mml->width,
|
||||
mml->height, 1);
|
||||
texImage->Data = _mesa_alloc_texmemory(compressedSize);
|
||||
if (!texImage->Data) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
|
||||
return;
|
||||
|
|
@ -1659,10 +1648,10 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
* we replicate the data over the padded area.
|
||||
* For now, we take 2) + 3) but texelfetchers will be wrong!
|
||||
*/
|
||||
const GLuint mesaFormat = texImage->TexFormat->MesaFormat;
|
||||
GLuint srcRowStride = _mesa_compressed_row_stride(mesaFormat, width);
|
||||
const GLuint mesaFormat = texImage->TexFormat;
|
||||
GLuint srcRowStride = _mesa_format_row_stride(mesaFormat, width);
|
||||
|
||||
GLuint destRowStride = _mesa_compressed_row_stride(mesaFormat,
|
||||
GLuint destRowStride = _mesa_format_row_stride(mesaFormat,
|
||||
mml->width);
|
||||
|
||||
_mesa_upscale_teximage2d(srcRowStride, (height+3) / 4,
|
||||
|
|
@ -1671,7 +1660,7 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
texImage->Data);
|
||||
ti->padded = GL_TRUE;
|
||||
} else {
|
||||
MEMCPY(texImage->Data, data, texImage->CompressedSize);
|
||||
MEMCPY(texImage->Data, data, compressedSize);
|
||||
}
|
||||
|
||||
RevalidateTexture(ctx, texObj);
|
||||
|
|
@ -1696,7 +1685,7 @@ tdfxCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
GLint destRowStride, srcRowStride;
|
||||
GLint i, rows;
|
||||
GLubyte *dest;
|
||||
const GLuint mesaFormat = texImage->TexFormat->MesaFormat;
|
||||
const GLuint mesaFormat = texImage->TexFormat;
|
||||
|
||||
if (TDFX_DEBUG & DEBUG_VERBOSE_DRI) {
|
||||
fprintf(stderr, "tdfxCompressedTexSubImage2D: id=%d\n", texObj->Name);
|
||||
|
|
@ -1707,9 +1696,9 @@ tdfxCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
mml = TDFX_TEXIMAGE_DATA(texImage);
|
||||
assert(mml);
|
||||
|
||||
srcRowStride = _mesa_compressed_row_stride(mesaFormat, width);
|
||||
srcRowStride = _mesa_format_row_stride(mesaFormat, width);
|
||||
|
||||
destRowStride = _mesa_compressed_row_stride(mesaFormat, mml->width);
|
||||
destRowStride = _mesa_format_row_stride(mesaFormat, mml->width);
|
||||
dest = _mesa_compressed_image_address(xoffset, yoffset, 0,
|
||||
mesaFormat,
|
||||
mml->width,
|
||||
|
|
@ -1727,9 +1716,9 @@ tdfxCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
* see fxDDCompressedTexImage2D for caveats
|
||||
*/
|
||||
if (mml->wScale != 1 || mml->hScale != 1) {
|
||||
srcRowStride = _mesa_compressed_row_stride(mesaFormat, texImage->Width);
|
||||
srcRowStride = _mesa_format_row_stride(mesaFormat, texImage->Width);
|
||||
|
||||
destRowStride = _mesa_compressed_row_stride(mesaFormat, mml->width);
|
||||
destRowStride = _mesa_format_row_stride(mesaFormat, mml->width);
|
||||
_mesa_upscale_teximage2d(srcRowStride, texImage->Height / 4,
|
||||
destRowStride, mml->height / 4,
|
||||
1, texImage->Data, destRowStride,
|
||||
|
|
|
|||
465
src/mesa/drivers/dri/trident/trident_context.c
Normal file
465
src/mesa/drivers/dri/trident/trident_context.c
Normal file
|
|
@ -0,0 +1,465 @@
|
|||
/*
|
||||
* Copyright 2002 by Alan Hourihane, Sychdyn, North Wales, UK.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Alan Hourihane not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. Alan Hourihane makes no representations
|
||||
* about the suitability of this software for any purpose. It is provided
|
||||
* "as is" without express or implied warranty.
|
||||
*
|
||||
* ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
|
||||
*
|
||||
* Trident CyberBladeXP driver.
|
||||
*
|
||||
*/
|
||||
#include "trident_dri.h"
|
||||
#include "trident_context.h"
|
||||
#include "trident_lock.h"
|
||||
|
||||
#include "swrast/swrast.h"
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
#include "vbo/vbo.h"
|
||||
|
||||
#include "tnl/tnl.h"
|
||||
#include "tnl/t_pipeline.h"
|
||||
|
||||
#include "main/context.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/matrix.h"
|
||||
#include "main/extensions.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
#include "main/viewport.h"
|
||||
#if defined(USE_X86_ASM)
|
||||
#include "x86/common_x86_asm.h"
|
||||
#endif
|
||||
#include "main/simple_list.h"
|
||||
#include "main/mm.h"
|
||||
#include "drirenderbuffer.h"
|
||||
|
||||
#include "drivers/common/driverfuncs.h"
|
||||
#include "dri_util.h"
|
||||
#include "utils.h"
|
||||
|
||||
static const struct tnl_pipeline_stage *trident_pipeline[] = {
|
||||
&_tnl_vertex_transform_stage,
|
||||
&_tnl_normal_transform_stage,
|
||||
&_tnl_lighting_stage,
|
||||
&_tnl_texgen_stage,
|
||||
&_tnl_texture_transform_stage,
|
||||
&_tnl_render_stage,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
static GLboolean
|
||||
tridentCreateContext( const __GLcontextModes *glVisual,
|
||||
__DRIcontextPrivate *driContextPriv,
|
||||
void *sharedContextPrivate)
|
||||
{
|
||||
GLcontext *ctx, *shareCtx;
|
||||
__DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv;
|
||||
tridentContextPtr tmesa;
|
||||
tridentScreenPtr tridentscrn;
|
||||
struct dd_function_table functions;
|
||||
#if 0
|
||||
drm_trident_sarea_t *saPriv=(drm_trident_sarea_t *)(((char*)sPriv->pSAREA)+
|
||||
sizeof(XF86DRISAREARec));
|
||||
#endif
|
||||
|
||||
tmesa = (tridentContextPtr) CALLOC( sizeof(*tmesa) );
|
||||
if ( !tmesa ) return GL_FALSE;
|
||||
|
||||
/* Allocate the Mesa context */
|
||||
if (sharedContextPrivate)
|
||||
shareCtx = ((tridentContextPtr) sharedContextPrivate)->glCtx;
|
||||
else
|
||||
shareCtx = NULL;
|
||||
|
||||
_mesa_init_driver_functions(&functions);
|
||||
|
||||
tmesa->glCtx =
|
||||
_mesa_create_context(glVisual, shareCtx, &functions, (void *)tmesa);
|
||||
|
||||
if (!tmesa->glCtx) {
|
||||
FREE(tmesa);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
tmesa->driContext = driContextPriv;
|
||||
tmesa->driScreen = sPriv;
|
||||
tmesa->driDrawable = NULL; /* Set by XMesaMakeCurrent */
|
||||
|
||||
tmesa->hHWContext = driContextPriv->hHWContext;
|
||||
tmesa->driHwLock = (drmLock *)&sPriv->pSAREA->lock;
|
||||
tmesa->driFd = sPriv->fd;
|
||||
#if 0
|
||||
tmesa->sarea = saPriv;
|
||||
#endif
|
||||
|
||||
tridentscrn = tmesa->tridentScreen = (tridentScreenPtr)(sPriv->private);
|
||||
|
||||
ctx = tmesa->glCtx;
|
||||
|
||||
ctx->Const.MaxTextureLevels = 13; /* 4K by 4K? Is that right? */
|
||||
ctx->Const.MaxTextureUnits = 1; /* Permedia 3 */
|
||||
|
||||
ctx->Const.MinLineWidth = 0.0;
|
||||
ctx->Const.MaxLineWidth = 255.0;
|
||||
|
||||
ctx->Const.MinLineWidthAA = 0.0;
|
||||
ctx->Const.MaxLineWidthAA = 65536.0;
|
||||
|
||||
ctx->Const.MinPointSize = 0.0;
|
||||
ctx->Const.MaxPointSize = 255.0;
|
||||
|
||||
ctx->Const.MinPointSizeAA = 0.5; /* 4x4 quality mode */
|
||||
ctx->Const.MaxPointSizeAA = 16.0;
|
||||
ctx->Const.PointSizeGranularity = 0.25;
|
||||
|
||||
ctx->Const.MaxDrawBuffers = 1;
|
||||
|
||||
#if 0
|
||||
tmesa->texHeap = mmInit( 0, tmesa->tridentScreen->textureSize );
|
||||
|
||||
make_empty_list(&tmesa->TexObjList);
|
||||
make_empty_list(&tmesa->SwappedOut);
|
||||
|
||||
tmesa->CurrentTexObj[0] = 0;
|
||||
tmesa->CurrentTexObj[1] = 0; /* Permedia 3, second texture */
|
||||
|
||||
tmesa->RenderIndex = ~0;
|
||||
#endif
|
||||
|
||||
/* Initialize the software rasterizer and helper modules.
|
||||
*/
|
||||
_swrast_CreateContext( ctx );
|
||||
_vbo_CreateContext( ctx );
|
||||
_tnl_CreateContext( ctx );
|
||||
_swsetup_CreateContext( ctx );
|
||||
|
||||
/* Install the customized pipeline:
|
||||
*/
|
||||
_tnl_destroy_pipeline( ctx );
|
||||
_tnl_install_pipeline( ctx, trident_pipeline );
|
||||
|
||||
/* Configure swrast to match hardware characteristics:
|
||||
*/
|
||||
_swrast_allow_pixel_fog( ctx, GL_FALSE );
|
||||
_swrast_allow_vertex_fog( ctx, GL_TRUE );
|
||||
|
||||
tridentInitVB( ctx );
|
||||
tridentDDInitExtensions( ctx );
|
||||
tridentDDInitDriverFuncs( ctx );
|
||||
tridentDDInitStateFuncs( ctx );
|
||||
#if 0
|
||||
tridentDDInitSpanFuncs( ctx );
|
||||
tridentDDInitTextureFuncs( ctx );
|
||||
#endif
|
||||
tridentDDInitTriFuncs( ctx );
|
||||
tridentDDInitState( tmesa );
|
||||
|
||||
driContextPriv->driverPrivate = (void *)tmesa;
|
||||
|
||||
UNLOCK_HARDWARE(tmesa);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
tridentDestroyContext(__DRIcontextPrivate *driContextPriv)
|
||||
{
|
||||
tridentContextPtr tmesa = (tridentContextPtr)driContextPriv->driverPrivate;
|
||||
|
||||
if (tmesa) {
|
||||
_swsetup_DestroyContext( tmesa->glCtx );
|
||||
_tnl_DestroyContext( tmesa->glCtx );
|
||||
_vbo_DestroyContext( tmesa->glCtx );
|
||||
_swrast_DestroyContext( tmesa->glCtx );
|
||||
|
||||
/* free the Mesa context */
|
||||
tmesa->glCtx->DriverCtx = NULL;
|
||||
_mesa_destroy_context(tmesa->glCtx);
|
||||
|
||||
_mesa_free(tmesa);
|
||||
driContextPriv->driverPrivate = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static GLboolean
|
||||
tridentCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
||||
__DRIdrawablePrivate *driDrawPriv,
|
||||
const __GLcontextModes *mesaVis,
|
||||
GLboolean isPixmap )
|
||||
{
|
||||
tridentScreenPtr screen = (tridentScreenPtr) driScrnPriv->private;
|
||||
|
||||
if (isPixmap) {
|
||||
return GL_FALSE; /* not implemented */
|
||||
}
|
||||
else {
|
||||
struct gl_framebuffer *fb = _mesa_create_framebuffer(mesaVis);
|
||||
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->frontOffset, screen->frontPitch,
|
||||
driDrawPriv);
|
||||
/*
|
||||
tridentSetSpanFunctions(frontRb, mesaVis);
|
||||
*/
|
||||
_mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL, screen->cpp,
|
||||
screen->backOffset, screen->backPitch,
|
||||
driDrawPriv);
|
||||
/*
|
||||
tridentSetSpanFunctions(backRb, mesaVis);
|
||||
*/
|
||||
_mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backRb->Base);
|
||||
}
|
||||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
driDrawPriv);
|
||||
/*
|
||||
tridentSetSpanFunctions(depthRb, mesaVis);
|
||||
*/
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8, NULL, screen->cpp,
|
||||
screen->depthOffset, screen->depthPitch,
|
||||
driDrawPriv);
|
||||
/*
|
||||
tridentSetSpanFunctions(depthRb, mesaVis);
|
||||
*/
|
||||
_mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base);
|
||||
}
|
||||
|
||||
/* no h/w stencil?
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8);
|
||||
tridentSetSpanFunctions(stencilRb, mesaVis);
|
||||
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, &stencilRb->Base);
|
||||
}
|
||||
*/
|
||||
|
||||
_mesa_add_soft_renderbuffers(fb,
|
||||
GL_FALSE, /* color */
|
||||
GL_FALSE, /* depth */
|
||||
mesaVis->stencilBits > 0,
|
||||
mesaVis->accumRedBits > 0,
|
||||
GL_FALSE, /* alpha */
|
||||
GL_FALSE /* aux */);
|
||||
driDrawPriv->driverPrivate = (void *) fb;
|
||||
|
||||
return (driDrawPriv->driverPrivate != NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
tridentDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
|
||||
{
|
||||
_mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
tridentSwapBuffers(__DRIdrawablePrivate *drawablePrivate)
|
||||
{
|
||||
__DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
|
||||
|
||||
if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
|
||||
tridentContextPtr tmesa;
|
||||
GLcontext *ctx;
|
||||
tmesa = (tridentContextPtr) dPriv->driContextPriv->driverPrivate;
|
||||
ctx = tmesa->glCtx;
|
||||
if (ctx->Visual.doubleBufferMode) {
|
||||
_mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */
|
||||
tridentCopyBuffer( dPriv );
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* XXX this shouldn't be an error but we can't handle it for now */
|
||||
_mesa_problem(NULL, "tridentSwapBuffers: drawable has no context!\n");
|
||||
}
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
tridentMakeCurrent(__DRIcontextPrivate *driContextPriv,
|
||||
__DRIdrawablePrivate *driDrawPriv,
|
||||
__DRIdrawablePrivate *driReadPriv)
|
||||
{
|
||||
if (driContextPriv) {
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
tridentContextPtr oldCtx = ctx ? TRIDENT_CONTEXT(ctx) : NULL;
|
||||
tridentContextPtr newCtx = (tridentContextPtr) driContextPriv->driverPrivate;
|
||||
|
||||
if ( newCtx != oldCtx ) {
|
||||
newCtx->dirty = ~0;
|
||||
}
|
||||
|
||||
if (newCtx->driDrawable != driDrawPriv) {
|
||||
newCtx->driDrawable = driDrawPriv;
|
||||
#if 0
|
||||
tridentUpdateWindow ( newCtx->glCtx );
|
||||
tridentUpdateViewportOffset( newCtx->glCtx );
|
||||
#endif
|
||||
}
|
||||
|
||||
newCtx->drawOffset = newCtx->tridentScreen->backOffset;
|
||||
newCtx->drawPitch = newCtx->tridentScreen->backPitch;
|
||||
|
||||
_mesa_make_current( newCtx->glCtx,
|
||||
(GLframebuffer *) driDrawPriv->driverPrivate,
|
||||
(GLframebuffer *) driReadPriv->driverPrivate );
|
||||
|
||||
if (!newCtx->glCtx->Viewport.Width) {
|
||||
_mesa_set_viewport(newCtx->glCtx, 0, 0,
|
||||
driDrawPriv->w, driDrawPriv->h);
|
||||
}
|
||||
} else {
|
||||
_mesa_make_current( NULL, NULL, NULL );
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
static GLboolean
|
||||
tridentUnbindContext( __DRIcontextPrivate *driContextPriv )
|
||||
{
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
static tridentScreenPtr
|
||||
tridentCreateScreen( __DRIscreenPrivate *sPriv )
|
||||
{
|
||||
TRIDENTDRIPtr tDRIPriv = (TRIDENTDRIPtr)sPriv->pDevPriv;
|
||||
tridentScreenPtr tridentScreen;
|
||||
|
||||
if (sPriv->devPrivSize != sizeof(TRIDENTDRIRec)) {
|
||||
fprintf(stderr,"\nERROR! sizeof(TRIDENTDRIRec) does not match passed size from device driver\n");
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
/* Allocate the private area */
|
||||
tridentScreen = (tridentScreenPtr) CALLOC( sizeof(*tridentScreen) );
|
||||
if ( !tridentScreen ) return NULL;
|
||||
|
||||
tridentScreen->driScreen = sPriv;
|
||||
|
||||
tridentScreen->frontOffset = tDRIPriv->frontOffset;
|
||||
tridentScreen->backOffset = tDRIPriv->backOffset;
|
||||
tridentScreen->depthOffset = tDRIPriv->depthOffset;
|
||||
tridentScreen->frontPitch = tDRIPriv->frontPitch;
|
||||
tridentScreen->backPitch = tDRIPriv->backPitch;
|
||||
tridentScreen->depthPitch = tDRIPriv->depthPitch;
|
||||
tridentScreen->width = tDRIPriv->width;
|
||||
tridentScreen->height = tDRIPriv->height;
|
||||
|
||||
printf("%d %d\n",tridentScreen->width,tridentScreen->height);
|
||||
printf("%d %d\n",tridentScreen->frontPitch,tridentScreen->backPitch);
|
||||
printf("offset 0x%x 0x%x\n",tridentScreen->backOffset,tridentScreen->depthOffset);
|
||||
|
||||
tridentScreen->mmio.handle = tDRIPriv->regs;
|
||||
tridentScreen->mmio.size = 0x20000;
|
||||
|
||||
if (drmMap(sPriv->fd,
|
||||
tridentScreen->mmio.handle, tridentScreen->mmio.size,
|
||||
(drmAddressPtr)&tridentScreen->mmio.map)) {
|
||||
FREE(tridentScreen);
|
||||
return GL_FALSE;
|
||||
}
|
||||
printf("MAPPED at %p\n", tridentScreen->mmio.map);
|
||||
|
||||
return tridentScreen;
|
||||
}
|
||||
|
||||
/* Destroy the device specific screen private data struct.
|
||||
*/
|
||||
static void
|
||||
tridentDestroyScreen( __DRIscreenPrivate *sPriv )
|
||||
{
|
||||
tridentScreenPtr tridentScreen = (tridentScreenPtr)sPriv->private;
|
||||
|
||||
FREE(tridentScreen);
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
tridentInitDriver(__DRIscreenPrivate *sPriv)
|
||||
{
|
||||
sPriv->private = (void *) tridentCreateScreen( sPriv );
|
||||
|
||||
if (!sPriv->private) {
|
||||
tridentDestroyScreen( sPriv );
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the driver specific part of the createNewScreen entry point.
|
||||
*
|
||||
* \todo maybe fold this into intelInitDriver
|
||||
*
|
||||
* \return the __GLcontextModes supported by this driver
|
||||
*/
|
||||
const __DRIconfig **tridentInitScreen(__DRIscreenPrivate *psp)
|
||||
{
|
||||
static const __DRIversion ddx_expected = { 4, 0, 0 };
|
||||
static const __DRIversion dri_expected = { 3, 1, 0 };
|
||||
static const __DRIversion drm_expected = { 1, 0, 0 };
|
||||
|
||||
if ( ! driCheckDriDdxDrmVersions2( "Trident",
|
||||
&psp->dri_version, & dri_expected,
|
||||
&psp->ddx_version, & ddx_expected,
|
||||
&psp->drm_version, & drm_expected ) )
|
||||
return NULL;
|
||||
|
||||
if (!tridentInitDriver(psp))
|
||||
return NULL;
|
||||
|
||||
/* Wait... what? This driver doesn't report any modes... */
|
||||
#if 0
|
||||
TRIDENTDRIPtr dri_priv = (TRIDENTDRIPtr) psp->pDevPriv;
|
||||
*driver_modes = tridentFillInModes( dri_priv->bytesPerPixel * 8,
|
||||
GL_TRUE );
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const struct __DriverAPIRec driDriverAPI = {
|
||||
tridentInitScreen,
|
||||
tridentDestroyScreen,
|
||||
tridentCreateContext,
|
||||
tridentDestroyContext,
|
||||
tridentCreateBuffer,
|
||||
tridentDestroyBuffer,
|
||||
tridentSwapBuffers,
|
||||
tridentMakeCurrent,
|
||||
tridentUnbindContext,
|
||||
};
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/matrix.h"
|
||||
#include "main/state.h"
|
||||
#include "main/simple_list.h"
|
||||
|
|
@ -163,24 +164,28 @@ viaInitRenderbuffer(struct via_renderbuffer *vrb, GLenum format,
|
|||
if (format == GL_RGBA) {
|
||||
/* Color */
|
||||
rb->_BaseFormat = GL_RGBA;
|
||||
rb->Format = MESA_FORMAT_ARGB8888;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT16) {
|
||||
/* Depth */
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
rb->Format = MESA_FORMAT_Z16;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
}
|
||||
else if (format == GL_DEPTH_COMPONENT24) {
|
||||
/* Depth */
|
||||
rb->_BaseFormat = GL_DEPTH_COMPONENT;
|
||||
/* we always Get/Put 32-bit Z values */
|
||||
rb->Format = MESA_FORMAT_Z32;
|
||||
rb->DataType = GL_UNSIGNED_INT;
|
||||
}
|
||||
else {
|
||||
/* Stencil */
|
||||
ASSERT(format == GL_STENCIL_INDEX8_EXT);
|
||||
rb->_BaseFormat = GL_STENCIL_INDEX;
|
||||
rb->Format = MESA_FORMAT_S8;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -248,7 +248,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
/* XXX check/fix the offset/pitch parameters! */
|
||||
{
|
||||
driRenderbuffer *frontRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(frontRb, mesaVis);
|
||||
|
|
@ -257,7 +257,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->doubleBufferMode) {
|
||||
driRenderbuffer *backRb
|
||||
= driNewRenderbuffer(GL_RGBA, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_ARGB8888, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(backRb, mesaVis);
|
||||
|
|
@ -266,7 +266,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->depthBits == 16) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT16, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z16, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(depthRb, mesaVis);
|
||||
|
|
@ -274,7 +274,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 24) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT24, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z24_S8, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(depthRb, mesaVis);
|
||||
|
|
@ -282,7 +282,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
}
|
||||
else if (mesaVis->depthBits == 32) {
|
||||
driRenderbuffer *depthRb
|
||||
= driNewRenderbuffer(GL_DEPTH_COMPONENT32, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_Z32, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(depthRb, mesaVis);
|
||||
|
|
@ -291,7 +291,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
|
|||
|
||||
if (mesaVis->stencilBits > 0 && !swStencil) {
|
||||
driRenderbuffer *stencilRb
|
||||
= driNewRenderbuffer(GL_STENCIL_INDEX8_EXT, NULL,
|
||||
= driNewRenderbuffer(MESA_FORMAT_S8, NULL,
|
||||
screen->bytesPerPixel,
|
||||
0, screen->width, driDrawPriv);
|
||||
viaSetSpanFunctions(stencilRb, mesaVis);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
*/
|
||||
|
||||
#include "main/glheader.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/colormac.h"
|
||||
|
|
@ -177,24 +178,22 @@ void viaInitSpanFuncs(GLcontext *ctx)
|
|||
void
|
||||
viaSetSpanFunctions(struct via_renderbuffer *vrb, const GLvisual *vis)
|
||||
{
|
||||
if (vrb->Base.InternalFormat == GL_RGBA) {
|
||||
if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
|
||||
viaInitPointers_565(&vrb->Base);
|
||||
}
|
||||
else {
|
||||
viaInitPointers_8888(&vrb->Base);
|
||||
}
|
||||
if (vrb->Base.Format == MESA_FORMAT_RGB565) {
|
||||
viaInitPointers_565(&vrb->Base);
|
||||
}
|
||||
else if (vrb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
|
||||
else if (vrb->Base.Format == MESA_FORMAT_ARGB8888) {
|
||||
viaInitPointers_8888(&vrb->Base);
|
||||
}
|
||||
else if (vrb->Base.Format == MESA_FORMAT_Z16) {
|
||||
viaInitDepthPointers_z16(&vrb->Base);
|
||||
}
|
||||
else if (vrb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
|
||||
else if (vrb->Base.Format == MESA_FORMAT_Z24_S8) {
|
||||
viaInitDepthPointers_z24_s8(&vrb->Base);
|
||||
}
|
||||
else if (vrb->Base.InternalFormat == GL_DEPTH_COMPONENT32) {
|
||||
else if (vrb->Base.Format == MESA_FORMAT_Z32) {
|
||||
viaInitDepthPointers_z32(&vrb->Base);
|
||||
}
|
||||
else if (vrb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
|
||||
else if (vrb->Base.Format == MESA_FORMAT_S8) {
|
||||
viaInitStencilPointers_z24_s8(&vrb->Base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@
|
|||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/colortab.h"
|
||||
#include "main/convolve.h"
|
||||
#include "main/context.h"
|
||||
#include "main/mipmap.h"
|
||||
#include "main/mm.h"
|
||||
#include "main/simple_list.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texobj.h"
|
||||
#include "main/texstore.h"
|
||||
|
||||
#include "main/mm.h"
|
||||
#include "via_context.h"
|
||||
#include "via_fb.h"
|
||||
#include "via_tex.h"
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
#include "via_ioctl.h"
|
||||
#include "via_3d_reg.h"
|
||||
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
|
|
@ -65,56 +65,56 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
if ( format == GL_BGRA ) {
|
||||
if ( type == GL_UNSIGNED_INT_8_8_8_8_REV ||
|
||||
type == GL_UNSIGNED_BYTE ) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
else if ( type == GL_UNSIGNED_SHORT_4_4_4_4_REV ) {
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
else if ( type == GL_UNSIGNED_SHORT_1_5_5_5_REV ) {
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
}
|
||||
}
|
||||
else if ( type == GL_UNSIGNED_BYTE ||
|
||||
type == GL_UNSIGNED_INT_8_8_8_8_REV ||
|
||||
type == GL_UNSIGNED_INT_8_8_8_8 ) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
|
||||
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_COMPRESSED_RGB:
|
||||
if ( format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5 ) {
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
}
|
||||
else if ( type == GL_UNSIGNED_BYTE ) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
|
||||
return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA2:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
|
||||
case GL_RGB5:
|
||||
case GL_RGB4:
|
||||
case GL_R3_G3_B2:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
|
|
@ -122,7 +122,7 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return &_mesa_texformat_a8;
|
||||
return MESA_FORMAT_A8;
|
||||
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
|
|
@ -131,7 +131,7 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
return &_mesa_texformat_l8;
|
||||
return MESA_FORMAT_L8;
|
||||
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
|
|
@ -142,7 +142,7 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
|
|
@ -150,35 +150,35 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_i8;
|
||||
return MESA_FORMAT_I8;
|
||||
|
||||
case GL_YCBCR_MESA:
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_MESA ||
|
||||
type == GL_UNSIGNED_BYTE)
|
||||
return &_mesa_texformat_ycbcr;
|
||||
return MESA_FORMAT_YCBCR;
|
||||
else
|
||||
return &_mesa_texformat_ycbcr_rev;
|
||||
return MESA_FORMAT_YCBCR_REV;
|
||||
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
return MESA_FORMAT_RGB_FXT1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgba_fxt1;
|
||||
return MESA_FORMAT_RGBA_FXT1;
|
||||
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
|
|
@ -187,16 +187,16 @@ viaChooseTexFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_COLOR_INDEX8_EXT:
|
||||
case GL_COLOR_INDEX12_EXT:
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
return &_mesa_texformat_ci8;
|
||||
return MESA_FORMAT_CI8;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unexpected texture format %s in %s\n",
|
||||
_mesa_lookup_enum_by_nr(internalFormat),
|
||||
__FUNCTION__);
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
|
||||
return NULL; /* never get here */
|
||||
return MESA_FORMAT_NONE; /* never get here */
|
||||
}
|
||||
|
||||
static int logbase2(int n)
|
||||
|
|
@ -457,7 +457,7 @@ static GLboolean viaSetTexImages(GLcontext *ctx,
|
|||
GLuint widthExp = 0;
|
||||
GLuint heightExp = 0;
|
||||
|
||||
switch (baseImage->image.TexFormat->MesaFormat) {
|
||||
switch (baseImage->image.TexFormat) {
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
texFormat = HC_HTXnFM_ARGB8888;
|
||||
break;
|
||||
|
|
@ -689,24 +689,7 @@ static void viaTexImage(GLcontext *ctx,
|
|||
|
||||
assert(texImage->TexFormat);
|
||||
|
||||
if (dims == 1) {
|
||||
texImage->FetchTexelc = texImage->TexFormat->FetchTexel1D;
|
||||
texImage->FetchTexelf = texImage->TexFormat->FetchTexel1Df;
|
||||
}
|
||||
else {
|
||||
texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D;
|
||||
texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df;
|
||||
}
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
|
||||
if (texelBytes == 0) {
|
||||
/* compressed format */
|
||||
texImage->IsCompressed = GL_TRUE;
|
||||
texImage->CompressedSize =
|
||||
ctx->Driver.CompressedTextureSize(ctx, texImage->Width,
|
||||
texImage->Height, texImage->Depth,
|
||||
texImage->TexFormat->MesaFormat);
|
||||
}
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
|
||||
|
||||
/* Minimum pitch of 32 bytes */
|
||||
if (postConvWidth * texelBytes < 32) {
|
||||
|
|
@ -718,8 +701,11 @@ static void viaTexImage(GLcontext *ctx,
|
|||
viaImage->pitchLog2 = logbase2(postConvWidth * texelBytes);
|
||||
|
||||
/* allocate memory */
|
||||
if (texImage->IsCompressed)
|
||||
sizeInBytes = texImage->CompressedSize;
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat))
|
||||
sizeInBytes = _mesa_format_image_size(texImage->TexFormat,
|
||||
texImage->Width,
|
||||
texImage->Height,
|
||||
texImage->Depth);
|
||||
else
|
||||
sizeInBytes = postConvWidth * postConvHeight * texelBytes;
|
||||
|
||||
|
|
@ -797,22 +783,22 @@ static void viaTexImage(GLcontext *ctx,
|
|||
else {
|
||||
GLint dstRowStride;
|
||||
GLboolean success;
|
||||
if (texImage->IsCompressed) {
|
||||
dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width);
|
||||
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
|
||||
}
|
||||
else {
|
||||
dstRowStride = postConvWidth * texImage->TexFormat->TexelBytes;
|
||||
dstRowStride = postConvWidth * _mesa_get_format_bytes(texImage->TexFormat);
|
||||
}
|
||||
ASSERT(texImage->TexFormat->StoreImage);
|
||||
success = texImage->TexFormat->StoreImage(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
success = _mesa_texstore(ctx, dims,
|
||||
texImage->_BaseFormat,
|
||||
texImage->TexFormat,
|
||||
texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
texImage->ImageOffsets,
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
if (!success) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,8 +40,10 @@
|
|||
|
||||
#include "fxdrv.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/image.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texstore.h"
|
||||
#include "main/texformat.h"
|
||||
#include "main/texcompress.h"
|
||||
#include "main/texobj.h"
|
||||
|
|
@ -89,14 +91,14 @@ _mesa_halve2x2_teximage2d ( GLcontext *ctx,
|
|||
}
|
||||
_s = src = MALLOC(srcRowStride * srcHeight);
|
||||
_d = dst = MALLOC(dstWidth * bytesPerPixel * dstHeight);
|
||||
_mesa_texstore_rgba8888(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, src,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
srcRowStride, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
srcWidth, srcHeight, 1,
|
||||
texImage->_BaseFormat, _t,
|
||||
srcImage, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, src,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
srcRowStride, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
srcWidth, srcHeight, 1,
|
||||
texImage->_BaseFormat, _t,
|
||||
srcImage, &ctx->DefaultPacking);
|
||||
}
|
||||
|
||||
if (srcHeight == 1) {
|
||||
|
|
@ -137,13 +139,13 @@ _mesa_halve2x2_teximage2d ( GLcontext *ctx,
|
|||
if (bpt) {
|
||||
src = _s;
|
||||
dst = _d;
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, dstImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstWidth * bpt,
|
||||
0, /* dstImageStride */
|
||||
dstWidth, dstHeight, 1,
|
||||
GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, dstImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstWidth * bpt,
|
||||
0, /* dstImageStride */
|
||||
dstWidth, dstHeight, 1,
|
||||
GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking);
|
||||
FREE(dst);
|
||||
FREE(src);
|
||||
}
|
||||
|
|
@ -1014,7 +1016,7 @@ PrintTexture(int w, int h, int c, const GLubyte * data)
|
|||
#endif
|
||||
|
||||
|
||||
const struct gl_texture_format *
|
||||
gl_format
|
||||
fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum srcFormat, GLenum srcType )
|
||||
{
|
||||
|
|
@ -1031,31 +1033,31 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case 3:
|
||||
case GL_RGB:
|
||||
if ( srcFormat == GL_RGB && srcType == GL_UNSIGNED_SHORT_5_6_5 ) {
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
}
|
||||
/* intentional fall through */
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
return (allow32bpt) ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_rgb565;
|
||||
return (allow32bpt) ? MESA_FORMAT_ARGB8888
|
||||
: MESA_FORMAT_RGB565;
|
||||
case GL_RGBA2:
|
||||
case GL_RGBA4:
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
case GL_COMPRESSED_RGBA:
|
||||
/* intentional fall through */
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
if ( srcFormat == GL_BGRA ) {
|
||||
if ( srcType == GL_UNSIGNED_INT_8_8_8_8_REV ) {
|
||||
return &_mesa_texformat_argb8888;
|
||||
return MESA_FORMAT_ARGB8888;
|
||||
}
|
||||
else if ( srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV ) {
|
||||
return &_mesa_texformat_argb4444;
|
||||
return MESA_FORMAT_ARGB4444;
|
||||
}
|
||||
else if ( srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV ) {
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
}
|
||||
}
|
||||
/* intentional fall through */
|
||||
|
|
@ -1063,15 +1065,15 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
return (allow32bpt) ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_argb4444;
|
||||
return (allow32bpt) ? MESA_FORMAT_ARGB8888
|
||||
: MESA_FORMAT_ARGB4444;
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
case GL_INTENSITY8:
|
||||
case GL_INTENSITY12:
|
||||
case GL_INTENSITY16:
|
||||
case GL_COMPRESSED_INTENSITY:
|
||||
return &_mesa_texformat_i8;
|
||||
return MESA_FORMAT_I8;
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
case GL_LUMINANCE4:
|
||||
|
|
@ -1079,14 +1081,14 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12:
|
||||
case GL_LUMINANCE16:
|
||||
case GL_COMPRESSED_LUMINANCE:
|
||||
return &_mesa_texformat_l8;
|
||||
return MESA_FORMAT_L8;
|
||||
case GL_ALPHA:
|
||||
case GL_ALPHA4:
|
||||
case GL_ALPHA8:
|
||||
case GL_ALPHA12:
|
||||
case GL_ALPHA16:
|
||||
case GL_COMPRESSED_ALPHA:
|
||||
return &_mesa_texformat_a8;
|
||||
return MESA_FORMAT_A8;
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_COLOR_INDEX1_EXT:
|
||||
case GL_COLOR_INDEX2_EXT:
|
||||
|
|
@ -1094,7 +1096,7 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_COLOR_INDEX8_EXT:
|
||||
case GL_COLOR_INDEX12_EXT:
|
||||
case GL_COLOR_INDEX16_EXT:
|
||||
return &_mesa_texformat_ci8;
|
||||
return MESA_FORMAT_CI8;
|
||||
case 2:
|
||||
case GL_LUMINANCE_ALPHA:
|
||||
case GL_LUMINANCE4_ALPHA4:
|
||||
|
|
@ -1104,35 +1106,35 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
|||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
case GL_COMPRESSED_LUMINANCE_ALPHA:
|
||||
return &_mesa_texformat_al88;
|
||||
return MESA_FORMAT_AL88;
|
||||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
return &_mesa_texformat_rgb565;
|
||||
return MESA_FORMAT_RGB565;
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
return MESA_FORMAT_ARGB1555;
|
||||
/* GL_EXT_texture_compression_s3tc */
|
||||
/* GL_S3_s3tc */
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
case GL_RGB_S3TC:
|
||||
case GL_RGB4_S3TC:
|
||||
return &_mesa_texformat_rgb_dxt1;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
return &_mesa_texformat_rgba_dxt1;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
case GL_RGBA_S3TC:
|
||||
case GL_RGBA4_S3TC:
|
||||
return &_mesa_texformat_rgba_dxt3;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
/* GL_3DFX_texture_compression_FXT1 */
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgb_fxt1;
|
||||
return MESA_FORMAT_RGB_FXT1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
return &_mesa_texformat_rgba_fxt1;
|
||||
return MESA_FORMAT_RGBA_FXT1;
|
||||
default:
|
||||
_mesa_problem(NULL, "unexpected format in fxDDChooseTextureFormat");
|
||||
return NULL;
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1232,20 +1234,21 @@ adjust2DRatio (GLcontext *ctx,
|
|||
const GLint newHeight = height * mml->hScale;
|
||||
GLvoid *tempImage;
|
||||
|
||||
if (!texImage->IsCompressed) {
|
||||
if (!_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
GLubyte *destAddr;
|
||||
|
||||
tempImage = MALLOC(width * height * texelBytes);
|
||||
if (!tempImage) {
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, tempImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * texelBytes, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, tempImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * texelBytes, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
|
||||
/* now rescale */
|
||||
/* compute address of dest subimage within the overal tex image */
|
||||
|
|
@ -1262,6 +1265,7 @@ adjust2DRatio (GLcontext *ctx,
|
|||
} else {
|
||||
const GLint rawBytes = 4;
|
||||
GLvoid *rawImage = MALLOC(width * height * rawBytes);
|
||||
|
||||
if (!rawImage) {
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
|
@ -1270,26 +1274,26 @@ adjust2DRatio (GLcontext *ctx,
|
|||
return GL_FALSE;
|
||||
}
|
||||
/* unpack image, apply transfer ops and store in rawImage */
|
||||
_mesa_texstore_rgba8888(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, rawImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * rawBytes, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, GL_RGBA,
|
||||
&_mesa_texformat_rgba8888_rev, rawImage,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
width * rawBytes, /* dstRowStride */
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_rescale_teximage2d(rawBytes,
|
||||
width,
|
||||
newWidth * rawBytes, /* dst stride */
|
||||
width, height, /* src */
|
||||
newWidth, newHeight, /* dst */
|
||||
rawImage /*src*/, tempImage /*dst*/ );
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset * mml->wScale, yoffset * mml->hScale, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
newWidth, newHeight, 1,
|
||||
GL_RGBA, CHAN_TYPE, tempImage, &ctx->DefaultPacking);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
xoffset * mml->wScale, yoffset * mml->hScale, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
newWidth, newHeight, 1,
|
||||
GL_RGBA, CHAN_TYPE, tempImage, &ctx->DefaultPacking);
|
||||
FREE(rawImage);
|
||||
}
|
||||
|
||||
|
|
@ -1349,7 +1353,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
|
||||
#if FX_COMPRESS_S3TC_AS_FXT1_HACK
|
||||
/* [koolsmoky] substitute FXT1 for DXTn and Legacy S3TC */
|
||||
if (!ctx->Mesa_DXTn && texImage->IsCompressed) {
|
||||
if (!ctx->Mesa_DXTn && _mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
switch (internalFormat) {
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
case GL_RGB_S3TC:
|
||||
|
|
@ -1376,30 +1380,22 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
}
|
||||
if (texNapalm) {
|
||||
texImage->InternalFormat = internalFormat = texNapalm;
|
||||
texImage->IsCompressed = GL_TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* choose the texture format */
|
||||
assert(ctx->Driver.ChooseTextureFormat);
|
||||
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
|
||||
internalFormat, format, type);
|
||||
assert(texImage->TexFormat);
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
|
||||
/*if (!fxMesa->HaveTexFmt) assert(texelBytes == 1 || texelBytes == 2);*/
|
||||
|
||||
mml->glideFormat = fxGlideFormat(texImage->TexFormat->MesaFormat);
|
||||
|
||||
/* allocate mipmap buffer */
|
||||
assert(!texImage->Data);
|
||||
if (texImage->IsCompressed) {
|
||||
texImage->CompressedSize = _mesa_compressed_texture_size(ctx,
|
||||
mml->width,
|
||||
mml->height,
|
||||
1,
|
||||
internalFormat);
|
||||
dstRowStride = _mesa_compressed_row_stride(internalFormat, mml->width);
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
texImage->CompressedSize = _mesa_format_image_size(texImage->TexFormat,
|
||||
mml->width,
|
||||
mml->height, 1);
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
texImage->Data = _mesa_malloc(texImage->CompressedSize);
|
||||
} else {
|
||||
dstRowStride = mml->width * texelBytes;
|
||||
|
|
@ -1430,13 +1426,13 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
else {
|
||||
/* no rescaling needed */
|
||||
/* unpack image, apply transfer ops and store in texImage->Data */
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, texImage->Data,
|
||||
0, 0, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
}
|
||||
|
||||
/* GL_SGIS_generate_mipmap */
|
||||
|
|
@ -1447,7 +1443,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
|
||||
const GLint maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
|
||||
|
||||
assert(!texImage->IsCompressed);
|
||||
assert(!_mesa_is_format_compressed(texImage->TexFormat));
|
||||
|
||||
while (level < texObj->MaxLevel && level < maxLevels - 1) {
|
||||
mipWidth = width / 2;
|
||||
|
|
@ -1518,9 +1514,9 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
assert(texImage->Data); /* must have an existing texture image! */
|
||||
assert(texImage->_BaseFormat);
|
||||
|
||||
texelBytes = texImage->TexFormat->TexelBytes;
|
||||
if (texImage->IsCompressed) {
|
||||
dstRowStride = _mesa_compressed_row_stride(texImage->InternalFormat, mml->width);
|
||||
texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
|
||||
if (_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
dstRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
} else {
|
||||
dstRowStride = mml->width * texelBytes;
|
||||
}
|
||||
|
|
@ -1543,13 +1539,13 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
}
|
||||
else {
|
||||
/* no rescaling needed */
|
||||
texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, (GLubyte *) texImage->Data,
|
||||
xoffset, yoffset, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
_mesa_texstore(ctx, 2, texImage->_BaseFormat,
|
||||
texImage->TexFormat, (GLubyte *) texImage->Data,
|
||||
xoffset, yoffset, 0, /* dstX/Y/Zoffset */
|
||||
dstRowStride,
|
||||
0, /* dstImageStride */
|
||||
width, height, 1,
|
||||
format, type, pixels, packing);
|
||||
}
|
||||
|
||||
/* GL_SGIS_generate_mipmap */
|
||||
|
|
@ -1560,7 +1556,7 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
|
|||
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
|
||||
const GLint maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
|
||||
|
||||
assert(!texImage->IsCompressed);
|
||||
assert(!_mesa_is_format_compressed(texImage->TexFormat));
|
||||
|
||||
width = texImage->Width;
|
||||
height = texImage->Height;
|
||||
|
|
@ -1616,7 +1612,7 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
width, height);
|
||||
}
|
||||
|
||||
assert(texImage->IsCompressed);
|
||||
assert(_mesa_is_format_compressed(texImage->TexFormat));
|
||||
|
||||
if (!fxIsTexSupported(target, internalFormat, texImage)) {
|
||||
_mesa_problem(NULL, "fx Driver: unsupported texture in fxDDCompressedTexImg()\n");
|
||||
|
|
@ -1647,13 +1643,6 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
mml->width = width * mml->wScale;
|
||||
mml->height = height * mml->hScale;
|
||||
|
||||
|
||||
/* choose the texture format */
|
||||
assert(ctx->Driver.ChooseTextureFormat);
|
||||
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
|
||||
internalFormat, -1/*format*/, -1/*type*/);
|
||||
assert(texImage->TexFormat);
|
||||
|
||||
/* Determine the appropriate Glide texel format,
|
||||
* given the user's internal texture format hint.
|
||||
*/
|
||||
|
|
@ -1661,11 +1650,9 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
|
||||
/* allocate new storage for texture image, if needed */
|
||||
if (!texImage->Data) {
|
||||
texImage->CompressedSize = _mesa_compressed_texture_size(ctx,
|
||||
mml->width,
|
||||
mml->height,
|
||||
1,
|
||||
internalFormat);
|
||||
texImage->CompressedSize = _mesa_format_image_size(texImage->TexFormat,
|
||||
mml->width,
|
||||
mml->height, 1);
|
||||
texImage->Data = _mesa_malloc(texImage->CompressedSize);
|
||||
if (!texImage->Data) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D");
|
||||
|
|
@ -1689,10 +1676,10 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
* we replicate the data over the padded area.
|
||||
* For now, we take 2) + 3) but texelfetchers will be wrong!
|
||||
*/
|
||||
GLuint srcRowStride = _mesa_compressed_row_stride(internalFormat, width);
|
||||
GLuint srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
|
||||
|
||||
GLuint destRowStride = _mesa_compressed_row_stride(internalFormat,
|
||||
mml->width);
|
||||
GLuint destRowStride = _mesa_format_row_stride(texImage->TexFormat,
|
||||
mml->width);
|
||||
|
||||
_mesa_upscale_teximage2d(srcRowStride, (height+3) / 4,
|
||||
destRowStride, (mml->height+3) / 4,
|
||||
|
|
@ -1708,7 +1695,7 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
|
|||
|
||||
/* GL_SGIS_generate_mipmap */
|
||||
if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
|
||||
assert(!texImage->IsCompressed);
|
||||
assert(!_mesa_is_format_compressed(texImage->TexFormat));
|
||||
}
|
||||
|
||||
fxTexInvalidate(ctx, texObj);
|
||||
|
|
@ -1740,10 +1727,9 @@ fxDDCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
mml = FX_MIPMAP_DATA(texImage);
|
||||
assert(mml);
|
||||
|
||||
srcRowStride = _mesa_compressed_row_stride(texImage->InternalFormat, width);
|
||||
srcRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
|
||||
|
||||
destRowStride = _mesa_compressed_row_stride(texImage->InternalFormat,
|
||||
mml->width);
|
||||
destRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
dest = _mesa_compressed_image_address(xoffset, yoffset, 0,
|
||||
texImage->InternalFormat,
|
||||
mml->width,
|
||||
|
|
@ -1761,10 +1747,9 @@ fxDDCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
* see fxDDCompressedTexImage2D for caveats
|
||||
*/
|
||||
if (mml->wScale != 1 || mml->hScale != 1) {
|
||||
srcRowStride = _mesa_compressed_row_stride(texImage->InternalFormat, texImage->Width);
|
||||
srcRowStride = _mesa_format_row_stride(texImage->TexFormat, texImage->Width);
|
||||
|
||||
destRowStride = _mesa_compressed_row_stride(texImage->InternalFormat,
|
||||
mml->width);
|
||||
destRowStride = _mesa_format_row_stride(texImage->TexFormat, mml->width);
|
||||
_mesa_upscale_teximage2d(srcRowStride, texImage->Height / 4,
|
||||
destRowStride, mml->height / 4,
|
||||
1, texImage->Data, destRowStride,
|
||||
|
|
@ -1773,7 +1758,7 @@ fxDDCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
|
|||
|
||||
/* GL_SGIS_generate_mipmap */
|
||||
if (level == texObj->BaseLevel && texObj->GenerateMipmap) {
|
||||
assert(!texImage->IsCompressed);
|
||||
assert(!_mesa_is_format_compressed(texImage->TexFormat));
|
||||
}
|
||||
|
||||
if (ti->validated && ti->isInTM)
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
#include "fxdrv.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/texstore.h"
|
||||
#include "tnl/tnl.h"
|
||||
#include "tnl/t_context.h"
|
||||
|
|
@ -91,7 +92,7 @@ fxTexValidate(GLcontext * ctx, struct gl_texture_object *tObj)
|
|||
GLint _w, _h, maxSize = 1 << fxMesa->textureMaxLod;
|
||||
if ((mml->width > maxSize) || (mml->height > maxSize)) {
|
||||
/* need to rescale */
|
||||
GLint texelBytes = texImage->TexFormat->TexelBytes;
|
||||
GLint texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
|
||||
GLvoid *texImage_Data = texImage->Data;
|
||||
_w = MIN2(texImage->Width, maxSize);
|
||||
_h = MIN2(texImage->Height, maxSize);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "GL/osmesa.h"
|
||||
#include "main/context.h"
|
||||
#include "main/extensions.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
|
|
@ -840,11 +841,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
else
|
||||
bpc = 32;
|
||||
|
||||
rb->RedBits =
|
||||
rb->GreenBits =
|
||||
rb->BlueBits =
|
||||
rb->AlphaBits = bpc;
|
||||
|
||||
/* Note: we can ignoring internalFormat for "window-system" renderbuffers */
|
||||
(void) internalFormat;
|
||||
|
||||
|
|
@ -876,7 +872,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutValues = put_values_RGBA32;
|
||||
rb->PutMonoValues = put_mono_values_RGBA32;
|
||||
}
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = rb->AlphaBits = bpc;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_BGRA) {
|
||||
if (rb->DataType == GL_UNSIGNED_BYTE) {
|
||||
|
|
@ -906,7 +901,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutValues = put_values_BGRA32;
|
||||
rb->PutMonoValues = put_mono_values_BGRA32;
|
||||
}
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = rb->AlphaBits = bpc;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_ARGB) {
|
||||
if (rb->DataType == GL_UNSIGNED_BYTE) {
|
||||
|
|
@ -936,7 +930,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutValues = put_values_ARGB32;
|
||||
rb->PutMonoValues = put_mono_values_ARGB32;
|
||||
}
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = rb->AlphaBits = bpc;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_RGB) {
|
||||
if (rb->DataType == GL_UNSIGNED_BYTE) {
|
||||
|
|
@ -966,7 +959,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutValues = put_values_RGB32;
|
||||
rb->PutMonoValues = put_mono_values_RGB32;
|
||||
}
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = bpc;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_BGR) {
|
||||
if (rb->DataType == GL_UNSIGNED_BYTE) {
|
||||
|
|
@ -996,7 +988,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutValues = put_values_BGR32;
|
||||
rb->PutMonoValues = put_mono_values_BGR32;
|
||||
}
|
||||
rb->RedBits = rb->GreenBits = rb->BlueBits = bpc;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_RGB_565) {
|
||||
ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
|
||||
|
|
@ -1007,9 +998,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutMonoRow = put_mono_row_RGB_565;
|
||||
rb->PutValues = put_values_RGB_565;
|
||||
rb->PutMonoValues = put_mono_values_RGB_565;
|
||||
rb->RedBits = 5;
|
||||
rb->GreenBits = 6;
|
||||
rb->BlueBits = 5;
|
||||
}
|
||||
else if (osmesa->format == OSMESA_COLOR_INDEX) {
|
||||
rb->GetRow = get_row_CI;
|
||||
|
|
@ -1018,7 +1006,6 @@ osmesa_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
|
|||
rb->PutMonoRow = put_mono_row_CI;
|
||||
rb->PutValues = put_values_CI;
|
||||
rb->PutMonoValues = put_mono_values_CI;
|
||||
rb->IndexBits = 8;
|
||||
}
|
||||
else {
|
||||
_mesa_problem(ctx, "bad pixel format in osmesa renderbuffer_storage");
|
||||
|
|
@ -1048,13 +1035,13 @@ new_osmesa_renderbuffer(GLcontext *ctx, GLenum format, GLenum type)
|
|||
|
||||
if (format == OSMESA_COLOR_INDEX) {
|
||||
rb->InternalFormat = GL_COLOR_INDEX;
|
||||
rb->_ActualFormat = GL_COLOR_INDEX8_EXT;
|
||||
rb->Format = MESA_FORMAT_CI8;
|
||||
rb->_BaseFormat = GL_COLOR_INDEX;
|
||||
rb->DataType = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
else {
|
||||
rb->InternalFormat = GL_RGBA;
|
||||
rb->_ActualFormat = GL_RGBA;
|
||||
rb->Format = MESA_FORMAT_RGBA8888;
|
||||
rb->_BaseFormat = GL_RGBA;
|
||||
rb->DataType = type;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include "glxheader.h"
|
||||
#include "xmesaP.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/formats.h"
|
||||
#include "main/framebuffer.h"
|
||||
#include "main/renderbuffer.h"
|
||||
|
||||
|
|
@ -338,18 +339,15 @@ xmesa_new_renderbuffer(GLcontext *ctx, GLuint name, const GLvisual *visual,
|
|||
|
||||
if (visual->rgbMode) {
|
||||
xrb->Base.InternalFormat = GL_RGBA;
|
||||
xrb->Base.Format = MESA_FORMAT_RGBA8888;
|
||||
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;
|
||||
}
|
||||
else {
|
||||
xrb->Base.InternalFormat = GL_COLOR_INDEX;
|
||||
xrb->Base.Format = MESA_FORMAT_CI8;
|
||||
xrb->Base._BaseFormat = GL_COLOR_INDEX;
|
||||
xrb->Base.DataType = GL_UNSIGNED_INT;
|
||||
xrb->Base.IndexBits = visual->indexBits;
|
||||
}
|
||||
/* only need to set Red/Green/EtcBits fields for user-created RBs */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -448,7 +448,7 @@ can_do_DrawPixels_8R8G8B(GLcontext *ctx, GLenum format, GLenum type)
|
|||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb->Wrapped);
|
||||
if (xrb &&
|
||||
xrb->pixmap && /* drawing to pixmap or window */
|
||||
xrb->Base.AlphaBits == 0) {
|
||||
_mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -582,7 +582,7 @@ can_do_DrawPixels_5R6G5B(GLcontext *ctx, GLenum format, GLenum type)
|
|||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb->Wrapped);
|
||||
if (xrb &&
|
||||
xrb->pixmap && /* drawing to pixmap or window */
|
||||
xrb->Base.AlphaBits == 0) {
|
||||
_mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1019,15 +1019,15 @@ test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
/**
|
||||
* In SW, we don't really compress GL_COMPRESSED_RGB[A] textures!
|
||||
*/
|
||||
static const struct gl_texture_format *
|
||||
static gl_format
|
||||
choose_tex_format( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
switch (internalFormat) {
|
||||
case GL_COMPRESSED_RGB_ARB:
|
||||
return &_mesa_texformat_rgb;
|
||||
return MESA_FORMAT_RGB888;
|
||||
case GL_COMPRESSED_RGBA_ARB:
|
||||
return &_mesa_texformat_rgba;
|
||||
return MESA_FORMAT_RGBA8888;
|
||||
default:
|
||||
return _mesa_choose_tex_format(ctx, internalFormat, format, type);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,9 +140,9 @@
|
|||
*/
|
||||
#define UNCLAMPED_FLOAT_TO_RGB_CHAN(dst, f) \
|
||||
do { \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[0], f[0]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[1], f[1]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[2], f[2]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[0], (f)[0]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[1], (f)[1]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[2], (f)[2]); \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
|
@ -156,10 +156,10 @@ do { \
|
|||
*/
|
||||
#define UNCLAMPED_FLOAT_TO_RGBA_CHAN(dst, f) \
|
||||
do { \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[0], f[0]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[1], f[1]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[2], f[2]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN(dst[3], f[3]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[0], (f)[0]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[1], (f)[1]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[2], (f)[2]); \
|
||||
UNCLAMPED_FLOAT_TO_CHAN((dst)[3], (f)[3]); \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -184,8 +184,8 @@ struct dd_function_table {
|
|||
* functions. The driver should examine \p internalFormat and return a
|
||||
* pointer to an appropriate gl_texture_format.
|
||||
*/
|
||||
const struct gl_texture_format *(*ChooseTextureFormat)( GLcontext *ctx,
|
||||
GLint internalFormat, GLenum srcFormat, GLenum srcType );
|
||||
GLuint (*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum srcFormat, GLenum srcType );
|
||||
|
||||
/**
|
||||
* Called by glTexImage1D().
|
||||
|
|
@ -475,13 +475,6 @@ struct dd_function_table {
|
|||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage);
|
||||
|
||||
/**
|
||||
* Called to query number of bytes of storage needed to store the
|
||||
* specified compressed texture.
|
||||
*/
|
||||
GLuint (*CompressedTextureSize)( GLcontext *ctx, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLenum format );
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue