/*
 * Copyright (C) 2017 Etnaviv Project.
 * Distributed under the MIT software license, see the accompanying
 * file COPYING or http://www.opensource.org/licenses/mit-license.php.
 */
/* Basic triangle rendering test */
#ifdef HAVE_CONFIG_H
#  include "config.h"
#endif

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#include "drm_setup.h"
#include "cmdstream.h"
#include "write_bmp.h"

#include "hw/state.xml.h"
#include "hw/state_3d.xml.h"
#include "hw/common.xml.h"

/* TODO:
 * - process output (un-supertile resolve)
 * - free/cleanup
 */

/* Data stream */
static const float vData[] = {
         0.0f,  1.0f, 0.0f, 1.0f, // point 1
         1.0f,  0.0f, 0.0f, 1.0f, // red
        -1.0f, -1.0f, 0.0f, 1.0f, // point 2
         0.0f,  1.0f, 0.0f, 1.0f, // green
         1.0f, -1.0f, 0.0f, 1.0f, // point 3
         0.0f,  0.0f, 1.0f, 1.0f, // blue
};

struct attachments {
    struct etna_bo *color_status;
    struct etna_bo *color_surface;
    struct etna_bo *depth_status;
    struct etna_bo *depth_surface;
    struct etna_bo *stream_data;

    struct etna_reloc color_status_base;
    struct etna_reloc color_surface_base;
    struct etna_reloc depth_status_base;
    struct etna_reloc depth_surface_base;
    struct etna_reloc stream_base;
};

/* 1280x800 */
static const size_t color_status_size = 0x4400;
static const size_t color_surface_size = 0x410000;
static const size_t depth_status_size = 0x4400;
static const size_t depth_surface_size = 0x410000;

static bool initialize_attachments(struct etna_device *dev, struct attachments *at)
{
    /* Allocate memory for depth and surface attachments */
    at->color_status = etna_bo_new(dev, color_status_size, DRM_ETNA_GEM_CACHE_UNCACHED);
    at->color_surface = etna_bo_new(dev, color_surface_size, DRM_ETNA_GEM_CACHE_UNCACHED);
    at->depth_status = etna_bo_new(dev, depth_status_size, DRM_ETNA_GEM_CACHE_UNCACHED);
    at->depth_surface = etna_bo_new(dev, depth_surface_size, DRM_ETNA_GEM_CACHE_UNCACHED);
    at->stream_data = etna_bo_new(dev, sizeof(vData), DRM_ETNA_GEM_CACHE_UNCACHED);

    if (!at->color_status || !at->color_surface ||
        !at->depth_status || !at->depth_surface || !at->stream_data) {
        fprintf(stderr, "Error allocating memory\n");
        return false;
    }

    /* Set base bo's */
    at->color_status_base.bo = at->color_status;
    at->color_status_base.flags = ETNA_RELOC_WRITE | ETNA_RELOC_READ;
    at->color_status_base.offset = 0;

    at->color_surface_base.bo = at->color_surface;
    at->color_surface_base.flags = ETNA_RELOC_WRITE | ETNA_RELOC_READ;
    at->color_surface_base.offset = 0;

    at->depth_status_base.bo = at->depth_status;
    at->depth_status_base.flags = ETNA_RELOC_WRITE | ETNA_RELOC_READ;
    at->depth_status_base.offset = 0;

    at->depth_surface_base.bo = at->depth_surface;
    at->depth_surface_base.flags = ETNA_RELOC_WRITE | ETNA_RELOC_READ;
    at->depth_surface_base.offset = 0;

    at->stream_base.bo = at->stream_data;
    at->stream_base.flags = ETNA_RELOC_READ;
    at->stream_base.offset = 0;

    /* Clear surfaces */
    memset(etna_bo_map(at->color_status), 0, color_status_size);
    memset(etna_bo_map(at->color_surface), 0, color_surface_size);
    memset(etna_bo_map(at->depth_status), 0, depth_status_size);
    memset(etna_bo_map(at->depth_surface), 0, depth_surface_size);

    /* Upload stream data */
    unsigned char *mapped = etna_bo_map(at->stream_data);
    memcpy(mapped, vData, sizeof(vData));
    return true;
}

