1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Display a cleared blue window. This demo has no dependencies on 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * any utility code, just the graw interface and gallium. 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h> 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "graw_util.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct graw_info info; 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const int WIDTH = 300; 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const int HEIGHT = 300; 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct vertex { 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float position[4]; 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float color[4]; 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean FlatShade = FALSE; 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct vertex vertices[3] = 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 0.0f, -0.9f, 0.0f, 1.0f }, 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1.0f, 0.0f, 0.0f, 1.0f } 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { -0.9f, 0.9f, 0.0f, 1.0f }, 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 0.0f, 1.0f, 0.0f, 1.0f } 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 0.9f, 0.9f, 0.0f, 1.0f }, 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 0.0f, 0.0f, 1.0f, 1.0f } 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void set_vertices( void ) 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_element ve[2]; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_vertex_buffer vbuf; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *handle; 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(ve, 0, sizeof ve); 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ve[0].src_offset = Offset(struct vertex, position); 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ve[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ve[1].src_offset = Offset(struct vertex, color); 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ve[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org handle = info.ctx->create_vertex_elements_state(info.ctx, 2, ve); 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->bind_vertex_elements_state(info.ctx, handle); 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vbuf.stride = sizeof( struct vertex ); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vbuf.buffer_offset = 0; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vbuf.buffer = pipe_buffer_create_with_data(info.ctx, 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_VERTEX_BUFFER, 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_USAGE_STATIC, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(vertices), 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vertices); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->set_vertex_buffers(info.ctx, 1, &vbuf); 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void set_vertex_shader( void ) 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *handle; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *text = 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "VERT\n" 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL IN[0]\n" 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL IN[1]\n" 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL OUT[0], POSITION\n" 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL OUT[1], COLOR\n" 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " 0: MOV OUT[1], IN[1]\n" 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " 1: MOV OUT[0], IN[0]\n" 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " 2: END\n"; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org handle = graw_parse_vertex_shader(info.ctx, text); 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->bind_vs_state(info.ctx, handle); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void set_fragment_shader( void ) 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *handle; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *text = 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "FRAG\n" 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL IN[0], COLOR, LINEAR\n" 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "DCL OUT[0], COLOR\n" 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " 0: MOV OUT[0], IN[0]\n" 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org " 1: END\n"; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org handle = graw_parse_fragment_shader(info.ctx, text); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->bind_fs_state(info.ctx, handle); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void draw( void ) 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union pipe_color_union clear_color = { {1,0,1,1} }; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->clear(info.ctx, PIPE_CLEAR_COLOR, &clear_color, 0, 0); 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org util_draw_arrays(info.ctx, PIPE_PRIM_TRIANGLES, 0, 3); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->flush(info.ctx, NULL); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_save_surface_to_file(info.ctx, info.color_surf[0], NULL); 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_util_flush_front(&info); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void init( void ) 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!graw_util_create_window(&info, WIDTH, HEIGHT, 1, FALSE)) 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit(1); 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_util_default_state(&info, FALSE); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_rasterizer_state rasterizer; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *handle; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(&rasterizer, 0, sizeof rasterizer); 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer.cull_face = PIPE_FACE_NONE; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer.gl_rasterization_rules = 1; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer.flatshade = FlatShade; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rasterizer.depth_clip = 1; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org handle = info.ctx->create_rasterizer_state(info.ctx, &rasterizer); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org info.ctx->bind_rasterizer_state(info.ctx, handle); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_util_viewport(&info, 0, 0, WIDTH, HEIGHT, 30, 1000); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org set_vertices(); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org set_vertex_shader(); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org set_fragment_shader(); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void args(int argc, char *argv[]) 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 1; i < argc; ) { 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (graw_parse_args(&i, argc, argv)) { 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ok */ 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(argv[i], "-f") == 0) { 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FlatShade = TRUE; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i++; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("Invalid arg %s\n", argv[i]); 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit(1); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint main( int argc, char *argv[] ) 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org args(argc, argv); 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init(); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_set_display_func( draw ); 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org graw_main_loop(); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 170