i965: Add gen8 blend state
OLD:
0x00007340: 0x00800000: BLEND:
0x00007344: 0x84202100: BLEND:
NEW:
0x00007340: 0x00800000: BLEND: Alpha blend/test
0x00007344: 0x0000000b84202100: BLEND_ENTRY00:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x0000734c: 0x0000000b84202100: BLEND_ENTRY01:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x00007354: 0x0000000b84202100: BLEND_ENTRY02:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x0000735c: 0x0000000b84202100: BLEND_ENTRY03:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x00007364: 0x0000000b84202100: BLEND_ENTRY04:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x0000736c: 0x0000000b84202100: BLEND_ENTRY05:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x00007374: 0x0000000b84202100: BLEND_ENTRY06:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
0x0000737c: 0x0000000b84202100: BLEND_ENTRY07:
Color Buffer Blend factor ONE,ONE,ONE,ONE (src,dst,src alpha, dst alpha)
function ADD,ADD (color, alpha), Disables: ----
v2: Line length fixes, and const usage (Topi)
Safer initialization of name string (Topi)
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2007 Intel Corporation
|
||||
* Copyright © 2007-2015 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -85,6 +85,25 @@ batch_out(struct brw_context *brw, const char *name, uint32_t offset,
|
||||
va_end(va);
|
||||
}
|
||||
|
||||
static void
|
||||
batch_out64(struct brw_context *brw, const char *name, uint32_t offset,
|
||||
int index, char *fmt, ...)
|
||||
{
|
||||
uint32_t *tmp = brw->batch.bo->virtual + offset;
|
||||
|
||||
/* Swap the dwords since we want to handle this as a 64b value, but the data
|
||||
* is typically emitted as dwords.
|
||||
*/
|
||||
uint64_t data = ((uint64_t)tmp[index + 1]) << 32 | tmp[index];
|
||||
va_list va;
|
||||
|
||||
fprintf(stderr, "0x%08x: 0x%016" PRIx64 ": %8s: ",
|
||||
offset + index * 4, data, name);
|
||||
va_start(va, fmt);
|
||||
vfprintf(stderr, fmt, va);
|
||||
va_end(va);
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_965_surfacetype(unsigned int surfacetype)
|
||||
{
|
||||
@@ -546,6 +565,92 @@ static void dump_blend_state(struct brw_context *brw, uint32_t offset)
|
||||
batch_out(brw, name, offset, 1, "\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gen8_dump_blend_state(struct brw_context *brw, uint32_t offset, uint32_t size)
|
||||
{
|
||||
const uint32_t *blend = brw->batch.bo->virtual + offset;
|
||||
const char *logicop[] =
|
||||
{
|
||||
"LOGICOP_CLEAR (BLACK)",
|
||||
"LOGICOP_NOR",
|
||||
"LOGICOP_AND_INVERTED",
|
||||
"LOGICOP_COPY_INVERTED",
|
||||
"LOGICOP_AND_REVERSE",
|
||||
"LOGICOP_INVERT",
|
||||
"LOGICOP_XOR",
|
||||
"LOGICOP_NAND",
|
||||
"LOGICOP_AND",
|
||||
"LOGICOP_EQUIV",
|
||||
"LOGICOP_NOOP",
|
||||
"LOGICOP_OR_INVERTED",
|
||||
"LOGICOP_COPY",
|
||||
"LOGICOP_OR_REVERSE",
|
||||
"LOGICOP_OR",
|
||||
"LOGICOP_SET (WHITE)"
|
||||
};
|
||||
|
||||
const char *blend_function[] =
|
||||
{ "ADD", "SUBTRACT", "REVERSE_SUBTRACT", "MIN", "MAX};" };
|
||||
|
||||
const char *blend_factor[0x1b] =
|
||||
{
|
||||
"RSVD",
|
||||
"ONE",
|
||||
"SRC_COLOR", "SRC_ALPHA",
|
||||
"DST_ALPHA", "DST_COLOR",
|
||||
"SRC_ALPHA_SATURATE",
|
||||
"CONST_COLOR", "CONST_ALPHA",
|
||||
"SRC1_COLOR", "SRC1_ALPHA",
|
||||
"RSVD", "RSVD", "RSVD", "RSVD", "RSVD", "RSVD",
|
||||
"ZERO",
|
||||
"INV_SRC_COLOR", "INV_SRC_ALPHA",
|
||||
"INV_DST_ALPHA", "INV_DST_COLOR",
|
||||
"RSVD",
|
||||
"INV_CONST_COLOR", "INV_CONST_ALPHA",
|
||||
"INV_SRC1_COLOR", "INV_SRC1_ALPHA"
|
||||
};
|
||||
|
||||
batch_out(brw, "BLEND", offset, 0, "Alpha blend/test\n");
|
||||
|
||||
if (((size) % 2) != 0)
|
||||
fprintf(stderr, "Invalid blend state size %d\n", size);
|
||||
|
||||
for (int i = 1; i < size / 4; i += 2) {
|
||||
char name[sizeof("BLEND_ENTRYXXX")];
|
||||
sprintf(name, "BLEND_ENTRY%02d", (i - 1) / 2);
|
||||
if (blend[i + 1] & GEN8_BLEND_LOGIC_OP_ENABLE) {
|
||||
batch_out(brw, name, offset, i + 1, "%s\n",
|
||||
logicop[GET_FIELD(blend[i + 1],
|
||||
GEN8_BLEND_LOGIC_OP_FUNCTION)]);
|
||||
} else if (blend[i] & GEN8_BLEND_COLOR_BUFFER_BLEND_ENABLE) {
|
||||
batch_out64(brw, name, offset, i,
|
||||
"\n\t\t\tColor Buffer Blend factor %s,%s,%s,%s (src,dst,src alpha, dst alpha)"
|
||||
"\n\t\t\tfunction %s,%s (color, alpha), Disables: %c%c%c%c\n",
|
||||
blend_factor[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_SRC_BLEND_FACTOR)],
|
||||
blend_factor[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_DST_BLEND_FACTOR)],
|
||||
blend_factor[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_SRC_ALPHA_BLEND_FACTOR)],
|
||||
blend_factor[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_DST_ALPHA_BLEND_FACTOR)],
|
||||
blend_function[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_COLOR_BLEND_FUNCTION)],
|
||||
blend_function[GET_FIELD(blend[i],
|
||||
GEN8_BLEND_ALPHA_BLEND_FUNCTION)],
|
||||
blend[i] & GEN8_BLEND_WRITE_DISABLE_RED ? 'R' : '-',
|
||||
blend[i] & GEN8_BLEND_WRITE_DISABLE_GREEN ? 'G' : '-',
|
||||
blend[i] & GEN8_BLEND_WRITE_DISABLE_BLUE ? 'B' : '-',
|
||||
blend[i] & GEN8_BLEND_WRITE_DISABLE_ALPHA ? 'A' : '-'
|
||||
);
|
||||
} else if (!blend[i] && (blend[i + 1] == 0xb)) {
|
||||
batch_out64(brw, name, offset, i, "NOP blend state\n");
|
||||
} else {
|
||||
batch_out64(brw, name, offset, i, "????\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dump_scissor(struct brw_context *brw, uint32_t offset)
|
||||
{
|
||||
@@ -704,7 +809,10 @@ dump_state_batch(struct brw_context *brw)
|
||||
dump_cc_state_gen4(brw, offset);
|
||||
break;
|
||||
case AUB_TRACE_BLEND_STATE:
|
||||
dump_blend_state(brw, offset);
|
||||
if (brw->gen >= 8)
|
||||
gen8_dump_blend_state(brw, offset, size);
|
||||
else
|
||||
dump_blend_state(brw, offset);
|
||||
break;
|
||||
case AUB_TRACE_BINDING_TABLE:
|
||||
dump_binding_table(brw, offset, size);
|
||||
|
||||
Reference in New Issue
Block a user