static bool free_attachments(struct etna_device *dev, struct attachments *at)
{
    return true;
}

/* render frame from blob */
static void build_frame_cmdbuf(struct etna_cmd_stream *stream, struct attachments *at)
{
    etna_set_state(stream, VIVS_GL_VERTEX_ELEMENT_CONFIG, 0x00000001);
    etna_set_state(stream, VIVS_RA_CONTROL, 0x00000001);
    etna_set_state(stream, VIVS_PA_W_CLIP_LIMIT, 0x34000001);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xfffffbff);
    etna_set_state(stream, VIVS_RA_UNK00E0C, 0x00000000);
    etna_set_state(stream, VIVS_PA_FLAGS, 0x40000000);
    etna_set_state(stream, VIVS_PA_SYSTEM_MODE, 0x00000011);
    etna_set_state(stream, VIVS_GL_API_MODE, 0x00000000);
    etna_set_state(stream, VIVS_SE_CONFIG, 0x00000000);

    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);

    etna_stall(stream, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE);
    etna_set_state(stream, VIVS_RS_CONFIG, 0x00000606);
    etna_set_state(stream, VIVS_RS_DITHER(0), 0xffffffff);
    etna_set_state(stream, VIVS_RS_DITHER(1), 0xffffffff);
    etna_set_state_reloc(stream, VIVS_RS_DEST_ADDR, &at->color_status_base);
    etna_set_state_reloc(stream, VIVS_RS_PIPE_DEST_ADDR(0), &at->color_status_base);
    etna_set_state(stream, VIVS_RS_SOURCE_STRIDE, 0x00000000);
    etna_set_state(stream, VIVS_RS_DEST_STRIDE, 0x00000080);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(0), 0x55555555);
    etna_set_state(stream, VIVS_RS_CLEAR_CONTROL, 0x0001ffff);
    etna_set_state(stream, VIVS_RS_EXTRA_CONFIG, 0x00100000);
    etna_set_state(stream, VIVS_RS_WINDOW_SIZE, 0x00880020);
    etna_set_state(stream, VIVS_RS_PIPE_OFFSET(0), 0x00000000);
    etna_set_state(stream, VIVS_RS_SINGLE_BUFFER, 0x00000001);
    etna_set_state(stream, VIVS_RS_KICKER, 0xbadabeeb);
    etna_set_state(stream, VIVS_RS_SINGLE_BUFFER, 0x00000000);
    etna_stall(stream, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE);

    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000002);
    etna_set_state(stream, VIVS_DUMMY_DUMMY, 0x00000000);
    etna_set_state(stream, VIVS_TS_COLOR_AUTO_DISABLE_COUNT, 0x00010400);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_STATUS_BASE, &at->color_status_base);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_SURFACE_BASE, &at->color_surface_base);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE, 0xff808080);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE_EXT, 0xff808080);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000022);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_DUMMY_DUMMY, 0x00000000);
    etna_set_state_reloc(stream, VIVS_TS_DEPTH_STATUS_BASE, &at->depth_status_base);
    etna_set_state_reloc(stream, VIVS_TS_DEPTH_SURFACE_BASE, &at->depth_surface_base);
    etna_set_state(stream, VIVS_TS_DEPTH_CLEAR_VALUE, 0xffffff00);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000063);

    etna_set_state(stream, VIVS_SE_DEPTH_SCALE, 0x00000000);
    etna_set_state(stream, VIVS_SE_DEPTH_BIAS, 0x00000000);
    etna_set_state(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(0), 0x10000008);
    etna_set_state(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(1), 0x20100088);
    etna_set_state(stream, VIVS_VS_INPUT(0), 0x00000100);
    etna_set_state_reloc(stream, VIVS_NFE_VERTEX_STREAMS_BASE_ADDR(0), &at->stream_base);
    etna_set_state(stream, VIVS_NFE_VERTEX_STREAMS_CONTROL(0), 0x00000020);
    etna_set_state(stream, VIVS_NFE_VERTEX_STREAMS_UNK14680(0), 0x00000000);
    etna_set_state(stream, VIVS_FE_GENERIC_ATTRIB_SCALE(0), 0x3f800000);
    etna_set_state(stream, VIVS_FE_GENERIC_ATTRIB_SCALE(1), 0x3f800000);
    // How to emit 0 address?
    //etna_set_state_reloc(stream, VIVS_FE_INDEX_STREAM_BASE_ADDR, 0x00000000);
    etna_set_state(stream, VIVS_FE_INDEX_STREAM_CONTROL, 0x00000000);
    etna_set_state(stream, VIVS_FE_PRIMITIVE_RESTART_INDEX, 0x00000000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_SCALE_X, 0x02800000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_SCALE_Y, 0xfe700000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_OFFSET_X, 0x02800000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_OFFSET_Y, 0x01900000);
    etna_set_state(stream, VIVS_PA_VIEWPORT_UNK00A80, 0x38a01404);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_UNK00A84, 0x20000000);
    etna_set_state(stream, VIVS_PA_ZFARCLIPPING, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_LEFT, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_TOP, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_RIGHT, 0x05001119);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_BOTTOM, 0x03201111);
    etna_set_state_fixp(stream, VIVS_SE_CLIP_RIGHT, 0x0500ffff);
    etna_set_state_fixp(stream, VIVS_SE_CLIP_BOTTOM, 0x0320ffff);
    etna_set_state(stream, VIVS_PE_ALPHA_OP, 0x00000070);
    etna_set_state(stream, VIVS_PE_ALPHA_BLEND_COLOR, 0x00000000);
    etna_set_state(stream, VIVS_PE_ALPHA_CONFIG, 0x00100010);
    etna_set_state(stream, VIVS_PE_ALPHA_COLOR_EXT0, 0x00000000);
    etna_set_state(stream, VIVS_PE_ALPHA_COLOR_EXT1, 0x00000000);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG_EXT, 0x0000fdff);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xfffffbff);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000002);
    etna_set_state(stream, VIVS_PE_COLOR_FORMAT, 0x06110f10);
    etna_set_state(stream, VIVS_PE_DITHER(0), 0x6e4ca280);
    etna_set_state(stream, VIVS_PE_DITHER(1), 0x5d7f91b3);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_COLOR_ADDR(0), &at->color_surface_base);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_COLOR_ADDR(1), &at->color_surface_base);
    etna_set_state(stream, VIVS_PE_COLOR_STRIDE, 0x00001400);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xfffffe7f);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_PE_DEPTH_CONFIG, 0x05050710);
    etna_set_state(stream, VIVS_PE_DEPTH_NEAR, 0x00000000);
    etna_set_state(stream, VIVS_PE_DEPTH_FAR, 0x3f800000);
    etna_set_state(stream, VIVS_PE_DEPTH_NORMALIZE, 0x4b7fffff);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_DEPTH_ADDR(0), &at->depth_surface_base);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_DEPTH_ADDR(1), &at->depth_surface_base);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xfffffe7f);
    etna_set_state(stream, VIVS_PE_DEPTH_STRIDE, 0x00001400);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xff4fffff);
    etna_set_state(stream, VIVS_RA_EARLY_DEPTH, 0x00000031);
    etna_set_state(stream, VIVS_PE_HDEPTH_CONTROL, 0x00000000);
    etna_set_state(stream, VIVS_RA_HDEPTH_CONTROL, 0x00007000);
    etna_set_state(stream, VIVS_PA_VIEWPORT_SCALE_Z, 0x3f000000);
    etna_set_state(stream, VIVS_PA_VIEWPORT_OFFSET_Z, 0x3f000000);
    etna_set_state(stream, VIVS_PE_STENCIL_OP, 0x00070007);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG_EXT, 0xfffffe00);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG_EXT2, 0x00000000);
    etna_set_state(stream, VIVS_GL_MULTI_SAMPLE_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);

    etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);

    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0xf0ffffff);
    etna_set_state(stream, VIVS_PA_LINE_WIDTH, 0x3f000000);
    etna_set_state(stream, VIVS_PA_CONFIG, 0x00412100);
    etna_set_state(stream, VIVS_PA_WIDE_LINE_WIDTH0, 0x3f000000);
    etna_set_state(stream, VIVS_PA_WIDE_LINE_WIDTH1, 0x3f000000);

    etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);

    etna_set_state(stream, VIVS_VS_INPUT_COUNT, 0x00000102);
    etna_set_state(stream, VIVS_VS_TEMP_REGISTER_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_VS_OUTPUT(0), 0x00000100);
    etna_set_state(stream, VIVS_VS_UNIFORM_CACHE, 0x00000000);
    etna_set_state(stream, VIVS_VS_RANGE, 0x00000000);
    etna_set_state(stream, VIVS_VS_ICACHE_CONTROL, 0x00000010);
    //etna_set_state(stream, VIVS_VS_INST_ADDR, 0x00000000);
    etna_set_state(stream, VIVS_VS_UNIFORM_BASE, 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(0), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(1), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(2), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(3), 0x00000000);
    etna_set_state(stream, VIVS_RA_CONTROL, 0x00000001);
    etna_set_state(stream, VIVS_PS_OUTPUT_REG, 0x00000001);
    etna_set_state(stream, VIVS_PS_TEMP_REGISTER_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(0), 0x00000200);
    etna_set_state(stream, VIVS_GL_VARYING_NUM_COMPONENTS, 0x00000004);
    etna_set_state(stream, VIVS_GL_UNK03834, 0x00000000);
    etna_set_state(stream, VIVS_GL_VARYING_COMPONENT_USE(0), 0x00000000);
    etna_set_state(stream, VIVS_GL_VARYING_COMPONENT_USE(1), 0x00000000);
    etna_set_state(stream, VIVS_GL_UNK03838, 0x00000000);
    etna_set_state(stream, VIVS_GL_UNK03854, 0x00000000);
    etna_set_state(stream, VIVS_VS_UNIFORM_CACHE, 0x00000011);
    etna_set_state(stream, VIVS_PS_RANGE, 0x01ff01ff);
    etna_set_state(stream, VIVS_VS_ICACHE_CONTROL, 0x00000020);
    //etna_set_state(stream, VIVS_PS_INST_ADDR, 0x00000000);
    etna_set_state(stream, VIVS_PS_UNIFORM_BASE, 0x0000013f);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(2044), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(2045), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(2046), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(2047), 0x00000000);
    etna_set_state(stream, VIVS_PS_INPUT_COUNT, 0x00001f02);
    etna_set_state(stream, VIVS_PS_TEMP_REGISTER_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_PS_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_PA_ATTRIBUTE_ELEMENT_COUNT, 0x00000100);
    etna_set_state(stream, VIVS_GL_VARYING_TOTAL_COMPONENTS, 0x00000004);
    etna_set_state(stream, VIVS_PS_CONTROL_EXT, 0x00000000);
    etna_set_state(stream, VIVS_VS_LOAD_BALANCING, 0x0f3f022a);
    etna_set_state(stream, VIVS_VS_OUTPUT_COUNT, 0x00000002);

    etna_stall(stream, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE);

    etna_set_state(stream, VIVS_GL_VERTEX_ELEMENT_CONFIG, 0x00000011);

    /* command DRAW_INSTANCED (12) OP=DRAW_INSTANCED,INDEXED=0,TYPE=TRIANGLE_STRIP,INSTANCE_COUNT_LO=0x1 */
    /* command   COUNT INSTANCE_COUNT_HI=0x0,VERTEX_COUNT=0x3 */
    /* command   START INDEX=0x0 */
    /* command PAD */
    etna_cmd_stream_reserve(stream, 4);
    etna_cmd_stream_emit(stream, 0x60050001);
    etna_cmd_stream_emit(stream, 0x00000003);
    etna_cmd_stream_emit(stream, 0x00000000);
    etna_cmd_stream_emit(stream, 0x00000000);

    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000020);

    etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);

    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);

    etna_stall(stream, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_STATUS_BASE, &at->color_status_base);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_SURFACE_BASE, &at->color_surface_base);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE, 0xff808080);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE_EXT, 0xff808080);
    etna_set_state(stream, VIVS_RS_EXTRA_CONFIG, 0x10000000);
    etna_set_state(stream, VIVS_RS_SOURCE_STRIDE, 0x80005000);
    etna_set_state(stream, VIVS_RS_KICKER_INPLACE, 0x00010400);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000002);
    etna_set_state(stream, VIVS_DUMMY_DUMMY, 0x00000000);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000041);
}

