freedreno/a6xx: Fix point coord
Use ir3_next_varying() for iterating through varyings and unset the global point coord invert bit. Fixes: dEQP-GLES3.functional.shaders.builtin_variable.pointcoord Signed-off-by: Kristian H. Kristensen <hoegsberg@chromium.org>
This commit is contained in:
parent
2fbd2d5f58
commit
0a41ddbd4e
|
@ -1070,7 +1070,8 @@ t7 opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
|
||||||
WRITE(REG_A6XX_VPC_UNKNOWN_9101, 0xffff00);
|
WRITE(REG_A6XX_VPC_UNKNOWN_9101, 0xffff00);
|
||||||
WRITE(REG_A6XX_VPC_UNKNOWN_9107, 0);
|
WRITE(REG_A6XX_VPC_UNKNOWN_9107, 0);
|
||||||
|
|
||||||
WRITE(REG_A6XX_VPC_UNKNOWN_9236, 1);
|
WRITE(REG_A6XX_VPC_UNKNOWN_9236,
|
||||||
|
A6XX_VPC_UNKNOWN_9236_POINT_COORD_INVERT(0));
|
||||||
WRITE(REG_A6XX_VPC_UNKNOWN_9300, 0);
|
WRITE(REG_A6XX_VPC_UNKNOWN_9300, 0);
|
||||||
|
|
||||||
WRITE(REG_A6XX_VPC_SO_OVERRIDE, A6XX_VPC_SO_OVERRIDE_SO_DISABLE);
|
WRITE(REG_A6XX_VPC_SO_OVERRIDE, A6XX_VPC_SO_OVERRIDE_SO_DISABLE);
|
||||||
|
|
|
@ -651,8 +651,7 @@ fd6_program_emit(struct fd_ringbuffer *ring, struct fd6_emit *emit)
|
||||||
memset(vinterp, 0, sizeof(vinterp));
|
memset(vinterp, 0, sizeof(vinterp));
|
||||||
memset(vpsrepl, 0, sizeof(vpsrepl));
|
memset(vpsrepl, 0, sizeof(vpsrepl));
|
||||||
|
|
||||||
for (int i = 0; i < state->fs_inputs_count; i++) {
|
for (int j = -1; (j = ir3_next_varying(fs, j)) < (int)fs->inputs_count; ) {
|
||||||
int j = state->fs_inputs[i];
|
|
||||||
|
|
||||||
/* NOTE: varyings are packed, so if compmask is 0xb
|
/* NOTE: varyings are packed, so if compmask is 0xb
|
||||||
* then first, third, and fourth component occupy
|
* then first, third, and fourth component occupy
|
||||||
|
@ -666,7 +665,7 @@ fd6_program_emit(struct fd_ringbuffer *ring, struct fd6_emit *emit)
|
||||||
(fs->inputs[j].rasterflat && emit->rasterflat)) {
|
(fs->inputs[j].rasterflat && emit->rasterflat)) {
|
||||||
uint32_t loc = inloc;
|
uint32_t loc = inloc;
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if (compmask & (1 << i)) {
|
if (compmask & (1 << i)) {
|
||||||
vinterp[loc / 16] |= 1 << ((loc % 16) * 2);
|
vinterp[loc / 16] |= 1 << ((loc % 16) * 2);
|
||||||
loc++;
|
loc++;
|
||||||
|
|
|
@ -54,10 +54,6 @@ struct fd6_program_state {
|
||||||
/* cached state about current emitted shader program (3d): */
|
/* cached state about current emitted shader program (3d): */
|
||||||
struct fd6_streamout_state tf;
|
struct fd6_streamout_state tf;
|
||||||
|
|
||||||
/* index and # of varyings: */
|
|
||||||
uint8_t fs_inputs[16];
|
|
||||||
uint8_t fs_inputs_count;
|
|
||||||
|
|
||||||
uint32_t vinterp[8];
|
uint32_t vinterp[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue