Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2010 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21.  * IN THE SOFTWARE.
  22.  */
  23.  
  24. #include <stdint.h>
  25. #include "brw_defines.h"
  26. #include "glsl/ir.h"
  27.  
  28. #pragma once
  29.  
  30. enum register_file {
  31.    BAD_FILE,
  32.    ARF,
  33.    GRF,
  34.    MRF,
  35.    IMM,
  36.    HW_REG, /* a struct brw_reg */
  37.    ATTR,
  38.    UNIFORM, /* prog_data->params[reg] */
  39. };
  40.  
  41. class backend_instruction : public exec_node {
  42. public:
  43.    bool is_tex();
  44.    bool is_math();
  45.    bool is_control_flow();
  46.  
  47.    enum opcode opcode; /* BRW_OPCODE_* or FS_OPCODE_* */
  48.  
  49.    uint32_t predicate;
  50.    bool predicate_inverse;
  51. };
  52.  
  53. class backend_visitor : public ir_visitor {
  54. public:
  55.  
  56.    struct brw_context *brw;
  57.    struct gl_context *ctx;
  58.    struct brw_shader *shader;
  59.    struct gl_shader_program *shader_prog;
  60.  
  61.    /** ralloc context for temporary data used during compile */
  62.    void *mem_ctx;
  63.  
  64.    /**
  65.     * List of either fs_inst or vec4_instruction (inheriting from
  66.     * backend_instruction)
  67.     */
  68.    exec_list instructions;
  69.  
  70.    virtual void dump_instruction(backend_instruction *inst) = 0;
  71.    void dump_instructions();
  72. };
  73.  
  74. int brw_type_for_base_type(const struct glsl_type *type);
  75. uint32_t brw_conditional_for_comparison(unsigned int op);
  76. uint32_t brw_math_function(enum opcode op);
  77. uint32_t brw_texture_offset(ir_constant *offset);
  78. const char *brw_instruction_name(enum opcode op);
  79.