/* flush cmdbuf from blob */
static void build_flush_cmdbuf(struct etna_cmd_stream *stream, struct attachments *at)
{
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_DUMMY_DUMMY, 0x00000000);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000000);
}

/* render frame from etnaviv */
static void build_etna_cmdbuf(struct etna_cmd_stream *stream, struct attachments *at)
{
    etna_set_state(stream, VIVS_GL_API_MODE, 0x00000000);
    etna_set_state(stream, VIVS_GL_VERTEX_ELEMENT_CONFIG, 0x00000001);
    etna_set_state(stream, VIVS_RA_EARLY_DEPTH, 0x00000031);
    etna_set_state(stream, VIVS_PA_W_CLIP_LIMIT, 0x34000001);
    etna_set_state(stream, VIVS_PA_FLAGS, 0x00000000);
    etna_set_state(stream, VIVS_RS_SINGLE_BUFFER, 0x00000001);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_GL_STALL_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_RS_CONFIG, 0x00004606);
    etna_set_state(stream, VIVS_RS_SOURCE_STRIDE, 0x00000000);
    etna_set_state(stream, VIVS_RS_DEST_STRIDE, 0x00000100);
    etna_set_state_reloc(stream, VIVS_RS_PIPE_DEST_ADDR(0), &at->color_status_base);
    etna_set_state(stream, VIVS_RS_PIPE_OFFSET(0), 0x00000000);
    etna_set_state(stream, VIVS_RS_PIPE_OFFSET(1), 0x00000000);
    etna_set_state(stream, VIVS_RS_WINDOW_SIZE, 0x01080010);
    etna_set_state(stream, VIVS_RS_DITHER(0), 0xffffffff);
    etna_set_state(stream, VIVS_RS_DITHER(1), 0xffffffff);
    etna_set_state(stream, VIVS_RS_CLEAR_CONTROL, 0x0001ffff);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(0), 0x55555555);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(1), 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(2), 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(3), 0x00000000);
    etna_set_state(stream, VIVS_RS_EXTRA_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_RS_KICKER, 0xbeebbeeb);
    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_GL_STALL_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000007);
    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_GL_STALL_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(0), 0x10000008);
    etna_set_state(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(1), 0x20100088);
    etna_set_state(stream, VIVS_GL_MULTI_SAMPLE_CONFIG, 0x000000f0);
    etna_set_state(stream, VIVS_FE_INDEX_STREAM_CONTROL, 0x00000000);
    etna_set_state_reloc(stream, VIVS_FE_VERTEX_STREAM_BASE_ADDR, &at->stream_base);
    etna_set_state(stream, VIVS_FE_VERTEX_STREAM_CONTROL, 0x00000020);
    etna_set_state(stream, VIVS_FE_PRIMITIVE_RESTART_INDEX, 0x00000000);
    etna_set_state(stream, VIVS_VS_END_PC, 0x00000001);
    etna_set_state(stream, VIVS_VS_OUTPUT_COUNT, 0x00000002);
    etna_set_state(stream, VIVS_VS_INPUT_COUNT, 0x00000102);
    etna_set_state(stream, VIVS_VS_TEMP_REGISTER_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_VS_OUTPUT(0), 0x00000100);
    etna_set_state(stream, VIVS_VS_OUTPUT(1), 0x00000000);
    etna_set_state(stream, VIVS_VS_OUTPUT(2), 0x00000000);
    etna_set_state(stream, VIVS_VS_OUTPUT(3), 0x00000000);
    etna_set_state(stream, VIVS_VS_INPUT(0), 0x00000100);
    etna_set_state(stream, VIVS_VS_INPUT(1), 0x00000000);
    etna_set_state(stream, VIVS_VS_INPUT(2), 0x00000000);
    etna_set_state(stream, VIVS_VS_INPUT(3), 0x00000000);
    etna_set_state(stream, VIVS_VS_LOAD_BALANCING, 0x0f3f0221);
    etna_set_state(stream, VIVS_VS_START_PC, 0x00000000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_SCALE_X, 0x02800000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_SCALE_Y, 0xfe700000);
    etna_set_state(stream, VIVS_PA_VIEWPORT_SCALE_Z, 0x3f800000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_OFFSET_X, 0x02800000);
    etna_set_state_fixp(stream, VIVS_PA_VIEWPORT_OFFSET_Y, 0x01900000);
    etna_set_state(stream, VIVS_PA_VIEWPORT_OFFSET_Z, 0x00000000);
    etna_set_state(stream, VIVS_PA_LINE_WIDTH, 0x3f000000);
    etna_set_state(stream, VIVS_PA_POINT_SIZE, 0x3f000000);
    etna_set_state(stream, VIVS_PA_SYSTEM_MODE, 0x00000011);
    etna_set_state(stream, VIVS_PA_ATTRIBUTE_ELEMENT_COUNT, 0x00000100);
    etna_set_state(stream, VIVS_PA_CONFIG, 0x00412110);
    etna_set_state(stream, VIVS_PA_WIDE_LINE_WIDTH0, 0x3f000000);
    etna_set_state(stream, VIVS_PA_WIDE_LINE_WIDTH1, 0x3f000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(0), 0x000002f1);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(1), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(2), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(3), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(4), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(5), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(6), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(7), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(8), 0x00000000);
    etna_set_state(stream, VIVS_PA_SHADER_ATTRIBUTES(9), 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_LEFT, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_TOP, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_RIGHT, 0x05001119);
    etna_set_state_fixp(stream, VIVS_SE_SCISSOR_BOTTOM, 0x03201111);
    etna_set_state(stream, VIVS_SE_DEPTH_SCALE, 0x00000000);
    etna_set_state(stream, VIVS_SE_DEPTH_BIAS, 0x00000000);
    etna_set_state(stream, VIVS_SE_CONFIG, 0x00000000);
    etna_set_state_fixp(stream, VIVS_SE_CLIP_RIGHT, 0x0500ffff);
    etna_set_state_fixp(stream, VIVS_SE_CLIP_BOTTOM, 0x0320ffff);
    etna_set_state(stream, VIVS_RA_CONTROL, 0x00000001);
    etna_set_state(stream, VIVS_RA_MULTISAMPLE_UNK00E04, 0x00000000);
    etna_set_state(stream, VIVS_RA_MULTISAMPLE_UNK00E10(0), 0x00000000);
    etna_set_state(stream, VIVS_RA_MULTISAMPLE_UNK00E10(1), 0x00000000);
    etna_set_state(stream, VIVS_RA_MULTISAMPLE_UNK00E10(2), 0x00000000);
    etna_set_state(stream, VIVS_RA_MULTISAMPLE_UNK00E10(3), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(0), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(1), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(2), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(3), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(4), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(5), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(6), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(7), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(8), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(9), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(10), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(11), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(12), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(13), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(14), 0x00000000);
    etna_set_state(stream, VIVS_RA_CENTROID_TABLE(15), 0x00000000);
    etna_set_state(stream, VIVS_PS_END_PC, 0x00000001);
    etna_set_state(stream, VIVS_PS_OUTPUT_REG, 0x00000001);
    etna_set_state(stream, VIVS_PS_INPUT_COUNT, 0x00001f02);
    etna_set_state(stream, VIVS_PS_TEMP_REGISTER_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_PS_CONTROL, 0x00000002);
    etna_set_state(stream, VIVS_PS_START_PC, 0x00000000);
    etna_set_state(stream, VIVS_PE_DEPTH_CONFIG, 0x05000711);
    etna_set_state(stream, VIVS_PE_DEPTH_NEAR, 0x00000000);
    etna_set_state(stream, VIVS_PE_DEPTH_FAR, 0x3f800000);
    etna_set_state(stream, VIVS_PE_DEPTH_NORMALIZE, 0x4b7fffff);
    etna_set_state(stream, VIVS_PE_DEPTH_STRIDE, 0x00001400);
    etna_set_state(stream, VIVS_PE_STENCIL_OP, 0x00000000);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_PE_ALPHA_OP, 0x00000000);
    etna_set_state(stream, VIVS_PE_ALPHA_BLEND_COLOR, 0x00000000);
    etna_set_state(stream, VIVS_PE_ALPHA_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_PE_COLOR_FORMAT, 0x00110f05);
    etna_set_state(stream, VIVS_PE_COLOR_STRIDE, 0x00001400);
    etna_set_state(stream, VIVS_PE_HDEPTH_CONTROL, 0x00000000);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_COLOR_ADDR(0), &at->color_surface_base);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_COLOR_ADDR(1), &at->color_surface_base);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_DEPTH_ADDR(0), &at->depth_surface_base);
    etna_set_state_reloc(stream, VIVS_PE_PIPE_DEPTH_ADDR(1), &at->depth_surface_base);
    etna_set_state(stream, VIVS_PE_STENCIL_CONFIG_EXT, 0x00000000);
    etna_set_state(stream, VIVS_PE_LOGIC_OP, 0x000e420c);
    etna_set_state(stream, VIVS_PE_DITHER(0), 0x6e4ca280);
    etna_set_state(stream, VIVS_PE_DITHER(1), 0x5d7f91b3);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000003);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_STATUS_BASE, &at->color_status_base);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_SURFACE_BASE, &at->color_surface_base);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE, 0xff808080);
    etna_set_state_reloc(stream, VIVS_TS_DEPTH_STATUS_BASE, &at->depth_status_base);
    etna_set_state_reloc(stream, VIVS_TS_DEPTH_SURFACE_BASE, &at->depth_surface_base);
    etna_set_state(stream, VIVS_TS_DEPTH_CLEAR_VALUE, 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(0), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(1), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(2), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(3), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(4), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(5), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(6), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(7), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(8), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(9), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(10), 0x00000000);
    etna_set_state(stream, VIVS_TE_SAMPLER_CONFIG0(11), 0x00000000);
    etna_set_state(stream, VIVS_GL_VARYING_TOTAL_COMPONENTS, 0x00000004);
    etna_set_state(stream, VIVS_GL_VARYING_NUM_COMPONENTS, 0x00000004);
    etna_set_state(stream, VIVS_GL_VARYING_COMPONENT_USE(0), 0x00000000);
    etna_set_state(stream, VIVS_GL_VARYING_COMPONENT_USE(1), 0x00000000);
    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, 0x00000701);
    etna_cmd_stream_emit(stream, 0x48000000); /* command STALL (9) OP=STALL */
    etna_cmd_stream_emit(stream, 0x00000701); /* command   TOKEN FROM=FE,TO=PE */
    etna_set_state(stream, VIVS_VS_ICACHE_CONTROL, 0x00000030);
    etna_set_state(stream, VIVS_VS_RANGE, 0x00000000);
    etna_set_state(stream, VIVS_PS_RANGE, 0x01000100);
    etna_set_state(stream, VIVS_SH_INST_MEM(0), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(1), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(2), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM(3), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(1024), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(1025), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(1026), 0x00000000);
    etna_set_state(stream, VIVS_SH_INST_MEM_MIRROR(1027), 0x00000000);
    etna_set_state(stream, VIVS_VS_UNIFORM_BASE, 0x00000000);
    etna_set_state(stream, VIVS_PS_UNIFORM_BASE, 0x000000a8);
    etna_set_state(stream, VIVS_VS_UNIFORM_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_VS_UNIFORM_CACHE, 0x00000011);
    etna_cmd_stream_emit(stream, 0x28000000); /* command DRAW_PRIMITIVES (5) OP=DRAW_PRIMITIVES */
    etna_cmd_stream_emit(stream, 0x00000005); /* command   COMMAND TYPE=TRIANGLE_STRIP */
    etna_cmd_stream_emit(stream, 0x00000000); /* command   START 0x0 */
    etna_cmd_stream_emit(stream, 0x00000001); /* command   COUNT 0x1 */
    etna_set_state(stream, VIVS_GL_FLUSH_CACHE, 0x00000003);
    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, 0x00000705);
    etna_set_state(stream, VIVS_GL_STALL_TOKEN, 0x00000705);

    etna_set_state(stream, VIVS_TS_FLUSH_CACHE, 0x00000001);
    etna_set_state(stream, VIVS_TS_MEM_CONFIG, 0x00000002);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_STATUS_BASE, &at->color_status_base);
    etna_set_state_reloc(stream, VIVS_TS_COLOR_SURFACE_BASE, &at->color_surface_base);
    etna_set_state(stream, VIVS_TS_COLOR_CLEAR_VALUE, 0xff808080);
    etna_set_state(stream, VIVS_RS_CONFIG, 0x00000686);
    etna_set_state(stream, VIVS_RS_SOURCE_STRIDE, 0x80005000);
    etna_set_state(stream, VIVS_RS_DEST_STRIDE, 0x00001400);
    etna_set_state_reloc(stream, VIVS_RS_PIPE_SOURCE_ADDR(0), &at->color_surface_base);
    etna_set_state_reloc(stream, VIVS_RS_PIPE_DEST_ADDR(0), &at->color_surface_base);
    etna_set_state(stream, VIVS_RS_PIPE_OFFSET(0), 0x00000000);
    etna_set_state(stream, VIVS_RS_PIPE_OFFSET(1), 0x00000000);
    etna_set_state(stream, VIVS_RS_WINDOW_SIZE, 0x03200500);
    etna_set_state(stream, VIVS_RS_DITHER(0), 0xffffffff);
    etna_set_state(stream, VIVS_RS_DITHER(1), 0xffffffff);
    etna_set_state(stream, VIVS_RS_CLEAR_CONTROL, 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(0), 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(1), 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(2), 0x00000000);
    etna_set_state(stream, VIVS_RS_FILL_VALUE(3), 0x00000000);
    etna_set_state(stream, VIVS_RS_EXTRA_CONFIG, 0x00000000);
    etna_set_state(stream, VIVS_RS_KICKER, 0xbeebbeeb);
}

