mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-25 00:09:54 +00:00
nv50: add support for MUL_ZERO_WINS property
This is simply keyed off the vertex shader, as that's guaranteed to be present in any pipeline. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
8c764a2321
commit
b755f2f233
@ -380,7 +380,7 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
|
||||
prog->interps = info->bin.fixupData;
|
||||
prog->max_gpr = MAX2(4, (info->bin.maxGPR >> 1) + 1);
|
||||
prog->tls_space = info->bin.tlsSpace;
|
||||
|
||||
prog->mul_zero_wins = info->io.mul_zero_wins;
|
||||
prog->vp.need_vertex_id = info->io.vertexId < PIPE_MAX_SHADER_INPUTS;
|
||||
|
||||
prog->vp.clip_enable = (1 << info->io.clipDistances) - 1;
|
||||
|
@ -108,6 +108,8 @@ struct nv50_program {
|
||||
unsigned num_syms;
|
||||
} cp;
|
||||
|
||||
bool mul_zero_wins;
|
||||
|
||||
void *fixups; /* relocation records */
|
||||
void *interps; /* interpolation records */
|
||||
|
||||
|
@ -198,6 +198,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_STRING_MARKER:
|
||||
case PIPE_CAP_CULL_DISTANCE:
|
||||
case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
|
||||
case PIPE_CAP_TGSI_MUL_ZERO_WINS:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
return 1; /* class_3d >= NVA0_3D_CLASS; */
|
||||
@ -259,7 +260,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
|
||||
case PIPE_CAP_TGSI_FS_FBFETCH:
|
||||
case PIPE_CAP_TGSI_MUL_ZERO_WINS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
|
@ -54,6 +54,7 @@ struct nv50_graph_state {
|
||||
uint8_t prim_size;
|
||||
uint16_t scissor;
|
||||
bool seamless_cube_map;
|
||||
bool mul_zero_wins;
|
||||
};
|
||||
|
||||
struct nv50_screen {
|
||||
|
@ -824,6 +824,12 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
|
||||
PUSH_DATA (push, nv50->seamless_cube_map ? NVA0_3D_TEX_MISC_SEAMLESS_CUBE_MAP : 0);
|
||||
}
|
||||
|
||||
if (nv50->vertprog->mul_zero_wins != nv50->state.mul_zero_wins) {
|
||||
nv50->state.mul_zero_wins = nv50->vertprog->mul_zero_wins;
|
||||
BEGIN_NV04(push, NV50_3D(UNK1690), 1);
|
||||
PUSH_DATA (push, 0x00010000 * !!nv50->state.mul_zero_wins);
|
||||
}
|
||||
|
||||
if (nv50->vbo_fifo) {
|
||||
nv50_push_vbo(nv50, info);
|
||||
push->kick_notify = nv50_default_kick_notify;
|
||||
|
Loading…
Reference in New Issue
Block a user