glsl: track which program inputs are doubles
instead of doing the attempts at dual slot handling here, let the backend do it. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
5d6190e496
commit
023fc344da
|
@ -105,13 +105,10 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,
|
||||||
int idx = var->data.location + var->data.index + offset + i;
|
int idx = var->data.location + var->data.index + offset + i;
|
||||||
GLbitfield64 bitfield = BITFIELD64_BIT(idx);
|
GLbitfield64 bitfield = BITFIELD64_BIT(idx);
|
||||||
|
|
||||||
/* dvec3 and dvec4 take up 2 slots */
|
|
||||||
if (dual_slot) {
|
|
||||||
idx += i;
|
|
||||||
bitfield |= bitfield << 1;
|
|
||||||
}
|
|
||||||
if (var->data.mode == ir_var_shader_in) {
|
if (var->data.mode == ir_var_shader_in) {
|
||||||
prog->InputsRead |= bitfield;
|
prog->InputsRead |= bitfield;
|
||||||
|
if (dual_slot)
|
||||||
|
prog->DoubleInputsRead |= bitfield;
|
||||||
if (is_fragment_shader) {
|
if (is_fragment_shader) {
|
||||||
gl_fragment_program *fprog = (gl_fragment_program *) prog;
|
gl_fragment_program *fprog = (gl_fragment_program *) prog;
|
||||||
fprog->InterpQualifier[idx] =
|
fprog->InterpQualifier[idx] =
|
||||||
|
@ -120,13 +117,6 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,
|
||||||
fprog->IsCentroid |= bitfield;
|
fprog->IsCentroid |= bitfield;
|
||||||
if (var->data.sample)
|
if (var->data.sample)
|
||||||
fprog->IsSample |= bitfield;
|
fprog->IsSample |= bitfield;
|
||||||
|
|
||||||
/* Set the InterpQualifier of the next slot to the same as the
|
|
||||||
* current one, since dvec3 and dvec4 spans 2 slots.
|
|
||||||
*/
|
|
||||||
if (dual_slot)
|
|
||||||
fprog->InterpQualifier[idx + 1] =
|
|
||||||
(glsl_interp_qualifier) var->data.interpolation;
|
|
||||||
}
|
}
|
||||||
} else if (var->data.mode == ir_var_system_value) {
|
} else if (var->data.mode == ir_var_system_value) {
|
||||||
prog->SystemValuesRead |= bitfield;
|
prog->SystemValuesRead |= bitfield;
|
||||||
|
|
|
@ -2090,6 +2090,7 @@ struct gl_program
|
||||||
struct nir_shader *nir;
|
struct nir_shader *nir;
|
||||||
|
|
||||||
GLbitfield64 InputsRead; /**< Bitmask of which input regs are read */
|
GLbitfield64 InputsRead; /**< Bitmask of which input regs are read */
|
||||||
|
GLbitfield64 DoubleInputsRead; /**< Bitmask of which input regs are read and are doubles */
|
||||||
GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */
|
GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */
|
||||||
GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */
|
GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */
|
||||||
GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */
|
GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */
|
||||||
|
|
Loading…
Reference in New Issue