vc4: Enable PIPE_CAP_TGSI_TEXCOORD.
Dave wants to drop the !TEXCOORD path from NIR, and it's easy enough to do. Untested. Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2952>
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
#include "vc4_qir.h"
|
#include "vc4_qir.h"
|
||||||
#include "compiler/nir/nir_builder.h"
|
#include "compiler/nir/nir_builder.h"
|
||||||
#include "util/format/u_format.h"
|
#include "util/format/u_format.h"
|
||||||
|
#include "util/u_helpers.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Walks the NIR generated by TGSI-to-NIR or GLSL-to-NIR to lower its io
|
* Walks the NIR generated by TGSI-to-NIR or GLSL-to-NIR to lower its io
|
||||||
@@ -225,17 +226,6 @@ vc4_nir_lower_vertex_attr(struct vc4_compile *c, nir_builder *b,
|
|||||||
replace_intrinsic_with_vec(b, intr, dests);
|
replace_intrinsic_with_vec(b, intr, dests);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
|
||||||
is_point_sprite(struct vc4_compile *c, nir_variable *var)
|
|
||||||
{
|
|
||||||
if (var->data.location < VARYING_SLOT_VAR0 ||
|
|
||||||
var->data.location > VARYING_SLOT_VAR31)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return (c->fs_key->point_sprite_mask &
|
|
||||||
(1 << (var->data.location - VARYING_SLOT_VAR0)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
|
vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
|
||||||
nir_intrinsic_instr *intr)
|
nir_intrinsic_instr *intr)
|
||||||
@@ -261,8 +251,8 @@ vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
|
|||||||
int comp = nir_intrinsic_component(intr);
|
int comp = nir_intrinsic_component(intr);
|
||||||
|
|
||||||
/* Lower away point coordinates, and fix up PNTC. */
|
/* Lower away point coordinates, and fix up PNTC. */
|
||||||
if (is_point_sprite(c, input_var) ||
|
if (util_varying_is_point_coord(input_var->data.location,
|
||||||
input_var->data.location == VARYING_SLOT_PNTC) {
|
c->fs_key->point_sprite_mask)) {
|
||||||
assert(intr->num_components == 1);
|
assert(intr->num_components == 1);
|
||||||
|
|
||||||
nir_ssa_def *result = &intr->dest.ssa;
|
nir_ssa_def *result = &intr->dest.ssa;
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include "util/format/u_format.h"
|
#include "util/format/u_format.h"
|
||||||
#include "util/crc32.h"
|
#include "util/crc32.h"
|
||||||
|
#include "util/u_helpers.h"
|
||||||
#include "util/u_math.h"
|
#include "util/u_math.h"
|
||||||
#include "util/u_memory.h"
|
#include "util/u_memory.h"
|
||||||
#include "util/ralloc.h"
|
#include "util/ralloc.h"
|
||||||
@@ -1608,11 +1609,8 @@ ntq_setup_inputs(struct vc4_compile *c)
|
|||||||
if (c->stage == QSTAGE_FRAG) {
|
if (c->stage == QSTAGE_FRAG) {
|
||||||
if (var->data.location == VARYING_SLOT_POS) {
|
if (var->data.location == VARYING_SLOT_POS) {
|
||||||
emit_fragcoord_input(c, loc);
|
emit_fragcoord_input(c, loc);
|
||||||
} else if (var->data.location == VARYING_SLOT_PNTC ||
|
} else if (util_varying_is_point_coord(var->data.location,
|
||||||
(var->data.location >= VARYING_SLOT_VAR0 &&
|
c->fs_key->point_sprite_mask)) {
|
||||||
(c->fs_key->point_sprite_mask &
|
|
||||||
(1 << (var->data.location -
|
|
||||||
VARYING_SLOT_VAR0))))) {
|
|
||||||
c->inputs[loc * 4 + 0] = c->point_x;
|
c->inputs[loc * 4 + 0] = c->point_x;
|
||||||
c->inputs[loc * 4 + 1] = c->point_y;
|
c->inputs[loc * 4 + 1] = c->point_y;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -148,6 +148,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||||
case PIPE_CAP_TEXTURE_BARRIER:
|
case PIPE_CAP_TEXTURE_BARRIER:
|
||||||
|
case PIPE_CAP_TGSI_TEXCOORD:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PIPE_CAP_NATIVE_FENCE_FD:
|
case PIPE_CAP_NATIVE_FENCE_FD:
|
||||||
|
Reference in New Issue
Block a user