mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 11:08:03 +02:00
nvc0: implement the color buffer 0 is integer rule for alpha-to-one/cov
The hardware checks for multisampling being enabled, but does not have the rule about cbuf0 being an integer format. Only enable alpha-to-one/alpha-to-coverage if cbuf0 is not an integer format. Fixes piglits ext_framebuffer_multisample-int-draw-buffers-alpha-to-one ext_framebuffer_multisample-int-draw-buffers-alpha-to-coverage Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
19a5a91ea4
commit
1af0641db3
3 changed files with 22 additions and 11 deletions
|
|
@ -90,7 +90,6 @@ nvc0_blend_state_create(struct pipe_context *pipe,
|
||||||
struct nvc0_blend_stateobj *so = CALLOC_STRUCT(nvc0_blend_stateobj);
|
struct nvc0_blend_stateobj *so = CALLOC_STRUCT(nvc0_blend_stateobj);
|
||||||
int i;
|
int i;
|
||||||
int r; /* reference */
|
int r; /* reference */
|
||||||
uint32_t ms;
|
|
||||||
uint8_t blend_en = 0;
|
uint8_t blend_en = 0;
|
||||||
bool indep_masks = false;
|
bool indep_masks = false;
|
||||||
bool indep_funcs = false;
|
bool indep_funcs = false;
|
||||||
|
|
@ -176,15 +175,6 @@ nvc0_blend_state_create(struct pipe_context *pipe,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ms = 0;
|
|
||||||
if (cso->alpha_to_coverage)
|
|
||||||
ms |= NVC0_3D_MULTISAMPLE_CTRL_ALPHA_TO_COVERAGE;
|
|
||||||
if (cso->alpha_to_one)
|
|
||||||
ms |= NVC0_3D_MULTISAMPLE_CTRL_ALPHA_TO_ONE;
|
|
||||||
|
|
||||||
SB_BEGIN_3D(so, MULTISAMPLE_CTRL, 1);
|
|
||||||
SB_DATA (so, ms);
|
|
||||||
|
|
||||||
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
|
||||||
return so;
|
return so;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
#include "util/u_format.h"
|
||||||
#include "util/u_math.h"
|
#include "util/u_math.h"
|
||||||
|
|
||||||
#include "nvc0/nvc0_context.h"
|
#include "nvc0/nvc0_context.h"
|
||||||
|
|
@ -554,6 +555,25 @@ nvc0_validate_derived_2(struct nvc0_context *nvc0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
nvc0_validate_derived_3(struct nvc0_context *nvc0)
|
||||||
|
{
|
||||||
|
struct nouveau_pushbuf *push = nvc0->base.pushbuf;
|
||||||
|
struct pipe_framebuffer_state *fb = &nvc0->framebuffer;
|
||||||
|
uint32_t ms = 0;
|
||||||
|
|
||||||
|
if ((!fb->nr_cbufs || !fb->cbufs[0] ||
|
||||||
|
!util_format_is_pure_integer(fb->cbufs[0]->format)) && nvc0->blend) {
|
||||||
|
if (nvc0->blend->pipe.alpha_to_coverage)
|
||||||
|
ms |= NVC0_3D_MULTISAMPLE_CTRL_ALPHA_TO_COVERAGE;
|
||||||
|
if (nvc0->blend->pipe.alpha_to_one)
|
||||||
|
ms |= NVC0_3D_MULTISAMPLE_CTRL_ALPHA_TO_ONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_NVC0(push, NVC0_3D(MULTISAMPLE_CTRL), 1);
|
||||||
|
PUSH_DATA (push, ms);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nvc0_validate_tess_state(struct nvc0_context *nvc0)
|
nvc0_validate_tess_state(struct nvc0_context *nvc0)
|
||||||
{
|
{
|
||||||
|
|
@ -628,6 +648,7 @@ static struct state_validate {
|
||||||
{ nvc0_validate_derived_1, NVC0_NEW_FRAGPROG | NVC0_NEW_ZSA |
|
{ nvc0_validate_derived_1, NVC0_NEW_FRAGPROG | NVC0_NEW_ZSA |
|
||||||
NVC0_NEW_RASTERIZER },
|
NVC0_NEW_RASTERIZER },
|
||||||
{ nvc0_validate_derived_2, NVC0_NEW_ZSA | NVC0_NEW_FRAMEBUFFER },
|
{ nvc0_validate_derived_2, NVC0_NEW_ZSA | NVC0_NEW_FRAMEBUFFER },
|
||||||
|
{ nvc0_validate_derived_3, NVC0_NEW_BLEND | NVC0_NEW_FRAMEBUFFER },
|
||||||
{ nvc0_validate_clip, NVC0_NEW_CLIP | NVC0_NEW_RASTERIZER |
|
{ nvc0_validate_clip, NVC0_NEW_CLIP | NVC0_NEW_RASTERIZER |
|
||||||
NVC0_NEW_VERTPROG |
|
NVC0_NEW_VERTPROG |
|
||||||
NVC0_NEW_TEVLPROG |
|
NVC0_NEW_TEVLPROG |
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
struct nvc0_blend_stateobj {
|
struct nvc0_blend_stateobj {
|
||||||
struct pipe_blend_state pipe;
|
struct pipe_blend_state pipe;
|
||||||
int size;
|
int size;
|
||||||
uint32_t state[72];
|
uint32_t state[70];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nvc0_rasterizer_stateobj {
|
struct nvc0_rasterizer_stateobj {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue