| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <fbl/unique_ptr.h> |
| #include <lib/zx/channel.h> |
| #include <lib/zx/event.h> |
| #include <zircon/types.h> |
| #include <zircon/pixelformat.h> |
| |
| #define TILE_PIXEL_WIDTH 32u |
| #define TILE_PIXEL_HEIGHT 32u |
| #define TILE_BYTES_PER_PIXEL 4u |
| #define TILE_NUM_BYTES 4096u |
| #define TILE_NUM_PIXELS (TILE_NUM_BYTES / TILE_BYTES_PER_PIXEL) |
| #define SUBTILE_COLUMN_WIDTH 4u |
| |
| |
| // Indicies into event and event_ids |
| #define WAIT_EVENT 0 |
| #define SIGNAL_EVENT 1 |
| |
| typedef struct image_import { |
| uint64_t id; |
| zx_handle_t events[2]; |
| uint64_t event_ids[2]; |
| } image_import_t; |
| |
| class Image { |
| public: |
| static Image* Create(zx_handle_t dc_handle, |
| uint32_t width, uint32_t height, zx_pixel_format_t format, |
| uint32_t fg_color, uint32_t bg_color, bool use_intel_y_tiling); |
| |
| void Render(int32_t prev_step, int32_t step_num); |
| |
| void* buffer() { return buf_; } |
| uint32_t width() { return width_; } |
| uint32_t height() { return height_; } |
| uint32_t stride() { return stride_; } |
| zx_pixel_format_t format() { return format_; } |
| |
| void GetConfig(fuchsia_hardware_display_ImageConfig* config_out); |
| bool Import(zx_handle_t dc_handle, image_import_t* import_out); |
| |
| private: |
| Image(uint32_t width, uint32_t height, int32_t stride, |
| zx_pixel_format_t format, zx_handle_t handle, void* buf, |
| uint32_t fg_color, uint32_t bg_color, bool use_intel_y_tiling); |
| |
| uint32_t width_; |
| uint32_t height_; |
| uint32_t stride_; |
| zx_pixel_format_t format_; |
| |
| zx_handle_t vmo_; |
| void* buf_; |
| |
| uint32_t fg_color_; |
| uint32_t bg_color_; |
| bool use_intel_y_tiling_; |
| }; |