r300: Add some useful debugging information; remove a couple compile warnings.

Deck chairs on the Titanic.
This commit is contained in:
Corbin Simpson 2009-01-24 03:34:17 -08:00
parent e54732eb3d
commit 902b1be0ea
3 changed files with 77 additions and 38 deletions

View File

@ -73,33 +73,6 @@ enum {
CHIP_FAMILY_RV570
};
static const char* chip_families[] = {
"R300",
"R350",
"R360",
"RV350",
"RV370",
"RV380",
"R420",
"R423",
"R430",
"R480",
"R481",
"RV410",
"RS400",
"RC410",
"RS480",
"RS482",
"RS690",
"RS740",
"RV515",
"R520",
"RV530",
"R580",
"RV560",
"RV570"
};
void r300_parse_chipset(struct r300_capabilities* caps);
#endif /* R300_CHIPSET_H */

View File

@ -67,6 +67,8 @@ static uint32_t pack_float_32(float f)
#define BEGIN_CS(size) do { \
CHECK_CS(size); \
debug_printf("r300: BEGIN_CS in %s (%s:%d)", __FUNCTION__, __FILE__, \
__LINE__); \
cs_winsys->begin_cs(cs, (size), __FILE__, __FUNCTION__, __LINE__); \
} while (0)
@ -91,10 +93,16 @@ static uint32_t pack_float_32(float f)
cs_winsys->write_cs_reloc(cs, bo, rd, wd, flags); \
} while (0)
#define END_CS \
cs_winsys->end_cs(cs, __FILE__, __FUNCTION__, __LINE__)
#define END_CS do { \
debug_printf("r300: END_CS in %s (%s:%d)", __FUNCTION__, __FILE__, \
__LINE__); \
cs_winsys->end_cs(cs, __FILE__, __FUNCTION__, __LINE__); \
} while (0)
#define FLUSH_CS \
cs_winsys->flush_cs(cs)
#define FLUSH_CS do { \
debug_printf("r300: FLUSH_CS in %s (%s:%d)", __FUNCTION__, __FILE__, \
__LINE__); \
cs_winsys->flush_cs(cs); \
} while (0)
#endif /* R300_CS_H */

View File

@ -22,11 +22,44 @@
#include "r300_screen.h"
/* Return the identifier behind whom the brave coders responsible for this
* amalgamation of code, sweat, and duct tape, routinely obscure their names.
*
* ...I should have just put "Corbin Simpson", but I'm not that cool.
*
* (Or egotistical. Yet.) */
static const char* r300_get_vendor(struct pipe_screen* pscreen)
{
return "X.Org R300 Project";
}
static const char* chip_families[] = {
"R300",
"R350",
"R360",
"RV350",
"RV370",
"RV380",
"R420",
"R423",
"R430",
"R480",
"R481",
"RV410",
"RS400",
"RC410",
"RS480",
"RS482",
"RS690",
"RS740",
"RV515",
"R520",
"RV530",
"R580",
"RV560",
"RV570"
};
static const char* r300_get_name(struct pipe_screen* pscreen)
{
struct r300_screen* r300screen = r300_screen(pscreen);
@ -74,18 +107,39 @@ static int r300_get_param(struct pipe_screen* pscreen, int param)
/* IN THEORY */
return 0;
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
/* 12 == 2048x2048 */
return 12;
if (r300screen->caps->is_r500) {
/* 13 == 4096x4096 */
return 13;
} else {
/* 12 == 2048x2048 */
return 12;
}
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
/* XXX educated guess */
return 8;
/* So, technically, the limit is the same as above, but some math
* shows why this is silly. Assuming RGBA, 4cpp, we can see that
* 4096*4096*4096 = 64.0 GiB exactly, so it's not exactly
* practical. However, if at some point a game really wants this,
* then we can remove this limit. */
if (r300screen->caps->is_r500) {
/* 9 == 256x256x256 */
return 9;
} else {
/* 8 == 128*128*128 */
return 8;
}
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
/* XXX educated guess */
return 11;
if (r300screen->caps->is_r500) {
/* 13 == 4096x4096 */
return 13;
} else {
/* 12 == 2048x2048 */
return 12;
}
case PIPE_CAP_MAX_RENDER_TARGETS:
/* XXX 4 eventually */
return 1;
default:
debug_printf("r300: Implementation error: Bad param %d", param);
return 0;
}
}
@ -108,7 +162,7 @@ static float r300_get_paramf(struct pipe_screen* pscreen, int param)
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
return 16.0f;
default:
/* XXX implementation error? */
debug_printf("r300: Implementation error: Bad paramf %d", param);
return 0.0f;
}
}
@ -121,6 +175,8 @@ static boolean check_tex_2d_format(enum pipe_format format)
case PIPE_FORMAT_I8_UNORM:
return TRUE;
default:
debug_printf("r300: Warning: Got unknown format: %d, in %s",
format, __FUNCTION__);
break;
}
@ -138,6 +194,8 @@ static boolean r300_is_format_supported(struct pipe_screen* pscreen,
case PIPE_TEXTURE_2D:
return check_tex_2d_format(format);
default:
debug_printf("r300: Warning: Got unknown format target: %d",
format);
break;
}