(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
compile/
pr42705.c
       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;
      12  };
      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)
      16  {
      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) {
      37    }
      38    else {
      39        GLint sample_offset;
      40        switch (element_bytes) {
      41  	  case 1:       pixel_number |= ((x >> 0) & 1) << 0;
      42        }
      43        element_offset = sample_offset + (pixel_number * element_bytes);
      44    }
      45    offset = slice_offset + tile_offset + element_offset;
      46    return offset;
      47  }
      48  GLubyte *r600_ptr_color(const struct radeon_renderbuffer * rrb,
      49  			GLint x, GLint y)
      50  {
      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);
      56    }
      57    return &ptr[offset];
      58  }