Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. //typedef unsigned int uint32_t;
  3.  
  4. #include "drmP.h"
  5. #include "drm.h"
  6. #include "radeon_drm.h"
  7. #include "radeon.h"
  8.  
  9. #include "r600_shader.h"
  10. #include "r600_reg.h"
  11. #include "r600_reg_auto_r6xx.h"
  12. #include "r600_reg_r6xx.h"
  13. #include "r600_reg_r7xx.h"
  14.  
  15.  
  16.  
  17. /*
  18. vertex format
  19.  
  20. struct vertex
  21. {
  22.     float x, y;
  23.     float s, t;
  24. };
  25.  
  26. vertex shader
  27.  
  28. VFETCH: ADDR(4) CNT(1) VALID_PIX
  29.   FETCH R0
  30. EXP_DONE POS0, R0.XY01
  31. EXT_DONE PARAM0, R0.ZW01
  32. */
  33.  
  34. uint32_t R600_video_vs[] =
  35. {
  36.  
  37.     /* 0 */
  38.     CF_DWORD0(ADDR(4)),
  39.     CF_DWORD1(POP_COUNT(0),
  40.       CF_CONST(0),
  41.       COND(SQ_CF_COND_ACTIVE),
  42.      /* I_COUNT(1),*/ 0,
  43.       CALL_COUNT(0),
  44.       END_OF_PROGRAM(0),
  45.       VALID_PIXEL_MODE(0),
  46.       CF_INST(SQ_CF_INST_VTX),
  47.       WHOLE_QUAD_MODE(0),
  48.       BARRIER(1)),
  49.     /* 1 */
  50.     CF_ALLOC_IMP_EXP_DWORD0(
  51.       ARRAY_BASE(CF_POS0),
  52.       TYPE(SQ_EXPORT_POS),
  53.       RW_GPR(0),
  54.       RW_REL(ABSOLUTE),
  55.       INDEX_GPR(0),
  56.       ELEM_SIZE(0)),
  57.     CF_ALLOC_IMP_EXP_DWORD1_SWIZ(
  58.       SRC_SEL_X(SQ_SEL_X),
  59.       SRC_SEL_Y(SQ_SEL_Y),
  60.       SRC_SEL_Z(SQ_SEL_0),
  61.       SRC_SEL_W(SQ_SEL_1),
  62.       R6xx_ELEM_LOOP(0),
  63.       BURST_COUNT(0),
  64.       END_OF_PROGRAM(0),
  65.       VALID_PIXEL_MODE(0),
  66.       CF_INST(SQ_CF_INST_EXPORT_DONE),
  67.       WHOLE_QUAD_MODE(0),
  68.       BARRIER(1)),
  69.     /* 2 */
  70.     CF_ALLOC_IMP_EXP_DWORD0(
  71.       ARRAY_BASE(0),
  72.       TYPE(SQ_EXPORT_PARAM),
  73.       RW_GPR(0),
  74.       RW_REL(ABSOLUTE),
  75.       INDEX_GPR(0),
  76.       ELEM_SIZE(0)),
  77.     CF_ALLOC_IMP_EXP_DWORD1_SWIZ(
  78.       SRC_SEL_X(SQ_SEL_Z),
  79.       SRC_SEL_Y(SQ_SEL_W),
  80.       SRC_SEL_Z(SQ_SEL_0),
  81.       SRC_SEL_W(SQ_SEL_1),
  82.       R6xx_ELEM_LOOP(0),
  83.       BURST_COUNT(0),
  84.       END_OF_PROGRAM(1),
  85.       VALID_PIXEL_MODE(0),
  86.       CF_INST(SQ_CF_INST_EXPORT_DONE),
  87.       WHOLE_QUAD_MODE(0),
  88.       BARRIER(0)),
  89.     /* 3 */
  90.     0x00000000,
  91.     0x00000000,
  92.     /* 4/5 */
  93.     VTX_DWORD0(VTX_INST(SQ_VTX_INST_FETCH),
  94.       FETCH_TYPE(SQ_VTX_FETCH_VERTEX_DATA),
  95.       FETCH_WHOLE_QUAD(0),
  96.       BUFFER_ID(0),
  97.       SRC_GPR(0),
  98.       SRC_REL(ABSOLUTE),
  99.       SRC_SEL_X(SQ_SEL_X),
  100.       MEGA_FETCH_COUNT(16)),
  101.     VTX_DWORD1_GPR(DST_GPR(0),
  102.       DST_REL(0),
  103.       DST_SEL_X(SQ_SEL_X),
  104.       DST_SEL_Y(SQ_SEL_Y),
  105.       DST_SEL_Z(SQ_SEL_Z),
  106.       DST_SEL_W(SQ_SEL_W),
  107.       USE_CONST_FIELDS(0),
  108.       DATA_FORMAT(FMT_32_32_32_32_FLOAT),
  109.       NUM_FORMAT_ALL(SQ_NUM_FORMAT_SCALED),
  110.       FORMAT_COMP_ALL(SQ_FORMAT_COMP_SIGNED),
  111.       SRF_MODE_ALL(SRF_MODE_ZERO_CLAMP_MINUS_ONE)),
  112.     VTX_DWORD2(OFFSET(0),
  113.       ENDIAN_SWAP(SQ_ENDIAN_NONE),
  114.       CONST_BUF_NO_STRIDE(0),
  115.       MEGA_FETCH(1)),
  116.     VTX_DWORD_PAD
  117. };
  118.  
  119.  
  120. /*
  121. pixel shader
  122.  
  123. 00 TEX: ADDR(2) CNT(1) VALID_PIX
  124.       0  SAMPLE R0, v0.xy01, t0, s0
  125.       1  SAMPLE R1, v0.xy01, t0, s1
  126.  
  127. 01 EXP_DONE: PIX0, R0
  128.  
  129. 02 ALU: ADDR() CNT(1)
  130.       2  KILLNE ____, R1.x___, c0.x___
  131.  
  132. END_OF_PROGRAM
  133.  
  134.  
  135.  
  136.  */
  137. uint32_t R600_video_ps[]=
  138. {
  139.     /* CF INST 0 */
  140.     CF_DWORD0(ADDR(2)),
  141.     CF_DWORD1(POP_COUNT(0),
  142.         CF_CONST(0),
  143.         COND(SQ_CF_COND_ACTIVE),
  144.      /*   I_COUNT(1), */ 0,
  145.         CALL_COUNT(0),
  146.         END_OF_PROGRAM(0),
  147.         VALID_PIXEL_MODE(0),
  148.         CF_INST(SQ_CF_INST_TEX),
  149.         WHOLE_QUAD_MODE(0),
  150.         BARRIER(1)),
  151.  
  152. #if 0
  153.     /* CF INST 1 */
  154.     CF_ALU_DWORD0(ADDR( ),
  155.         KCACHE_BANK0(0),
  156.         KCACHE_BANK1(0),
  157.         KCACHE_MODE0(SQ_CF_KCACHE_NOP));
  158.     CF_ALU_DWORD1(KCACHE_MODE1(SQ_CF_KCACHE_NOP),
  159.         KCACHE_ADDR0(0),
  160.         KCACHE_ADDR1(0),
  161.         I_COUNT(1),
  162.         USES_WATERFALL(0),
  163.         CF_INST(SQ_CF_INST_ALU),
  164.         WHOLE_QUAD_MODE(0),
  165.         BARRIER(1));
  166. #endif
  167.  
  168.     /* CF INST 1 */
  169.     CF_ALLOC_IMP_EXP_DWORD0(ARRAY_BASE(CF_PIXEL_MRT0),
  170.         TYPE(SQ_EXPORT_PIXEL),
  171.         RW_GPR(0),
  172.         RW_REL(ABSOLUTE),
  173.         INDEX_GPR(0),
  174.         ELEM_SIZE(1)),
  175.     CF_ALLOC_IMP_EXP_DWORD1_SWIZ(SRC_SEL_X(SQ_SEL_X),
  176.         SRC_SEL_Y(SQ_SEL_Y),
  177.         SRC_SEL_Z(SQ_SEL_Z),
  178.         SRC_SEL_W(SQ_SEL_W),
  179.         R6xx_ELEM_LOOP(0),
  180.         BURST_COUNT(1),
  181.         END_OF_PROGRAM(1),
  182.         VALID_PIXEL_MODE(0),
  183.         CF_INST(SQ_CF_INST_EXPORT_DONE),
  184.         WHOLE_QUAD_MODE(0),
  185.         BARRIER(1)),
  186.  
  187. #if 0
  188.     /*  KILLNE  c0.x, r1.x   */
  189.     ALU_DWORD0(SRC0_SEL(ALU_SRC_CFILE_BASE + 0),
  190.         SRC0_REL(ABSOLUTE),
  191.         SRC0_ELEM(ELEM_X),
  192.         SRC0_NEG(0),
  193.         SRC1_SEL(ALU_SRC_GPR_BASE + 1),
  194.         SRC1_REL(ABSOLUTE),
  195.         SRC1_ELEM(ELEM_X),
  196.         SRC1_NEG(0),
  197.         INDEX_MODE(SQ_INDEX_LOOP),
  198.         PRED_SEL(SQ_PRED_SEL_OFF),
  199.         LAST(1)),
  200.     R7xx_ALU_DWORD1_OP2(SRC0_ABS(0),
  201.         SRC1_ABS(0),
  202.         UPDATE_EXECUTE_MASK(0),
  203.         UPDATE_PRED(0),
  204.         WRITE_MASK(0),
  205.         FOG_MERGE(0),
  206.         OMOD(SQ_ALU_OMOD_OFF),
  207.         ALU_INST(SQ_OP2_INST_KILLNE),
  208.         BANK_SWIZZLE(SQ_ALU_VEC_012),
  209.         DST_GPR(0),
  210.         DST_REL(ABSOLUTE),
  211.         DST_ELEM(ELEM_X),
  212.         CLAMP(0)),
  213.  
  214. #endif
  215.  
  216.     /* TEX INST 0 */
  217.     TEX_DWORD0(TEX_INST(SQ_TEX_INST_SAMPLE),
  218.         BC_FRAC_MODE(0),
  219.         FETCH_WHOLE_QUAD(0),
  220.         RESOURCE_ID(0),
  221.         SRC_GPR(0),
  222.         SRC_REL(ABSOLUTE),
  223.         R7xx_ALT_CONST(0)),
  224.     TEX_DWORD1(DST_GPR(0),
  225.         DST_REL(ABSOLUTE),
  226.         DST_SEL_X(SQ_SEL_X), /* R */
  227.         DST_SEL_Y(SQ_SEL_Y), /* G */
  228.         DST_SEL_Z(SQ_SEL_Z), /* B */
  229.         DST_SEL_W(SQ_SEL_W), /* A */
  230.         LOD_BIAS(0),
  231.         COORD_TYPE_X(TEX_UNNORMALIZED),
  232.         COORD_TYPE_Y(TEX_UNNORMALIZED),
  233.         COORD_TYPE_Z(TEX_UNNORMALIZED),
  234.         COORD_TYPE_W(TEX_UNNORMALIZED)),
  235.     TEX_DWORD2(OFFSET_X(0),
  236.         OFFSET_Y(0),
  237.         OFFSET_Z(0),
  238.         SAMPLER_ID(0),
  239.         SRC_SEL_X(SQ_SEL_X),
  240.         SRC_SEL_Y(SQ_SEL_Y),
  241.         SRC_SEL_Z(SQ_SEL_0),
  242.         SRC_SEL_W(SQ_SEL_1)),
  243.     TEX_DWORD_PAD
  244.  
  245. #if 0
  246.     TEX_DWORD0(TEX_INST(SQ_TEX_INST_SAMPLE),
  247.         BC_FRAC_MODE(0),
  248.         FETCH_WHOLE_QUAD(0),
  249.         RESOURCE_ID(1),
  250.         SRC_GPR(0),
  251.         SRC_REL(ABSOLUTE),
  252.         R7xx_ALT_CONST(0)),
  253.     TEX_DWORD1(DST_GPR(1),
  254.         DST_REL(ABSOLUTE),
  255.         DST_SEL_X(SQ_SEL_X), /* R */
  256.         DST_SEL_Y(SQ_SEL_MASK), /* G */
  257.         DST_SEL_Z(SQ_SEL_MASK), /* B */
  258.         DST_SEL_W(SQ_SEL_MASK), /* A */
  259.         LOD_BIAS(0),
  260.         COORD_TYPE_X(TEX_UNNORMALIZED),
  261.         COORD_TYPE_Y(TEX_UNNORMALIZED),
  262.         COORD_TYPE_Z(TEX_UNNORMALIZED),
  263.         COORD_TYPE_W(TEX_UNNORMALIZED)),
  264.     TEX_DWORD2(OFFSET_X(0),
  265.         OFFSET_Y(0),
  266.         OFFSET_Z(0),
  267.         SAMPLER_ID(0),
  268.         SRC_SEL_X(SQ_SEL_X),
  269.         SRC_SEL_Y(SQ_SEL_Y),
  270.         SRC_SEL_Z(SQ_SEL_0),
  271.         SRC_SEL_W(SQ_SEL_1)),
  272.     TEX_DWORD_PAD
  273.  
  274. #endif
  275. };
  276.  
  277. const u32 r600_video_ps_size = ARRAY_SIZE(R600_video_ps);
  278. const u32 r600_video_vs_size = ARRAY_SIZE(R600_video_vs);
  279.  
  280.  
  281.