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