static void process_output(struct attachments *at)
{
    void *mapped = etna_bo_map(at->color_surface);
    printf("* Writing output\n");

    /** Write to disk or something */
    int fd = open("triangle_out.dat", O_RDWR|O_CREAT|O_TRUNC, 0644);
    if(fd >= 0) {
        write(fd, mapped, color_surface_size);
        close(fd);
    } else {
        fprintf(stderr, "Unable to write output\n");
    }
}

int main(int argc, char *argv[])
{
    struct drm_test_info *info;
    if ((info = drm_test_setup(argc, argv)) == NULL) {
        return 1;
    }
    enum hardware_type hwt = drm_cl_get_hardware_type(info);
    if (hwt != HWT_GC3000) {
        fprintf(stderr, "This test only runs on GC3000\n");
        goto out;
    }
    struct attachments at = {};
    if (!initialize_attachments(info->dev, &at)) {
        fprintf(stderr, "Failed to initialize attachments\n");
        goto out;
    }
#if 1 /* use command buffer from blob */
    build_frame_cmdbuf(info->stream, &at);
    printf("* Rendering\n");
    etna_cmd_stream_finish(info->stream);

    build_flush_cmdbuf(info->stream, &at);
    printf("* Flushing\n");
    etna_cmd_stream_finish(info->stream);
#else
    build_etna_cmdbuf(info->stream, &at);
    printf("* Etna rendering\n");
    etna_cmd_stream_finish(info->stream);
#endif

    process_output(&at);

    free_attachments(info->dev, &at);
    drm_test_teardown(info);
    return 0;
out:
    drm_test_teardown(info);
    return 1;
}
