mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
mesa/gallium: automatically lower point-size
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
878c94288a
commit
3b4fc2401b
8 changed files with 26 additions and 1 deletions
|
|
@ -396,6 +396,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
|||
|
||||
case PIPE_CAP_FLATSHADE:
|
||||
case PIPE_CAP_ALPHA_TEST:
|
||||
case PIPE_CAP_POINT_SIZE_FIXED:
|
||||
return 1;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -560,6 +560,8 @@ The integer capabilities:
|
|||
* ``PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE``: True if driver wants the TG4 component encoded in sampler swizzle rather than as a separate source.
|
||||
* ``PIPE_CAP_FLATSHADE``: Driver supports pipe_rasterizer_state::flatshade.
|
||||
* ``PIPE_CAP_ALPHA_TEST``: Driver supports alpha-testing.
|
||||
* ``PIPE_CAP_POINT_SIZE_FIXED``: Driver supports point-sizes that are fixed,
|
||||
as opposed to writing gl_PointSize for every point.
|
||||
|
||||
.. _pipe_capf:
|
||||
|
||||
|
|
|
|||
|
|
@ -906,6 +906,7 @@ enum pipe_cap
|
|||
PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE,
|
||||
PIPE_CAP_FLATSHADE,
|
||||
PIPE_CAP_ALPHA_TEST,
|
||||
PIPE_CAP_POINT_SIZE_FIXED,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
#include "st_atom.h"
|
||||
#include "st_program.h"
|
||||
#include "st_texture.h"
|
||||
#include "st_util.h"
|
||||
|
||||
|
||||
static unsigned
|
||||
|
|
@ -216,6 +217,10 @@ st_update_vp( struct st_context *st )
|
|||
key.clip_negative_one_to_one =
|
||||
st->ctx->Transform.ClipDepthMode == GL_NEGATIVE_ONE_TO_ONE;
|
||||
|
||||
/* _NEW_POINT */
|
||||
key.lower_point_size = st->lower_point_size &&
|
||||
!st_point_size_per_vertex(st->ctx);
|
||||
|
||||
st->vp_variant = st_get_vp_variant(st, stvp, &key);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -677,6 +677,8 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||
!screen->get_param(screen, PIPE_CAP_FLATSHADE);
|
||||
st->lower_alpha_test =
|
||||
!screen->get_param(screen, PIPE_CAP_ALPHA_TEST);
|
||||
st->lower_point_size =
|
||||
!screen->get_param(screen, PIPE_CAP_POINT_SIZE_FIXED);
|
||||
|
||||
st->has_hw_atomics =
|
||||
screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
|
||||
|
|
@ -740,7 +742,8 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||
st->shader_has_one_variant[MESA_SHADER_VERTEX] =
|
||||
st->has_shareable_shaders &&
|
||||
!st->clamp_frag_depth_in_shader &&
|
||||
!st->clamp_vert_color_in_shader;
|
||||
!st->clamp_vert_color_in_shader &&
|
||||
!st->lower_point_size;
|
||||
|
||||
st->shader_has_one_variant[MESA_SHADER_FRAGMENT] =
|
||||
st->has_shareable_shaders &&
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ struct st_context
|
|||
boolean has_signed_vertex_buffer_offset;
|
||||
boolean lower_flatshade;
|
||||
boolean lower_alpha_test;
|
||||
boolean lower_point_size;
|
||||
|
||||
/**
|
||||
* If a shader can be created when we get its source.
|
||||
|
|
|
|||
|
|
@ -647,6 +647,9 @@ st_create_vp_variant(struct st_context *st,
|
|||
{
|
||||
struct st_vp_variant *vpv = CALLOC_STRUCT(st_vp_variant);
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
|
||||
static const gl_state_index16 point_size_state[STATE_LENGTH] =
|
||||
{ STATE_INTERNAL, STATE_POINT_SIZE_CLAMPED, 0 };
|
||||
struct gl_program_parameter_list *params = stvp->Base.Parameters;
|
||||
|
||||
vpv->key = *key;
|
||||
|
|
@ -671,6 +674,12 @@ st_create_vp_variant(struct st_context *st,
|
|||
vpv->num_inputs++;
|
||||
}
|
||||
|
||||
if (key->lower_point_size) {
|
||||
_mesa_add_state_reference(params, point_size_state);
|
||||
NIR_PASS_V(vpv->tgsi.ir.nir, nir_lower_point_size_mov,
|
||||
point_size_state);
|
||||
}
|
||||
|
||||
st_finalize_nir(st, &stvp->Base, stvp->shader_program,
|
||||
vpv->tgsi.ir.nir);
|
||||
|
||||
|
|
|
|||
|
|
@ -193,6 +193,9 @@ struct st_vp_variant_key
|
|||
/** both for ARB_depth_clamp */
|
||||
bool lower_depth_clamp;
|
||||
bool clip_negative_one_to_one;
|
||||
|
||||
/** lower glPointSize to gl_PointSize */
|
||||
boolean lower_point_size;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue