typedef int GLint; typedef unsigned char GLubyte; typedef unsigned int uint32_t; struct radeon_bo { void *ptr; uint32_t flags; }; struct radeon_renderbuffer { struct radeon_bo *bo; unsigned int cpp; int has_surface; }; static inline GLint r600_1d_tile_helper(const struct radeon_renderbuffer * rrb, GLint x, GLint y, GLint is_depth, GLint is_stencil) { GLint element_bytes = rrb->cpp; GLint num_samples = 1; GLint tile_width = 8; GLint tile_height = 8; GLint tile_thickness = 1; GLint tile_bytes; GLint tiles_per_row; GLint slice_offset; GLint tile_row_index; GLint tile_column_index; GLint tile_offset; GLint pixel_number = 0; GLint element_offset; GLint offset = 0; tile_bytes = tile_width * tile_height * tile_thickness * element_bytes * num_samples; tile_column_index = x / tile_width; tile_offset = ((tile_row_index * tiles_per_row) + tile_column_index) * tile_bytes; if (is_depth) { } else { GLint sample_offset; switch (element_bytes) { case 1: pixel_number |= ((x >> 0) & 1) << 0; } element_offset = sample_offset + (pixel_number * element_bytes); } offset = slice_offset + tile_offset + element_offset; return offset; } GLubyte *r600_ptr_color(const struct radeon_renderbuffer * rrb, GLint x, GLint y) { GLubyte *ptr = rrb->bo->ptr; uint32_t mask = 1 | 2; GLint offset; if (rrb->has_surface || !(rrb->bo->flags & mask)) { offset = r600_1d_tile_helper(rrb, x, y, 0, 0); } return &ptr[offset]; }