FP textures and fixes (Ewald Snel)
This commit is contained in:
parent
e5b6eee15d
commit
c19de0b7f6
|
@ -116,6 +116,7 @@ const struct dri_extension card_extensions[] = {
|
|||
{"GL_ATI_texture_mirror_once", NULL},
|
||||
{"GL_MESA_pack_invert", NULL},
|
||||
{"GL_MESA_ycbcr_texture", NULL},
|
||||
{"GL_MESAX_texture_float", NULL},
|
||||
{"GL_NV_blend_square", NULL},
|
||||
{"GL_NV_vertex_program", GL_NV_vertex_program_functions},
|
||||
{"GL_SGIS_generate_mipmap", NULL},
|
||||
|
|
|
@ -615,7 +615,7 @@ struct r300_vertex_program {
|
|||
#define PFS_MAX_TEX_INST 64
|
||||
#define PFS_MAX_TEX_INDIRECT 4
|
||||
#define PFS_NUM_TEMP_REGS 32
|
||||
#define PFS_NUM_CONST_REGS 32
|
||||
#define PFS_NUM_CONST_REGS 16
|
||||
|
||||
/* Tracking data for Mesa registers */
|
||||
struct reg_acc {
|
||||
|
|
|
@ -886,7 +886,7 @@ static void emit_arith(struct r300_fragment_program *rp, int op,
|
|||
sop = r300_fpop[op].s_op;
|
||||
argc = r300_fpop[op].argc;
|
||||
|
||||
if (mask & WRITEMASK_XYZ)
|
||||
if ((mask & WRITEMASK_XYZ) || vop == R300_FPI0_OUTC_DP3)
|
||||
emit_vop = GL_TRUE;
|
||||
if ((mask & WRITEMASK_W) || vop == R300_FPI0_OUTC_REPL_ALPHA)
|
||||
emit_sop = GL_TRUE;
|
||||
|
|
|
@ -442,6 +442,31 @@ static const struct gl_texture_format *r300ChooseTextureFormat(GLcontext * ctx,
|
|||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
return &_mesa_texformat_rgba_dxt5;
|
||||
|
||||
case GL_ALPHA16F_ARB:
|
||||
return &_mesa_texformat_alpha_float16;
|
||||
case GL_ALPHA32F_ARB:
|
||||
return &_mesa_texformat_alpha_float32;
|
||||
case GL_LUMINANCE16F_ARB:
|
||||
return &_mesa_texformat_luminance_float16;
|
||||
case GL_LUMINANCE32F_ARB:
|
||||
return &_mesa_texformat_luminance_float32;
|
||||
case GL_LUMINANCE_ALPHA16F_ARB:
|
||||
return &_mesa_texformat_luminance_alpha_float16;
|
||||
case GL_LUMINANCE_ALPHA32F_ARB:
|
||||
return &_mesa_texformat_luminance_alpha_float32;
|
||||
case GL_INTENSITY16F_ARB:
|
||||
return &_mesa_texformat_intensity_float16;
|
||||
case GL_INTENSITY32F_ARB:
|
||||
return &_mesa_texformat_intensity_float32;
|
||||
case GL_RGB16F_ARB:
|
||||
return &_mesa_texformat_rgba_float16;
|
||||
case GL_RGB32F_ARB:
|
||||
return &_mesa_texformat_rgba_float32;
|
||||
case GL_RGBA16F_ARB:
|
||||
return &_mesa_texformat_rgba_float16;
|
||||
case GL_RGBA32F_ARB:
|
||||
return &_mesa_texformat_rgba_float32;
|
||||
|
||||
default:
|
||||
_mesa_problem(ctx,
|
||||
"unexpected internalFormat 0x%x in r300ChooseTextureFormat",
|
||||
|
|
|
@ -382,7 +382,17 @@ static void uploadSubImage( r300ContextPtr rmesa, r300TexObjPtr t,
|
|||
/* copy (x,y,width,height,data) */
|
||||
memcpy( &tmp, &t->image[face][hwlevel], sizeof(tmp) );
|
||||
|
||||
if (texImage->TexFormat->TexelBytes) {
|
||||
if (texImage->TexFormat->TexelBytes > 4) {
|
||||
const int log2TexelBytes = (3 + (texImage->TexFormat->TexelBytes >> 4));
|
||||
tex.format = RADEON_TXFORMAT_I8; /* any 1-byte texel format */
|
||||
tex.pitch = MAX2((texImage->Width * texImage->TexFormat->TexelBytes) / 64, 1);
|
||||
tex.height = imageHeight;
|
||||
tex.width = imageWidth << log2TexelBytes;
|
||||
tex.offset += (tmp.x << log2TexelBytes) & ~1023;
|
||||
tmp.x = tmp.x % (1024 >> log2TexelBytes);
|
||||
tmp.width = tmp.width << log2TexelBytes;
|
||||
}
|
||||
else if (texImage->TexFormat->TexelBytes) {
|
||||
/* use multi-byte upload scheme */
|
||||
tex.height = imageHeight;
|
||||
tex.width = imageWidth;
|
||||
|
|
|
@ -69,7 +69,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
[ MESA_FORMAT_ ## f ] = { R200_TXFORMAT_ ## f, R200_YUV_TO_RGB }
|
||||
#define _INVALID(f) \
|
||||
[ MESA_FORMAT_ ## f ] = { 0xffffffff, 0 }
|
||||
#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5) \
|
||||
#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5 \
|
||||
|| ((f) >= MESA_FORMAT_RGBA_FLOAT32 && (f) <= MESA_FORMAT_INTENSITY_FLOAT16)) \
|
||||
&& tx_table[f].flag )
|
||||
|
||||
#define _ASSIGN(entry, format) \
|
||||
|
@ -141,6 +142,18 @@ static const struct {
|
|||
_ASSIGN(RGBA_DXT1, R300_EASY_TX_FORMAT(X, Y, Z, W, DXT1)),
|
||||
_ASSIGN(RGBA_DXT3, R300_EASY_TX_FORMAT(X, Y, Z, W, DXT3)),
|
||||
_ASSIGN(RGBA_DXT5, R300_EASY_TX_FORMAT(Y, Z, W, X, DXT5)),
|
||||
_ASSIGN(RGBA_FLOAT32, R300_EASY_TX_FORMAT(Z, Y, X, W, FL_R32G32B32A32)),
|
||||
_ASSIGN(RGBA_FLOAT16, R300_EASY_TX_FORMAT(Z, Y, X, W, FL_R16G16B16A16)),
|
||||
_ASSIGN(RGB_FLOAT32, 0xffffffff),
|
||||
_ASSIGN(RGB_FLOAT16, 0xffffffff),
|
||||
_ASSIGN(ALPHA_FLOAT32, R300_EASY_TX_FORMAT(ZERO, ZERO, ZERO, X, FL_I32)),
|
||||
_ASSIGN(ALPHA_FLOAT16, R300_EASY_TX_FORMAT(ZERO, ZERO, ZERO, X, FL_I16)),
|
||||
_ASSIGN(LUMINANCE_FLOAT32, R300_EASY_TX_FORMAT(X, X, X, ONE, FL_I32)),
|
||||
_ASSIGN(LUMINANCE_FLOAT16, R300_EASY_TX_FORMAT(X, X, X, ONE, FL_I16)),
|
||||
_ASSIGN(LUMINANCE_ALPHA_FLOAT32, R300_EASY_TX_FORMAT(X, X, X, Y, FL_I32A32)),
|
||||
_ASSIGN(LUMINANCE_ALPHA_FLOAT16, R300_EASY_TX_FORMAT(X, X, X, Y, FL_I16A16)),
|
||||
_ASSIGN(INTENSITY_FLOAT32, R300_EASY_TX_FORMAT(X, X, X, X, FL_I32)),
|
||||
_ASSIGN(INTENSITY_FLOAT16, R300_EASY_TX_FORMAT(X, X, X, X, FL_I16)),
|
||||
};
|
||||
|
||||
#undef _COLOR
|
||||
|
|
Loading…
Reference in New Issue