* gcc-interface/trans.c (node_has_volatile_full_access) <N_Identifier>:
[official-gcc.git] / gcc / testsuite / gcc.c-torture / compile / pr42705.c
blob3d7b22da833469e8699d7c0c628943fa7f4476b8
1 typedef int GLint;
2 typedef unsigned char GLubyte;
3 typedef unsigned int uint32_t;
4 struct radeon_bo {
5 void *ptr;
6 uint32_t flags;
7 };
8 struct radeon_renderbuffer {
9 struct radeon_bo *bo;
10 unsigned int cpp;
11 int has_surface;
13 static inline
14 GLint r600_1d_tile_helper(const struct radeon_renderbuffer * rrb,
15 GLint x, GLint y, GLint is_depth, GLint is_stencil)
17 GLint element_bytes = rrb->cpp;
18 GLint num_samples = 1;
19 GLint tile_width = 8;
20 GLint tile_height = 8;
21 GLint tile_thickness = 1;
22 GLint tile_bytes;
23 GLint tiles_per_row;
24 GLint slice_offset;
25 GLint tile_row_index;
26 GLint tile_column_index;
27 GLint tile_offset;
28 GLint pixel_number = 0;
29 GLint element_offset;
30 GLint offset = 0;
31 tile_bytes = tile_width * tile_height * tile_thickness
32 * element_bytes * num_samples;
33 tile_column_index = x / tile_width;
34 tile_offset = ((tile_row_index * tiles_per_row)
35 + tile_column_index) * tile_bytes;
36 if (is_depth) {
38 else {
39 GLint sample_offset;
40 switch (element_bytes) {
41 case 1: pixel_number |= ((x >> 0) & 1) << 0;
43 element_offset = sample_offset + (pixel_number * element_bytes);
45 offset = slice_offset + tile_offset + element_offset;
46 return offset;
48 GLubyte *r600_ptr_color(const struct radeon_renderbuffer * rrb,
49 GLint x, GLint y)
51 GLubyte *ptr = rrb->bo->ptr;
52 uint32_t mask = 1 | 2;
53 GLint offset;
54 if (rrb->has_surface || !(rrb->bo->flags & mask)) {
55 offset = r600_1d_tile_helper(rrb, x, y, 0, 0);
57 return &ptr[offset];