gallium: add debug_print_format() make it easier to print format error messages
This commit is contained in:
@@ -41,6 +41,7 @@
|
|||||||
#include "pipe/p_compiler.h"
|
#include "pipe/p_compiler.h"
|
||||||
#include "pipe/p_util.h"
|
#include "pipe/p_util.h"
|
||||||
#include "pipe/p_debug.h"
|
#include "pipe/p_debug.h"
|
||||||
|
#include "pipe/p_format.h"
|
||||||
#include "util/u_string.h"
|
#include "util/u_string.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -324,3 +325,99 @@ debug_dump_flags(const struct debug_named_value *names,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char *pf_sprint_name( char *str, enum pipe_format format )
|
||||||
|
{
|
||||||
|
strcpy( str, "PIPE_FORMAT_" );
|
||||||
|
switch (pf_layout( format )) {
|
||||||
|
case PIPE_FORMAT_LAYOUT_RGBAZS:
|
||||||
|
{
|
||||||
|
pipe_format_rgbazs_t rgbazs = (pipe_format_rgbazs_t) format;
|
||||||
|
uint i;
|
||||||
|
uint scale = 1 << (pf_exp8( rgbazs ) * 3);
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
uint size = pf_size_xyzw( rgbazs, i );
|
||||||
|
|
||||||
|
if (size == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (pf_swizzle_xyzw( rgbazs, i )) {
|
||||||
|
case PIPE_FORMAT_COMP_R:
|
||||||
|
strcat( str, "R" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_G:
|
||||||
|
strcat( str, "G" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_B:
|
||||||
|
strcat( str, "B" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_A:
|
||||||
|
strcat( str, "A" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_0:
|
||||||
|
strcat( str, "0" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_1:
|
||||||
|
strcat( str, "1" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_Z:
|
||||||
|
strcat( str, "Z" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_COMP_S:
|
||||||
|
strcat( str, "S" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
util_snprintf( &str[strlen( str )], 32, "%u", size * scale );
|
||||||
|
}
|
||||||
|
if (i != 0) {
|
||||||
|
strcat( str, "_" );
|
||||||
|
}
|
||||||
|
switch (pf_type( rgbazs )) {
|
||||||
|
case PIPE_FORMAT_TYPE_UNKNOWN:
|
||||||
|
strcat( str, "NONE" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_TYPE_FLOAT:
|
||||||
|
strcat( str, "FLOAT" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_TYPE_UNORM:
|
||||||
|
strcat( str, "UNORM" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_TYPE_SNORM:
|
||||||
|
strcat( str, "SNORM" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_TYPE_USCALED:
|
||||||
|
strcat( str, "USCALED" );
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_TYPE_SSCALED:
|
||||||
|
strcat( str, "SSCALED" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_LAYOUT_YCBCR:
|
||||||
|
{
|
||||||
|
pipe_format_ycbcr_t ycbcr = (pipe_format_ycbcr_t) format;
|
||||||
|
|
||||||
|
strcat( str, "YCBCR" );
|
||||||
|
if (pf_rev( ycbcr )) {
|
||||||
|
strcat( str, "_REV" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void debug_print_format(const char *msg, enum pipe_format fmt )
|
||||||
|
{
|
||||||
|
char fmtstr[80];
|
||||||
|
|
||||||
|
pf_sprint_name(fmtstr, fmt);
|
||||||
|
|
||||||
|
debug_printf("%s: %s\n", msg, fmtstr);
|
||||||
|
}
|
||||||
|
@@ -91,7 +91,8 @@ util_pack_color_ub(ubyte r, ubyte g, ubyte b, ubyte a,
|
|||||||
return;
|
return;
|
||||||
/* XXX lots more cases to add */
|
/* XXX lots more cases to add */
|
||||||
default:
|
default:
|
||||||
debug_printf("gallium: unhandled format in util_pack_color_ub()\n");
|
debug_print_format("gallium: unhandled format in util_pack_color_ub()", format);
|
||||||
|
assert(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +175,8 @@ util_pack_color(const float rgba[4], enum pipe_format format, void *dest)
|
|||||||
return;
|
return;
|
||||||
/* XXX lots more cases to add */
|
/* XXX lots more cases to add */
|
||||||
default:
|
default:
|
||||||
debug_printf("gallium: unhandled format in util_pack_color()\n");
|
debug_print_format("gallium: unhandled format in util_pack_color()", format);
|
||||||
|
assert(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +203,8 @@ util_pack_z(enum pipe_format format, double z)
|
|||||||
case PIPE_FORMAT_Z24X8_UNORM:
|
case PIPE_FORMAT_Z24X8_UNORM:
|
||||||
return ((uint) (z * 0xffffff)) << 8;
|
return ((uint) (z * 0xffffff)) << 8;
|
||||||
default:
|
default:
|
||||||
debug_printf("gallium: unhandled format in util_pack_z()\n");
|
debug_print_format("gallium: unhandled format in util_pack_z()", format);
|
||||||
|
assert(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -103,16 +103,19 @@ debug_printf(const char *format, ...)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
/**
|
/**
|
||||||
* Dump a blob in hex to the same place that debug_printf sends its
|
* Dump a blob in hex to the same place that debug_printf sends its
|
||||||
* messages.
|
* messages.
|
||||||
*/
|
*/
|
||||||
#ifdef DEBUG
|
void debug_print_blob( const char *name, const void *blob, unsigned size );
|
||||||
void debug_print_blob( const char *name,
|
|
||||||
const void *blob,
|
/* Print a message along with a prettified format string
|
||||||
unsigned size );
|
*/
|
||||||
|
void debug_print_format(const char *msg, enum pipe_format fmt );
|
||||||
#else
|
#else
|
||||||
#define debug_print_blob(_name, _blob, _size) ((void)0)
|
#define debug_print_blob(_name, _blob, _size) ((void)0)
|
||||||
|
#define debug_print_format(_msg, _fmt) ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@@ -337,88 +337,7 @@ enum pipe_format {
|
|||||||
/**
|
/**
|
||||||
* Builds pipe format name from format token.
|
* Builds pipe format name from format token.
|
||||||
*/
|
*/
|
||||||
static INLINE char *pf_sprint_name( char *str, enum pipe_format format )
|
extern char *pf_sprint_name( char *str, enum pipe_format format );
|
||||||
{
|
|
||||||
strcpy( str, "PIPE_FORMAT_" );
|
|
||||||
switch (pf_layout( format )) {
|
|
||||||
case PIPE_FORMAT_LAYOUT_RGBAZS:
|
|
||||||
{
|
|
||||||
pipe_format_rgbazs_t rgbazs = (pipe_format_rgbazs_t) format;
|
|
||||||
uint i;
|
|
||||||
uint scale = 1 << (pf_exp8( rgbazs ) * 3);
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
uint size = pf_size_xyzw( rgbazs, i );
|
|
||||||
|
|
||||||
if (size == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (pf_swizzle_xyzw( rgbazs, i )) {
|
|
||||||
case PIPE_FORMAT_COMP_R:
|
|
||||||
strcat( str, "R" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_G:
|
|
||||||
strcat( str, "G" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_B:
|
|
||||||
strcat( str, "B" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_A:
|
|
||||||
strcat( str, "A" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_0:
|
|
||||||
strcat( str, "0" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_1:
|
|
||||||
strcat( str, "1" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_Z:
|
|
||||||
strcat( str, "Z" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_COMP_S:
|
|
||||||
strcat( str, "S" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
util_snprintf( &str[strlen( str )], 32, "%u", size * scale );
|
|
||||||
}
|
|
||||||
if (i != 0) {
|
|
||||||
strcat( str, "_" );
|
|
||||||
}
|
|
||||||
switch (pf_type( rgbazs )) {
|
|
||||||
case PIPE_FORMAT_TYPE_UNKNOWN:
|
|
||||||
strcat( str, "NONE" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_TYPE_FLOAT:
|
|
||||||
strcat( str, "FLOAT" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_TYPE_UNORM:
|
|
||||||
strcat( str, "UNORM" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_TYPE_SNORM:
|
|
||||||
strcat( str, "SNORM" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_TYPE_USCALED:
|
|
||||||
strcat( str, "USCALED" );
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_TYPE_SSCALED:
|
|
||||||
strcat( str, "SSCALED" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PIPE_FORMAT_LAYOUT_YCBCR:
|
|
||||||
{
|
|
||||||
pipe_format_ycbcr_t ycbcr = (pipe_format_ycbcr_t) format;
|
|
||||||
|
|
||||||
strcat( str, "YCBCR" );
|
|
||||||
if (pf_rev( ycbcr )) {
|
|
||||||
strcat( str, "_REV" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return bits for a particular component.
|
* Return bits for a particular component.
|
||||||
|
Reference in New Issue
Block a user