Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2010 Jakob Bornecrantz
  4.  * Copyright 2011 Lauri Kasanen
  5.  * All Rights Reserved.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the
  9.  * "Software"), to deal in the Software without restriction, including
  10.  * without limitation the rights to use, copy, modify, merge, publish,
  11.  * distribute, sub license, and/or sell copies of the Software, and to
  12.  * permit persons to whom the Software is furnished to do so, subject to
  13.  * the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice (including the
  16.  * next paragraph) shall be included in all copies or substantial portions
  17.  * of the Software.
  18.  *
  19.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  20.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  21.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  22.  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
  23.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  24.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  25.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26.  *
  27.  **************************************************************************/
  28.  
  29. #include "postprocess/postprocess.h"
  30. #include "postprocess/pp_private.h"
  31.  
  32. #include "cso_cache/cso_context.h"
  33. #include "pipe/p_screen.h"
  34. #include "pipe/p_context.h"
  35. #include "pipe/p_state.h"
  36. #include "pipe/p_shader_tokens.h"
  37. #include "util/u_inlines.h"
  38. #include "util/u_simple_shaders.h"
  39. #include "util/u_memory.h"
  40.  
  41. /** Initialize the internal details */
  42. struct pp_program *
  43. pp_init_prog(struct pp_queue_t *ppq, struct pipe_context *pipe,
  44.              struct cso_context *cso)
  45. {
  46.    struct pp_program *p;
  47.  
  48.    pp_debug("Initializing program\n");
  49.    if (!pipe)
  50.       return NULL;
  51.  
  52.    p = CALLOC(1, sizeof(struct pp_program));
  53.    if (!p)
  54.       return NULL;
  55.  
  56.    p->screen = pipe->screen;
  57.    p->pipe = pipe;
  58.    p->cso = cso;
  59.  
  60.    {
  61.       static const float verts[4][2][4] = {
  62.          {
  63.           {1.0f, 1.0f, 0.0f, 1.0f},
  64.           {1.0f, 1.0f, 0.0f, 1.0f}
  65.           },
  66.          {
  67.           {-1.0f, 1.0f, 0.0f, 1.0f},
  68.           {0.0f, 1.0f, 0.0f, 1.0f}
  69.           },
  70.          {
  71.           {-1.0f, -1.0f, 0.0f, 1.0f},
  72.           {0.0f, 0.0f, 0.0f, 1.0f}
  73.           },
  74.          {
  75.           {1.0f, -1.0f, 0.0f, 1.0f},
  76.           {1.0f, 0.0f, 0.0f, 1.0f}
  77.           }
  78.       };
  79.  
  80.       p->vbuf = pipe_buffer_create(pipe->screen, PIPE_BIND_VERTEX_BUFFER,
  81.                                    PIPE_USAGE_DEFAULT, sizeof(verts));
  82.       pipe_buffer_write(p->pipe, p->vbuf, 0, sizeof(verts), verts);
  83.    }
  84.  
  85.    p->blend.rt[0].colormask = PIPE_MASK_RGBA;
  86.    p->blend.rt[0].rgb_src_factor = p->blend.rt[0].alpha_src_factor =
  87.       PIPE_BLENDFACTOR_SRC_ALPHA;
  88.    p->blend.rt[0].rgb_dst_factor = p->blend.rt[0].alpha_dst_factor =
  89.       PIPE_BLENDFACTOR_INV_SRC_ALPHA;
  90.  
  91.    p->rasterizer.cull_face = PIPE_FACE_NONE;
  92.    p->rasterizer.half_pixel_center = 1;
  93.    p->rasterizer.bottom_edge_rule = 1;
  94.    p->rasterizer.depth_clip = 1;
  95.  
  96.    p->sampler.wrap_s = p->sampler.wrap_t = p->sampler.wrap_r =
  97.       PIPE_TEX_WRAP_CLAMP_TO_EDGE;
  98.  
  99.    p->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
  100.    p->sampler.min_img_filter = p->sampler.mag_img_filter =
  101.       PIPE_TEX_FILTER_LINEAR;
  102.    p->sampler.normalized_coords = 1;
  103.  
  104.    p->sampler_point.wrap_s = p->sampler_point.wrap_t =
  105.       p->sampler_point.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
  106.    p->sampler_point.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
  107.    p->sampler_point.min_img_filter = p->sampler_point.mag_img_filter =
  108.       PIPE_TEX_FILTER_NEAREST;
  109.    p->sampler_point.normalized_coords = 1;
  110.  
  111.    p->velem[0].src_offset = 0;
  112.    p->velem[0].instance_divisor = 0;
  113.    p->velem[0].vertex_buffer_index = 0;
  114.    p->velem[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
  115.    p->velem[1].src_offset = 1 * 4 * sizeof(float);
  116.    p->velem[1].instance_divisor = 0;
  117.    p->velem[1].vertex_buffer_index = 0;
  118.    p->velem[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
  119.  
  120.    if (!p->screen->is_format_supported(p->screen,
  121.                                        PIPE_FORMAT_R32G32B32A32_FLOAT,
  122.                                        PIPE_BUFFER, 1,
  123.                                        PIPE_BIND_VERTEX_BUFFER))
  124.       pp_debug("Vertex buf format fail\n");
  125.  
  126.  
  127.    {
  128.       const uint semantic_names[] = { TGSI_SEMANTIC_POSITION,
  129.          TGSI_SEMANTIC_GENERIC
  130.       };
  131.       const uint semantic_indexes[] = { 0, 0 };
  132.       p->passvs = util_make_vertex_passthrough_shader(p->pipe, 2,
  133.                                                       semantic_names,
  134.                                                       semantic_indexes, FALSE);
  135.    }
  136.  
  137.    p->framebuffer.nr_cbufs = 1;
  138.  
  139.    p->surf.format = PIPE_FORMAT_B8G8R8A8_UNORM;
  140.  
  141.    return p;
  142. }
  143.