mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
radeon/r200/r300: add support for new tfp interface
also fixup old interface, gets rid of white boxes in compiz
This commit is contained in:
parent
2d26d4ac66
commit
4a2cb696cc
7 changed files with 57 additions and 11 deletions
|
|
@ -36,6 +36,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#define __R200_TEX_H__
|
#define __R200_TEX_H__
|
||||||
|
|
||||||
extern void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv);
|
extern void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv);
|
||||||
|
extern void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format,
|
||||||
|
__DRIdrawable *dPriv);
|
||||||
extern void r200SetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
extern void r200SetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
||||||
unsigned long long offset, GLint depth,
|
unsigned long long offset, GLint depth,
|
||||||
GLuint pitch);
|
GLuint pitch);
|
||||||
|
|
|
||||||
|
|
@ -765,7 +765,8 @@ void r200SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format,
|
||||||
|
__DRIdrawable *dPriv)
|
||||||
{
|
{
|
||||||
struct gl_texture_unit *texUnit;
|
struct gl_texture_unit *texUnit;
|
||||||
struct gl_texture_object *texObj;
|
struct gl_texture_object *texObj;
|
||||||
|
|
@ -777,8 +778,11 @@ void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
struct radeon_framebuffer *rfb;
|
struct radeon_framebuffer *rfb;
|
||||||
radeonTexObjPtr t;
|
radeonTexObjPtr t;
|
||||||
uint32_t pitch_val;
|
uint32_t pitch_val;
|
||||||
|
uint32_t internalFormat, type, format;
|
||||||
|
|
||||||
target = GL_TEXTURE_RECTANGLE_ARB;
|
type = GL_BGRA;
|
||||||
|
format = GL_UNSIGNED_BYTE;
|
||||||
|
internalFormat = (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT ? 3 : 4);
|
||||||
|
|
||||||
radeon = pDRICtx->driverPrivate;
|
radeon = pDRICtx->driverPrivate;
|
||||||
rmesa = pDRICtx->driverPrivate;
|
rmesa = pDRICtx->driverPrivate;
|
||||||
|
|
@ -832,7 +836,9 @@ void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
fprintf(stderr,"settexbuf %d %dx%d@%d\n", rb->pitch, rb->width, rb->height, rb->cpp);
|
fprintf(stderr,"settexbuf %d %dx%d@%d\n", rb->pitch, rb->width, rb->height, rb->cpp);
|
||||||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||||
rb->width, rb->height, 1, 0, rb->cpp);
|
rb->width, rb->height, 1, 0, rb->cpp);
|
||||||
texImage->TexFormat = &_mesa_texformat_rgba8888_rev;
|
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||||
|
internalFormat,
|
||||||
|
type, format);
|
||||||
rImage->bo = rb->bo;
|
rImage->bo = rb->bo;
|
||||||
radeon_bo_ref(rImage->bo);
|
radeon_bo_ref(rImage->bo);
|
||||||
t->bo = rb->bo;
|
t->bo = rb->bo;
|
||||||
|
|
@ -868,6 +874,13 @@ void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void r200SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
|
{
|
||||||
|
r200SetTexBuffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define REF_COLOR 1
|
#define REF_COLOR 1
|
||||||
#define REF_ALPHA 2
|
#define REF_ALPHA 2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,9 @@ extern void r300SetDepthTexMode(struct gl_texture_object *tObj);
|
||||||
extern void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target,
|
extern void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target,
|
||||||
__DRIdrawable *dPriv);
|
__DRIdrawable *dPriv);
|
||||||
|
|
||||||
|
extern void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
|
||||||
|
GLint format, __DRIdrawable *dPriv);
|
||||||
|
|
||||||
extern void r300SetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
extern void r300SetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
||||||
unsigned long long offset, GLint depth,
|
unsigned long long offset, GLint depth,
|
||||||
GLuint pitch);
|
GLuint pitch);
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ void r300SetTexOffset(__DRIcontext * pDRICtx, GLint texname,
|
||||||
t->pp_txpitch |= pitch_val;
|
t->pp_txpitch |= pitch_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format, __DRIdrawable *dPriv)
|
||||||
{
|
{
|
||||||
struct gl_texture_unit *texUnit;
|
struct gl_texture_unit *texUnit;
|
||||||
struct gl_texture_object *texObj;
|
struct gl_texture_object *texObj;
|
||||||
|
|
@ -396,8 +396,11 @@ void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
struct radeon_framebuffer *rfb;
|
struct radeon_framebuffer *rfb;
|
||||||
radeonTexObjPtr t;
|
radeonTexObjPtr t;
|
||||||
uint32_t pitch_val;
|
uint32_t pitch_val;
|
||||||
|
uint32_t internalFormat, type, format;
|
||||||
|
|
||||||
target = GL_TEXTURE_RECTANGLE_ARB;
|
type = GL_BGRA;
|
||||||
|
format = GL_UNSIGNED_BYTE;
|
||||||
|
internalFormat = (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT ? 3 : 4);
|
||||||
|
|
||||||
radeon = pDRICtx->driverPrivate;
|
radeon = pDRICtx->driverPrivate;
|
||||||
rmesa = pDRICtx->driverPrivate;
|
rmesa = pDRICtx->driverPrivate;
|
||||||
|
|
@ -448,10 +451,12 @@ void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
radeon_miptree_unreference(rImage->mt);
|
radeon_miptree_unreference(rImage->mt);
|
||||||
rImage->mt = NULL;
|
rImage->mt = NULL;
|
||||||
}
|
}
|
||||||
fprintf(stderr,"settexbuf %dx%d@%d\n", rb->width, rb->height, rb->cpp);
|
fprintf(stderr,"settexbuf %dx%d@%d targ %x format %x\n", rb->width, rb->height, rb->cpp, target, format);
|
||||||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||||
rb->width, rb->height, 1, 0, rb->cpp);
|
rb->width, rb->height, 1, 0, rb->cpp);
|
||||||
texImage->TexFormat = &_mesa_texformat_rgba8888_rev;
|
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||||
|
internalFormat,
|
||||||
|
type, format);
|
||||||
rImage->bo = rb->bo;
|
rImage->bo = rb->bo;
|
||||||
radeon_bo_ref(rImage->bo);
|
radeon_bo_ref(rImage->bo);
|
||||||
t->bo = rb->bo;
|
t->bo = rb->bo;
|
||||||
|
|
@ -495,3 +500,8 @@ void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
_mesa_unlock_texture(radeon->glCtx, texObj);
|
_mesa_unlock_texture(radeon->glCtx, texObj);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
|
{
|
||||||
|
r300SetTexBuffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -339,6 +339,7 @@ static const __DRItexOffsetExtension radeonTexOffsetExtension = {
|
||||||
static const __DRItexBufferExtension radeonTexBufferExtension = {
|
static const __DRItexBufferExtension radeonTexBufferExtension = {
|
||||||
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
||||||
radeonSetTexBuffer,
|
radeonSetTexBuffer,
|
||||||
|
radeonSetTexBuffer2,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -358,6 +359,7 @@ static const __DRItexOffsetExtension r200texOffsetExtension = {
|
||||||
static const __DRItexBufferExtension r200TexBufferExtension = {
|
static const __DRItexBufferExtension r200TexBufferExtension = {
|
||||||
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
||||||
r200SetTexBuffer,
|
r200SetTexBuffer,
|
||||||
|
r200SetTexBuffer2,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -370,6 +372,7 @@ static const __DRItexOffsetExtension r300texOffsetExtension = {
|
||||||
static const __DRItexBufferExtension r300TexBufferExtension = {
|
static const __DRItexBufferExtension r300TexBufferExtension = {
|
||||||
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
{ __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION },
|
||||||
r300SetTexBuffer,
|
r300SetTexBuffer,
|
||||||
|
r300SetTexBuffer2,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,9 @@ extern void radeonSetTexOffset(__DRIcontext *pDRICtx, GLint texname,
|
||||||
GLuint pitch);
|
GLuint pitch);
|
||||||
|
|
||||||
extern void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv);
|
extern void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv);
|
||||||
|
externvoid radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format,
|
||||||
|
__DRIdrawable *dPriv);
|
||||||
|
|
||||||
extern void radeonUpdateTextureState( GLcontext *ctx );
|
extern void radeonUpdateTextureState( GLcontext *ctx );
|
||||||
|
|
||||||
extern int radeonUploadTexImages( r100ContextPtr rmesa, radeonTexObjPtr t,
|
extern int radeonUploadTexImages( r100ContextPtr rmesa, radeonTexObjPtr t,
|
||||||
|
|
|
||||||
|
|
@ -637,7 +637,8 @@ void radeonSetTexOffset(__DRIcontext * pDRICtx, GLint texname,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_format,
|
||||||
|
__DRIdrawable *dPriv)
|
||||||
{
|
{
|
||||||
struct gl_texture_unit *texUnit;
|
struct gl_texture_unit *texUnit;
|
||||||
struct gl_texture_object *texObj;
|
struct gl_texture_object *texObj;
|
||||||
|
|
@ -649,8 +650,11 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
|
||||||
struct radeon_framebuffer *rfb;
|
struct radeon_framebuffer *rfb;
|
||||||
radeonTexObjPtr t;
|
radeonTexObjPtr t;
|
||||||
uint32_t pitch_val;
|
uint32_t pitch_val;
|
||||||
|
uint32_t internalFormat, type, format;
|
||||||
|
|
||||||
target = GL_TEXTURE_RECTANGLE_ARB;
|
type = GL_BGRA;
|
||||||
|
format = GL_UNSIGNED_BYTE;
|
||||||
|
internalFormat = (glx_texture_format == GLX_TEXTURE_FORMAT_RGB_EXT ? 3 : 4);
|
||||||
|
|
||||||
radeon = pDRICtx->driverPrivate;
|
radeon = pDRICtx->driverPrivate;
|
||||||
rmesa = pDRICtx->driverPrivate;
|
rmesa = pDRICtx->driverPrivate;
|
||||||
|
|
@ -701,10 +705,11 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
|
||||||
radeon_miptree_unreference(rImage->mt);
|
radeon_miptree_unreference(rImage->mt);
|
||||||
rImage->mt = NULL;
|
rImage->mt = NULL;
|
||||||
}
|
}
|
||||||
fprintf(stderr,"settexbuf %d %dx%d@%d\n", rb->pitch, rb->width, rb->height, rb->cpp);
|
|
||||||
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
_mesa_init_teximage_fields(radeon->glCtx, target, texImage,
|
||||||
rb->width, rb->height, 1, 0, rb->cpp);
|
rb->width, rb->height, 1, 0, rb->cpp);
|
||||||
texImage->TexFormat = &_mesa_texformat_rgba8888_rev;
|
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
|
||||||
|
internalFormat,
|
||||||
|
type, format);
|
||||||
rImage->bo = rb->bo;
|
rImage->bo = rb->bo;
|
||||||
radeon_bo_ref(rImage->bo);
|
radeon_bo_ref(rImage->bo);
|
||||||
t->bo = rb->bo;
|
t->bo = rb->bo;
|
||||||
|
|
@ -740,6 +745,13 @@ void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPri
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void radeonSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
||||||
|
{
|
||||||
|
radeonSetTexBuffer2(pDRICtx, target, GLX_TEXTURE_FORMAT_RGBA_EXT, dPriv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define TEXOBJ_TXFILTER_MASK (RADEON_MAX_MIP_LEVEL_MASK | \
|
#define TEXOBJ_TXFILTER_MASK (RADEON_MAX_MIP_LEVEL_MASK | \
|
||||||
RADEON_MIN_FILTER_MASK | \
|
RADEON_MIN_FILTER_MASK | \
|
||||||
RADEON_MAG_FILTER_MASK | \
|
RADEON_MAG_FILTER_MASK | \
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue