if (load) {
nir_ssa_dest_init(&intrin->instr, &intrin->dest,
intrin->num_components,
- glsl_get_bit_size(glsl_get_base_type(tail->type)),
+ glsl_get_bit_size(tail->type),
NULL);
inout->def = &intrin->dest.ssa;
} else {
if (load) {
nir_ssa_dest_init(&instr->instr, &instr->dest,
instr->num_components,
- glsl_get_bit_size(glsl_get_base_type(type)), NULL);
+ glsl_get_bit_size(type), NULL);
(*inout)->def = &instr->dest.ssa;
}
vtn_var->var->data.explicit_location = true;
} else {
assert(vtn_var->members);
- unsigned length = glsl_get_length(vtn_var->type->type);
+ unsigned length =
+ glsl_get_length(glsl_without_array(vtn_var->type->type));
for (unsigned i = 0; i < length; i++) {
vtn_var->members[i]->data.location = location;
vtn_var->members[i]->data.explicit_location = true;
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
nir_var->data.origin_upper_left = b->origin_upper_left;
+
+ if (builtin == SpvBuiltInFragCoord)
+ nir_var->data.pixel_center_integer = b->pixel_center_integer;
break;
}
+
+ case SpvDecorationSpecId:
case SpvDecorationRowMajor:
case SpvDecorationColMajor:
- case SpvDecorationGLSLShared:
- case SpvDecorationPatch:
+ case SpvDecorationMatrixStride:
case SpvDecorationRestrict:
case SpvDecorationAliased:
case SpvDecorationVolatile:
case SpvDecorationCoherent:
case SpvDecorationNonReadable:
case SpvDecorationUniform:
- /* This is really nice but we have no use for it right now. */
- case SpvDecorationCPacked:
- case SpvDecorationSaturatedConversion:
case SpvDecorationStream:
case SpvDecorationOffset:
+ case SpvDecorationLinkageAttributes:
+ break; /* Do nothing with these here */
+
+ case SpvDecorationPatch:
+ unreachable("Tessellation not yet supported");
+
+ case SpvDecorationBlock:
+ case SpvDecorationBufferBlock:
+ case SpvDecorationArrayStride:
+ case SpvDecorationGLSLShared:
+ case SpvDecorationGLSLPacked:
+ case SpvDecorationBinding:
+ case SpvDecorationDescriptorSet:
+ case SpvDecorationNoContraction:
+ case SpvDecorationInputAttachmentIndex:
+ unreachable("Decoration not allowed for variable or structure member");
+
case SpvDecorationXfbBuffer:
+ case SpvDecorationXfbStride:
+ unreachable("Vulkan does not have transform feedback");
+
+ case SpvDecorationCPacked:
+ case SpvDecorationSaturatedConversion:
case SpvDecorationFuncParamAttr:
case SpvDecorationFPRoundingMode:
case SpvDecorationFPFastMathMode:
- case SpvDecorationLinkageAttributes:
- case SpvDecorationSpecId:
- break;
- default:
- unreachable("Unhandled variable decoration");
+ case SpvDecorationAlignment:
+ unreachable("Decoraiton only allowed for CL-style kernels");
}
}