v3d: add color formats and swizzles to the fragment shader key

We are going to need these very soon to emit correct reads from the tlb
to implement logic operations.

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Iago Toral Quiroga 2019-07-03 09:14:25 +02:00
parent d26b35ba44
commit 0279ac6e51
2 changed files with 20 additions and 0 deletions

View File

@ -355,6 +355,15 @@ struct v3d_fs_key {
*/
uint8_t int_color_rb;
uint8_t uint_color_rb;
/* Color format information per render target. Only set when logic
* operations are enabled.
*/
struct {
enum pipe_format format;
const uint8_t *swizzle;
} color_fmt[V3D_MAX_DRAW_BUFFERS];
uint8_t alpha_test_func;
uint8_t logicop_func;
uint32_t point_sprite_mask;

View File

@ -537,6 +537,17 @@ v3d_update_compiled_fs(struct v3d_context *v3d, uint8_t prim_mode)
*/
key->cbufs |= 1 << i;
/* If logic operations are enabled then we might emit color
* reads and we need to know the color buffer format and
* swizzle for that.
*/
if (key->logicop_func != PIPE_LOGICOP_COPY) {
key->color_fmt[i].format = cbuf->format;
key->color_fmt[i].swizzle =
v3d_get_format_swizzle(&v3d->screen->devinfo,
cbuf->format);
}
const struct util_format_description *desc =
util_format_description(cbuf->format);