glsl: use new interfaces for 64-bit checks.
This is just prep work for int64 support, changing places where 64-bit matters no doubles. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -3393,7 +3393,7 @@ apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
|||||||
(qual_component + components - 1) > 3) {
|
(qual_component + components - 1) > 3) {
|
||||||
_mesa_glsl_error(loc, state, "component overflow (%u > 3)",
|
_mesa_glsl_error(loc, state, "component overflow (%u > 3)",
|
||||||
(qual_component + components - 1));
|
(qual_component + components - 1));
|
||||||
} else if (qual_component == 1 && type->is_double()) {
|
} else if (qual_component == 1 && type->is_64bit()) {
|
||||||
/* We don't bother checking for 3 as it should be caught by the
|
/* We don't bother checking for 3 as it should be caught by the
|
||||||
* overflow check above.
|
* overflow check above.
|
||||||
*/
|
*/
|
||||||
@@ -6843,7 +6843,7 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (layout && layout->flags.q.explicit_xfb_offset) {
|
if (layout && layout->flags.q.explicit_xfb_offset) {
|
||||||
unsigned align = field_type->is_double() ? 8 : 4;
|
unsigned align = field_type->is_64bit() ? 8 : 4;
|
||||||
fields[i].offset = glsl_align(block_xfb_offset, align);
|
fields[i].offset = glsl_align(block_xfb_offset, align);
|
||||||
block_xfb_offset +=
|
block_xfb_offset +=
|
||||||
MAX2(xfb_stride, (int) (4 * field_type->component_slots()));
|
MAX2(xfb_stride, (int) (4 * field_type->component_slots()));
|
||||||
|
@@ -222,7 +222,7 @@ set_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
|
|||||||
val->array_elements[0]->type->base_type;
|
val->array_elements[0]->type->base_type;
|
||||||
const unsigned int elements = val->array_elements[0]->type->components();
|
const unsigned int elements = val->array_elements[0]->type->components();
|
||||||
unsigned int idx = 0;
|
unsigned int idx = 0;
|
||||||
unsigned dmul = (base_type == GLSL_TYPE_DOUBLE) ? 2 : 1;
|
unsigned dmul = glsl_base_type_is_64bit(base_type) ? 2 : 1;
|
||||||
|
|
||||||
assert(val->type->length >= storage->array_elements);
|
assert(val->type->length >= storage->array_elements);
|
||||||
for (unsigned int i = 0; i < storage->array_elements; i++) {
|
for (unsigned int i = 0; i < storage->array_elements; i++) {
|
||||||
|
@@ -403,7 +403,7 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
|
|||||||
*/
|
*/
|
||||||
last_comp = 4;
|
last_comp = 4;
|
||||||
} else {
|
} else {
|
||||||
unsigned dmul = var->type->is_double() ? 2 : 1;
|
unsigned dmul = var->type->is_64bit() ? 2 : 1;
|
||||||
last_comp = var->data.location_frac +
|
last_comp = var->data.location_frac +
|
||||||
var->type->without_array()->vector_elements * dmul;
|
var->type->without_array()->vector_elements * dmul;
|
||||||
}
|
}
|
||||||
@@ -708,7 +708,7 @@ tfeedback_decl::assign_location(struct gl_context *ctx,
|
|||||||
+ this->matched_candidate->toplevel_var->data.location_frac
|
+ this->matched_candidate->toplevel_var->data.location_frac
|
||||||
+ this->matched_candidate->offset;
|
+ this->matched_candidate->offset;
|
||||||
const unsigned dmul =
|
const unsigned dmul =
|
||||||
this->matched_candidate->type->without_array()->is_double() ? 2 : 1;
|
this->matched_candidate->type->without_array()->is_64bit() ? 2 : 1;
|
||||||
|
|
||||||
if (this->matched_candidate->type->is_array()) {
|
if (this->matched_candidate->type->is_array()) {
|
||||||
/* Array variable */
|
/* Array variable */
|
||||||
|
@@ -114,7 +114,7 @@ lower_buffer_access::emit_access(void *mem_ctx,
|
|||||||
/* For a row-major matrix, the next column starts at the next
|
/* For a row-major matrix, the next column starts at the next
|
||||||
* element.
|
* element.
|
||||||
*/
|
*/
|
||||||
int size_mul = deref->type->is_double() ? 8 : 4;
|
int size_mul = deref->type->is_64bit() ? 8 : 4;
|
||||||
emit_access(mem_ctx, is_write, col_deref, base_offset,
|
emit_access(mem_ctx, is_write, col_deref, base_offset,
|
||||||
deref_offset + i * size_mul,
|
deref_offset + i * size_mul,
|
||||||
row_major, deref->type->matrix_columns, packing,
|
row_major, deref->type->matrix_columns, packing,
|
||||||
@@ -125,7 +125,7 @@ lower_buffer_access::emit_access(void *mem_ctx,
|
|||||||
/* std430 doesn't round up vec2 size to a vec4 size */
|
/* std430 doesn't round up vec2 size to a vec4 size */
|
||||||
if (packing == GLSL_INTERFACE_PACKING_STD430 &&
|
if (packing == GLSL_INTERFACE_PACKING_STD430 &&
|
||||||
deref->type->vector_elements == 2 &&
|
deref->type->vector_elements == 2 &&
|
||||||
!deref->type->is_double()) {
|
!deref->type->is_64bit()) {
|
||||||
size_mul = 8;
|
size_mul = 8;
|
||||||
} else {
|
} else {
|
||||||
/* std140 always rounds the stride of arrays (and matrices) to a
|
/* std140 always rounds the stride of arrays (and matrices) to a
|
||||||
@@ -137,7 +137,7 @@ lower_buffer_access::emit_access(void *mem_ctx,
|
|||||||
* machine units, the base alignment is 4N. For vec4, base
|
* machine units, the base alignment is 4N. For vec4, base
|
||||||
* alignment is 4N.
|
* alignment is 4N.
|
||||||
*/
|
*/
|
||||||
size_mul = (deref->type->is_double() &&
|
size_mul = (deref->type->is_64bit() &&
|
||||||
deref->type->vector_elements > 2) ? 32 : 16;
|
deref->type->vector_elements > 2) ? 32 : 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ lower_buffer_access::emit_access(void *mem_ctx,
|
|||||||
is_write ? write_mask : (1 << deref->type->vector_elements) - 1;
|
is_write ? write_mask : (1 << deref->type->vector_elements) - 1;
|
||||||
insert_buffer_access(mem_ctx, deref, deref->type, offset, mask, -1);
|
insert_buffer_access(mem_ctx, deref, deref->type, offset, mask, -1);
|
||||||
} else {
|
} else {
|
||||||
unsigned N = deref->type->is_double() ? 8 : 4;
|
unsigned N = deref->type->is_64bit() ? 8 : 4;
|
||||||
|
|
||||||
/* We're dereffing a column out of a row-major matrix, so we
|
/* We're dereffing a column out of a row-major matrix, so we
|
||||||
* gather the vector from each stored row.
|
* gather the vector from each stored row.
|
||||||
@@ -358,7 +358,7 @@ lower_buffer_access::setup_buffer_access(void *mem_ctx,
|
|||||||
* thread or SIMD channel is modifying the same vector.
|
* thread or SIMD channel is modifying the same vector.
|
||||||
*/
|
*/
|
||||||
array_stride = 4;
|
array_stride = 4;
|
||||||
if (deref_array->array->type->is_double())
|
if (deref_array->array->type->is_64bit())
|
||||||
array_stride *= 2;
|
array_stride *= 2;
|
||||||
} else if (deref_array->array->type->is_matrix() && *row_major) {
|
} else if (deref_array->array->type->is_matrix() && *row_major) {
|
||||||
/* When loading a vector out of a row major matrix, the
|
/* When loading a vector out of a row major matrix, the
|
||||||
@@ -367,7 +367,7 @@ lower_buffer_access::setup_buffer_access(void *mem_ctx,
|
|||||||
* vector) is handled below in emit_ubo_loads.
|
* vector) is handled below in emit_ubo_loads.
|
||||||
*/
|
*/
|
||||||
array_stride = 4;
|
array_stride = 4;
|
||||||
if (deref_array->array->type->is_double())
|
if (deref_array->array->type->is_64bit())
|
||||||
array_stride *= 2;
|
array_stride *= 2;
|
||||||
*matrix_columns = deref_array->array->type->matrix_columns;
|
*matrix_columns = deref_array->array->type->matrix_columns;
|
||||||
} else if (deref_array->type->without_array()->is_interface()) {
|
} else if (deref_array->type->without_array()->is_interface()) {
|
||||||
|
@@ -432,7 +432,7 @@ lower_packed_varyings_visitor::lower_rvalue(ir_rvalue *rvalue,
|
|||||||
bool gs_input_toplevel,
|
bool gs_input_toplevel,
|
||||||
unsigned vertex_index)
|
unsigned vertex_index)
|
||||||
{
|
{
|
||||||
unsigned dmul = rvalue->type->is_double() ? 2 : 1;
|
unsigned dmul = rvalue->type->is_64bit() ? 2 : 1;
|
||||||
/* When gs_input_toplevel is set, we should be looking at a geometry shader
|
/* When gs_input_toplevel is set, we should be looking at a geometry shader
|
||||||
* input array.
|
* input array.
|
||||||
*/
|
*/
|
||||||
@@ -480,7 +480,7 @@ lower_packed_varyings_visitor::lower_rvalue(ir_rvalue *rvalue,
|
|||||||
char right_swizzle_name[4] = { 0, 0, 0, 0 };
|
char right_swizzle_name[4] = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
left_components = 4 - fine_location % 4;
|
left_components = 4 - fine_location % 4;
|
||||||
if (rvalue->type->is_double()) {
|
if (rvalue->type->is_64bit()) {
|
||||||
/* We might actually end up with 0 left components! */
|
/* We might actually end up with 0 left components! */
|
||||||
left_components /= 2;
|
left_components /= 2;
|
||||||
}
|
}
|
||||||
@@ -676,7 +676,7 @@ lower_packed_varyings_visitor::needs_lowering(ir_variable *var)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
type = type->without_array();
|
type = type->without_array();
|
||||||
if (type->vector_elements == 4 && !type->is_double())
|
if (type->vector_elements == 4 && !type->is_64bit())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user