1fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/*
2fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * Copyright 2011 Joakim Sindholt <opensource@zhasha.com>
3fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * Copyright 2013 Christoph Bumiller
4fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt *
5fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * Permission is hereby granted, free of charge, to any person obtaining a
6fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * copy of this software and associated documentation files (the "Software"),
7fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * to deal in the Software without restriction, including without limitation
8fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * on the rights to use, copy, modify, merge, publish, distribute, sub
9fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * license, and/or sell copies of the Software, and to permit persons to whom
10fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * the Software is furnished to do so, subject to the following conditions:
11fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt *
12fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * The above copyright notice and this permission notice (including the next
13fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * paragraph) shall be included in all copies or substantial portions of the
14fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * Software.
15fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt *
16fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
19fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
20fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt * USE OR OTHER DEALINGS IN THE SOFTWARE. */
23fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
24fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#include "device9.h"
25fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#include "nine_pipe.h"
26fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
27fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt#include "cso_cache/cso_context.h"
28fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
29fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtvoid
3071616d0c501077a04deb4f2a3cc115b50634763dAxel Davynine_convert_dsa_state(struct pipe_depth_stencil_alpha_state *dsa_state,
3171616d0c501077a04deb4f2a3cc115b50634763dAxel Davy                       const DWORD *rs)
32fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
33fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    struct pipe_depth_stencil_alpha_state dsa;
34fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
35fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    memset(&dsa, 0, sizeof(dsa)); /* memcmp safety */
36fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
37fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (rs[D3DRS_ZENABLE]) {
38fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.depth.enabled = 1;
39fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.depth.writemask = !!rs[D3DRS_ZWRITEENABLE];
40fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.depth.func = d3dcmpfunc_to_pipe_func(rs[D3DRS_ZFUNC]);
41fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
42fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
43fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (rs[D3DRS_STENCILENABLE]) {
44fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].enabled = 1;
45fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].func = d3dcmpfunc_to_pipe_func(rs[D3DRS_STENCILFUNC]);
46fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].fail_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_STENCILFAIL]);
47fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].zpass_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_STENCILPASS]);
48fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].zfail_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_STENCILZFAIL]);
49fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].valuemask = rs[D3DRS_STENCILMASK];
50fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.stencil[0].writemask = rs[D3DRS_STENCILWRITEMASK];
51fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
52fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        if (rs[D3DRS_TWOSIDEDSTENCILMODE]) {
53fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].enabled = 1;
54fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].func = d3dcmpfunc_to_pipe_func(rs[D3DRS_CCW_STENCILFUNC]);
55fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].fail_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_CCW_STENCILFAIL]);
56fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].zpass_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_CCW_STENCILPASS]);
57fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].zfail_op = d3dstencilop_to_pipe_stencil_op(rs[D3DRS_CCW_STENCILZFAIL]);
58fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].valuemask = dsa.stencil[0].valuemask;
59fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            dsa.stencil[1].writemask = dsa.stencil[0].writemask;
60fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        }
61fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
62fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
63fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (rs[D3DRS_ALPHATESTENABLE]) {
64fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.alpha.enabled = 1;
65fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.alpha.func = d3dcmpfunc_to_pipe_func(rs[D3DRS_ALPHAFUNC]);
66fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        dsa.alpha.ref_value = (float)rs[D3DRS_ALPHAREF] / 255.0f;
67fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
68fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
6971616d0c501077a04deb4f2a3cc115b50634763dAxel Davy    *dsa_state = dsa;
70fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}
71fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
72fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtvoid
73b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davynine_convert_rasterizer_state(struct NineDevice9 *device,
74b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy                              struct pipe_rasterizer_state *rast_state,
75b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy                              const DWORD *rs)
76fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
77fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    struct pipe_rasterizer_state rast;
78fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
795a2302b5ece2edf944b474eeb19ad7fc17906e7dAxel Davy    memset(&rast, 0, sizeof(rast));
80fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
81fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.flatshade = rs[D3DRS_SHADEMODE] == D3DSHADE_FLAT;
82fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.light_twoside = 0; */
83fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.clamp_fragment_color = 0; */
84fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.clamp_vertex_color = 0; */
85fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.front_ccw = 0; */
86fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.cull_face = d3dcull_to_pipe_face(rs[D3DRS_CULLMODE]);
87fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.fill_front = d3dfillmode_to_pipe_polygon_mode(rs[D3DRS_FILLMODE]);
88fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.fill_back = rast.fill_front;
89fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.offset_tri = !!(rs[D3DRS_DEPTHBIAS] | rs[D3DRS_SLOPESCALEDEPTHBIAS]);
90fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.offset_line = rast.offset_tri; /* triangles in wireframe mode */
91fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.offset_point = 0; /* XXX ? */
92fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.scissor = !!rs[D3DRS_SCISSORTESTENABLE];
93fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.poly_smooth = 0; */
94fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.poly_stipple_enable = 0; */
95fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.point_smooth = 0; */
96fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.sprite_coord_mode = PIPE_SPRITE_COORD_UPPER_LEFT;
973c4864fa5539d6b34863c28f3650289fd2a4ce93Axel Davy    rast.point_quad_rasterization = 1;
98fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.point_size_per_vertex = rs[NINED3DRS_VSPOINTSIZE];
999cae3cdc890b2aa261d635667a5850929a0913f5Axel Davy    rast.multisample = rs[NINED3DRS_MULTISAMPLE];
100fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.line_smooth = !!rs[D3DRS_ANTIALIASEDLINEENABLE];
101fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.line_stipple_enable = 0; */
102fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.line_last_pixel = !!rs[D3DRS_LASTPIXEL];
103fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.flatshade_first = 1;
104fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.half_pixel_center = 0; */
105fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.lower_left_origin = 0; */
106fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.bottom_edge_rule = 0; */
107fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.rasterizer_discard = 0; */
108fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.depth_clip = 1;
109fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.clip_halfz = 1;
110fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.clip_plane_enable = rs[D3DRS_CLIPPLANEENABLE];
111fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.line_stipple_factor = 0; */
112fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.line_stipple_pattern = 0; */
113fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.sprite_coord_enable = rs[D3DRS_POINTSPRITEENABLE] ? 0xff : 0x00;
114fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.line_width = 1.0f;
1151b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph    if (rs[NINED3DRS_VSPOINTSIZE]) {
1161b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph        rast.point_size = 1.0f;
1171b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph    } else {
1181b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph        rast.point_size = CLAMP(asfloat(rs[D3DRS_POINTSIZE]),
1191b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph                asfloat(rs[D3DRS_POINTSIZE_MIN]),
1201b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph                asfloat(rs[D3DRS_POINTSIZE_MAX]));
1211b645df2f309833cca5dbeaa2deceeda36a7426cPatrick Rudolph    }
122bae2c7c15444b02a4820e3182c345545bd348561Axel Davy    /* offset_units has the ogl/d3d11 meaning.
123bae2c7c15444b02a4820e3182c345545bd348561Axel Davy     * d3d9: offset = scale * dz + bias
124bae2c7c15444b02a4820e3182c345545bd348561Axel Davy     * ogl/d3d11: offset = scale * dz + r * bias
125b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy     * with r implementation dependent (+ different formula for float depth
126b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy     * buffers). r=2^-23 is often the right value for gallium drivers.
127b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy     * If possible, use offset_units_unscaled, which gives the d3d9
128b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy     * behaviour, else scale by 1 << 23 */
129b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy    rast.offset_units = asfloat(rs[D3DRS_DEPTHBIAS]) * (device->driver_caps.offset_units_unscaled ? 1.0f : (float)(1 << 23));
130b76fa5673924ce09e28f3000808e3bd50ffe4570Axel Davy    rast.offset_units_unscaled = device->driver_caps.offset_units_unscaled;
131fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    rast.offset_scale = asfloat(rs[D3DRS_SLOPESCALEDEPTHBIAS]);
132fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* rast.offset_clamp = 0.0f; */
133fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
1345a2302b5ece2edf944b474eeb19ad7fc17906e7dAxel Davy    *rast_state = rast;
135fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}
136fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
137a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void
138fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtnine_convert_blend_state_fixup(struct pipe_blend_state *blend, const DWORD *rs)
139fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
140fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (unlikely(rs[D3DRS_SRCBLEND] == D3DBLEND_BOTHSRCALPHA ||
141fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt                 rs[D3DRS_SRCBLEND] == D3DBLEND_BOTHINVSRCALPHA)) {
142fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend->rt[0].rgb_dst_factor = (rs[D3DRS_SRCBLEND] == D3DBLEND_BOTHSRCALPHA) ?
143fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            PIPE_BLENDFACTOR_INV_SRC_ALPHA : PIPE_BLENDFACTOR_SRC_ALPHA;
144fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        if (!rs[D3DRS_SEPARATEALPHABLENDENABLE])
145fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend->rt[0].alpha_dst_factor = blend->rt[0].rgb_dst_factor;
146fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    } else
147fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (unlikely(rs[D3DRS_SEPARATEALPHABLENDENABLE] &&
148fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt                 (rs[D3DRS_SRCBLENDALPHA] == D3DBLEND_BOTHSRCALPHA ||
149fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt                  rs[D3DRS_SRCBLENDALPHA] == D3DBLEND_BOTHINVSRCALPHA))) {
150fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend->rt[0].alpha_dst_factor = (rs[D3DRS_SRCBLENDALPHA] == D3DBLEND_BOTHSRCALPHA) ?
151fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            PIPE_BLENDFACTOR_INV_SRC_ALPHA : PIPE_BLENDFACTOR_SRC_ALPHA;
152fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
153fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}
154fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
155fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtvoid
156a3f0d21da9a33e58a4be41f65f77eebe1dd85841Axel Davynine_convert_blend_state(struct pipe_blend_state *blend_state, const DWORD *rs)
157fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
158fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    struct pipe_blend_state blend;
159fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
160fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    memset(&blend, 0, sizeof(blend)); /* memcmp safety */
161fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
162fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    blend.dither = !!rs[D3DRS_DITHERENABLE];
163fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
164fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt /* blend.alpha_to_one = 0; */
165f297e7de0f3fc0bd4fec483d4bf778a9678992c7Axel Davy    blend.alpha_to_coverage = rs[NINED3DRS_ALPHACOVERAGE] & 1;
166fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
167fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    blend.rt[0].blend_enable = !!rs[D3DRS_ALPHABLENDENABLE];
168fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (blend.rt[0].blend_enable) {
169fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[0].rgb_func = d3dblendop_to_pipe_blend(rs[D3DRS_BLENDOP]);
170fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[0].rgb_src_factor = d3dblend_color_to_pipe_blendfactor(rs[D3DRS_SRCBLEND]);
171fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[0].rgb_dst_factor = d3dblend_color_to_pipe_blendfactor(rs[D3DRS_DESTBLEND]);
172fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        if (rs[D3DRS_SEPARATEALPHABLENDENABLE]) {
173fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_func = d3dblendop_to_pipe_blend(rs[D3DRS_BLENDOPALPHA]);
174fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_src_factor = d3dblend_alpha_to_pipe_blendfactor(rs[D3DRS_SRCBLENDALPHA]);
175fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_dst_factor = d3dblend_alpha_to_pipe_blendfactor(rs[D3DRS_DESTBLENDALPHA]);
176fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        } else {
177fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            /* TODO: Just copy the rgb values ? SRC1_x may differ ... */
178fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_func = blend.rt[0].rgb_func;
179fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_src_factor = d3dblend_alpha_to_pipe_blendfactor(rs[D3DRS_SRCBLEND]);
180fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[0].alpha_dst_factor = d3dblend_alpha_to_pipe_blendfactor(rs[D3DRS_DESTBLEND]);
181fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        }
182fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        nine_convert_blend_state_fixup(&blend, rs); /* for BOTH[INV]SRCALPHA */
183fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
184e85ef7d8e501b3f0a94d8e53fbd3372ba24b89ecAxel Davy
185fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    blend.rt[0].colormask = rs[D3DRS_COLORWRITEENABLE];
186fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
187fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (rs[D3DRS_COLORWRITEENABLE1] != rs[D3DRS_COLORWRITEENABLE] ||
188fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        rs[D3DRS_COLORWRITEENABLE2] != rs[D3DRS_COLORWRITEENABLE] ||
189fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        rs[D3DRS_COLORWRITEENABLE3] != rs[D3DRS_COLORWRITEENABLE]) {
190fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        unsigned i;
191fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.independent_blend_enable = TRUE;
192fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        for (i = 1; i < 4; ++i)
193fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt            blend.rt[i] = blend.rt[0];
194fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[1].colormask = rs[D3DRS_COLORWRITEENABLE1];
195fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[2].colormask = rs[D3DRS_COLORWRITEENABLE2];
196fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        blend.rt[3].colormask = rs[D3DRS_COLORWRITEENABLE3];
197fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
198fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
199fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    /* blend.force_srgb = !!rs[D3DRS_SRGBWRITEENABLE]; */
200fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
201a3f0d21da9a33e58a4be41f65f77eebe1dd85841Axel Davy    *blend_state = blend;
202fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}
203fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
204fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtvoid
205fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtnine_convert_sampler_state(struct cso_context *ctx, int idx, const DWORD *ss)
206fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
207fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    struct pipe_sampler_state samp;
208fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
209fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    assert(idx >= 0 &&
210fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt           (idx < NINE_MAX_SAMPLERS_PS || idx >= NINE_SAMPLER_VS(0)) &&
211fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt           (idx < NINE_MAX_SAMPLERS));
212fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
213fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    memset(&samp, 0, sizeof(samp)); /* memcmp safety */
214fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
215fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (ss[D3DSAMP_MIPFILTER] != D3DTEXF_NONE) {
216fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        samp.lod_bias = asfloat(ss[D3DSAMP_MIPMAPLODBIAS]);
217fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        samp.min_lod = ss[NINED3DSAMP_MINLOD];
218fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        samp.min_mip_filter = (ss[D3DSAMP_MIPFILTER] == D3DTEXF_POINT) ? PIPE_TEX_FILTER_NEAREST : PIPE_TEX_FILTER_LINEAR;
219fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    } else {
220fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        samp.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
221fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    }
222fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    samp.max_lod = 15.0f;
22309edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph
22409edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph    if (ss[NINED3DSAMP_CUBETEX]) {
22509edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        /* Cube textures are always clamped to edge on D3D */
22609edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
22709edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
22809edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
22909edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph    } else {
23009edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_s = d3dtextureaddress_to_pipe_tex_wrap(ss[D3DSAMP_ADDRESSU]);
23109edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_t = d3dtextureaddress_to_pipe_tex_wrap(ss[D3DSAMP_ADDRESSV]);
23209edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph        samp.wrap_r = d3dtextureaddress_to_pipe_tex_wrap(ss[D3DSAMP_ADDRESSW]);
23309edc0555f91d76001b1ffc0e656b0614abb809aPatrick Rudolph    }
234e85ef7d8e501b3f0a94d8e53fbd3372ba24b89ecAxel Davy    samp.min_img_filter = (ss[D3DSAMP_MINFILTER] == D3DTEXF_POINT && !ss[NINED3DSAMP_SHADOW]) ? PIPE_TEX_FILTER_NEAREST : PIPE_TEX_FILTER_LINEAR;
235e85ef7d8e501b3f0a94d8e53fbd3372ba24b89ecAxel Davy    samp.mag_img_filter = (ss[D3DSAMP_MAGFILTER] == D3DTEXF_POINT && !ss[NINED3DSAMP_SHADOW]) ? PIPE_TEX_FILTER_NEAREST : PIPE_TEX_FILTER_LINEAR;
236fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (ss[D3DSAMP_MINFILTER] == D3DTEXF_ANISOTROPIC ||
237fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        ss[D3DSAMP_MAGFILTER] == D3DTEXF_ANISOTROPIC)
238fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        samp.max_anisotropy = ss[D3DSAMP_MAXANISOTROPY];
239fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    samp.compare_mode = ss[NINED3DSAMP_SHADOW] ? PIPE_TEX_COMPARE_R_TO_TEXTURE : PIPE_TEX_COMPARE_NONE;
240fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    samp.compare_func = PIPE_FUNC_LEQUAL;
241fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    samp.normalized_coords = 1;
2429ff0dc31296fe8b40689948101ba2eb6e56a3755Axel Davy    samp.seamless_cube_map = 0;
243fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    d3dcolor_to_pipe_color_union(&samp.border_color, ss[D3DSAMP_BORDERCOLOR]);
244fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
245fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    /* see nine_state.h */
246fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    if (idx < NINE_MAX_SAMPLERS_PS)
247fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        cso_single_sampler(ctx, PIPE_SHADER_FRAGMENT, idx - NINE_SAMPLER_PS(0), &samp);
248fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt    else
249fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt        cso_single_sampler(ctx, PIPE_SHADER_VERTEX, idx - NINE_SAMPLER_VS(0), &samp);
250fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt}
251fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
252fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtconst enum pipe_format nine_d3d9_to_pipe_format_map[120] =
253fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
254f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_UNKNOWN]       = PIPE_FORMAT_NONE,
255eeeab8d6b48ff83c0f42480fcd43031c34bda33fPatrick Rudolph   [D3DFMT_R8G8B8]        = PIPE_FORMAT_R8G8B8_UNORM,
256f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A8R8G8B8]      = PIPE_FORMAT_B8G8R8A8_UNORM,
257f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_X8R8G8B8]      = PIPE_FORMAT_B8G8R8X8_UNORM,
258f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_R5G6B5]        = PIPE_FORMAT_B5G6R5_UNORM,
259f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_X1R5G5B5]      = PIPE_FORMAT_B5G5R5X1_UNORM,
260f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A1R5G5B5]      = PIPE_FORMAT_B5G5R5A1_UNORM,
261f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A4R4G4B4]      = PIPE_FORMAT_B4G4R4A4_UNORM,
262f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_R3G3B2]        = PIPE_FORMAT_B2G3R3_UNORM,
263f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A8]            = PIPE_FORMAT_A8_UNORM,
26427e438e35630819914bd42c5aa27fe6e53ebe491Axel Davy   [D3DFMT_A8R3G3B2]      = PIPE_FORMAT_NONE,
265f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_X4R4G4B4]      = PIPE_FORMAT_B4G4R4X4_UNORM,
266f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A2B10G10R10]   = PIPE_FORMAT_R10G10B10A2_UNORM,
267f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A8B8G8R8]      = PIPE_FORMAT_R8G8B8A8_UNORM,
268f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_X8B8G8R8]      = PIPE_FORMAT_R8G8B8X8_UNORM,
269f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_G16R16]        = PIPE_FORMAT_R16G16_UNORM,
270f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A2R10G10B10]   = PIPE_FORMAT_B10G10R10A2_UNORM,
271f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A16B16G16R16]  = PIPE_FORMAT_R16G16B16A16_UNORM,
272f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A8P8]          = PIPE_FORMAT_NONE,
273f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_P8]            = PIPE_FORMAT_NONE,
274f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_L8]            = PIPE_FORMAT_L8_UNORM,
275f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A8L8]          = PIPE_FORMAT_L8A8_UNORM,
276f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A4L4]          = PIPE_FORMAT_L4A4_UNORM,
277f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_V8U8]          = PIPE_FORMAT_R8G8_SNORM,
27810e548c0c954d50a594728b228f8d59b76579956Axel Davy   [D3DFMT_L6V5U5]        = PIPE_FORMAT_NONE, /* Should be PIPE_FORMAT_R5SG5SB6U_NORM, but interpretation of the data differs a bit. */
27910e548c0c954d50a594728b228f8d59b76579956Axel Davy   [D3DFMT_X8L8V8U8]      = PIPE_FORMAT_R8SG8SB8UX8U_NORM,
280f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_Q8W8V8U8]      = PIPE_FORMAT_R8G8B8A8_SNORM,
281f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_V16U16]        = PIPE_FORMAT_R16G16_SNORM,
282f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A2W10V10U10]   = PIPE_FORMAT_R10SG10SB10SA2U_NORM,
283fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D16_LOCKABLE]  = PIPE_FORMAT_Z16_UNORM,
284fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D32]           = PIPE_FORMAT_Z32_UNORM,
285f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_D15S1]         = PIPE_FORMAT_Z24_UNORM_S8_UINT,
286fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D24S8]         = PIPE_FORMAT_S8_UINT_Z24_UNORM,
287fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D24X8]         = PIPE_FORMAT_X8Z24_UNORM,
288f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_D24X4S4]       = PIPE_FORMAT_Z24_UNORM_S8_UINT,
289fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D16]           = PIPE_FORMAT_Z16_UNORM,
290fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_D32F_LOCKABLE] = PIPE_FORMAT_Z32_FLOAT,
291f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_D24FS8]        = PIPE_FORMAT_Z32_FLOAT_S8X24_UINT,
292f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_D32_LOCKABLE]  = PIPE_FORMAT_NONE,
293f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_S8_LOCKABLE]   = PIPE_FORMAT_NONE,
294f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_L16]           = PIPE_FORMAT_L16_UNORM,
295f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_VERTEXDATA]    = PIPE_FORMAT_NONE,
296f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_INDEX16]       = PIPE_FORMAT_R16_UINT,
297f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_INDEX32]       = PIPE_FORMAT_R32_UINT,
298f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_Q16W16V16U16]  = PIPE_FORMAT_R16G16B16A16_SNORM,
299fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_R16F]          = PIPE_FORMAT_R16_FLOAT,
300fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_G16R16F]       = PIPE_FORMAT_R16G16_FLOAT,
301fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_A16B16G16R16F] = PIPE_FORMAT_R16G16B16A16_FLOAT,
302f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_R32F]          = PIPE_FORMAT_R32_FLOAT,
303f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_G32R32F]       = PIPE_FORMAT_R32G32_FLOAT,
304fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [D3DFMT_A32B32G32R32F] = PIPE_FORMAT_R32G32B32A32_FLOAT,
305f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_CxV8U8]        = PIPE_FORMAT_NONE,
306f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A1]            = PIPE_FORMAT_NONE,
307f8713b1bfd0099e262f1224bb5fb02ee42838d55Axel Davy   [D3DFMT_A2B10G10R10_XR_BIAS] = PIPE_FORMAT_NONE,
308fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt};
309fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
310fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholtconst D3DFORMAT nine_pipe_to_d3d9_format_map[PIPE_FORMAT_COUNT] =
311fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt{
312fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_NONE]               = D3DFMT_UNKNOWN,
313eeeab8d6b48ff83c0f42480fcd43031c34bda33fPatrick Rudolph   /* TODO: rename PIPE_FORMAT_R8G8B8_UNORM to PIPE_FORMAT_B8G8R8_UNORM */
314eeeab8d6b48ff83c0f42480fcd43031c34bda33fPatrick Rudolph   [PIPE_FORMAT_R8G8B8_UNORM]       = D3DFMT_R8G8B8,
315fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B8G8R8A8_UNORM]     = D3DFMT_A8R8G8B8,
316fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B8G8R8X8_UNORM]     = D3DFMT_X8R8G8B8,
317fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B5G6R5_UNORM]       = D3DFMT_R5G6B5,
318fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B5G5R5X1_UNORM]     = D3DFMT_X1R5G5B5,
319fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B5G5R5A1_UNORM]     = D3DFMT_A1R5G5B5,
320fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B4G4R4A4_UNORM]     = D3DFMT_A4R4G4B4,
321fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B2G3R3_UNORM]       = D3DFMT_R3G3B2,
322fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_A8_UNORM]           = D3DFMT_A8,
323fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_B2G3R3A8_UNORM]     = D3DFMT_A8R3G3B2, */
324fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B4G4R4X4_UNORM]     = D3DFMT_X4R4G4B4,
325fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R10G10B10A2_UNORM]  = D3DFMT_A2B10G10R10,
326fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8G8B8A8_UNORM]     = D3DFMT_A8B8G8R8,
327fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8G8B8X8_UNORM]     = D3DFMT_X8B8G8R8,
328fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16_UNORM]       = D3DFMT_G16R16,
329fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_B10G10R10A2_UNORM]  = D3DFMT_A2R10G10B10,
330fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16B16A16_UNORM] = D3DFMT_A16B16G16R16,
331fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
332fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8_UINT]            = D3DFMT_P8,
333fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8A8_UINT]          = D3DFMT_A8P8,
334fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
335fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_L8_UNORM]           = D3DFMT_L8,
336fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_L8A8_UNORM]         = D3DFMT_A8L8,
337fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_L4A4_UNORM]         = D3DFMT_A4L4,
338fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
339fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8G8_SNORM]           = D3DFMT_V8U8,
340fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_?]                    = D3DFMT_L6V5U5, */
341fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_?]                    = D3DFMT_X8L8V8U8, */
342fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8G8B8A8_SNORM]       = D3DFMT_Q8W8V8U8,
343fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16_SNORM]         = D3DFMT_V16U16,
344fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R10SG10SB10SA2U_NORM] = D3DFMT_A2W10V10U10,
345fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
346fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_YUYV]               = D3DFMT_UYVY,
347fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_YUY2]               = D3DFMT_YUY2, */
348fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_DXT1_RGBA]          = D3DFMT_DXT1,
349fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_DXT2_RGBA]          = D3DFMT_DXT2, */
350fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_DXT3_RGBA]          = D3DFMT_DXT3,
351fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_DXT4_RGBA]          = D3DFMT_DXT4, */
352fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_DXT5_RGBA]          = D3DFMT_DXT5,
353fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_?]                  = D3DFMT_MULTI2_ARGB8, (MET) */
354fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R8G8_B8G8_UNORM]    = D3DFMT_R8G8_B8G8, /* XXX: order */
355fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_G8R8_G8B8_UNORM]    = D3DFMT_G8R8_G8B8,
356fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
357fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_Z16_UNORM]          = D3DFMT_D16_LOCKABLE,
358fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_Z32_UNORM]          = D3DFMT_D32,
359fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_Z15_UNORM_S1_UINT]  = D3DFMT_D15S1, */
360fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_S8_UINT_Z24_UNORM]  = D3DFMT_D24S8,
361fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_X8Z24_UNORM]        = D3DFMT_D24X8,
362fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_L16_UNORM]          = D3DFMT_L16,
363fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_Z32_FLOAT]          = D3DFMT_D32F_LOCKABLE,
364fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_Z24_FLOAT_S8_UINT]  = D3DFMT_D24FS8, */
365fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
366fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16_UINT]           = D3DFMT_INDEX16,
367fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R32_UINT]           = D3DFMT_INDEX32,
368fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16B16A16_SNORM] = D3DFMT_Q16W16V16U16,
369fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
370fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16_FLOAT]          = D3DFMT_R16F,
371fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R32_FLOAT]          = D3DFMT_R32F,
372fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16_FLOAT]       = D3DFMT_G16R16F,
373fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R32G32_FLOAT]       = D3DFMT_G32R32F,
374fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R16G16B16A16_FLOAT] = D3DFMT_A16B16G16R16F,
375fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt   [PIPE_FORMAT_R32G32B32A32_FLOAT] = D3DFMT_A32B32G32R32F,
376fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt
377fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt/* [PIPE_FORMAT_?]                  = D3DFMT_CxV8U8, */
378fdd96578ef2dfe9c4ad5aab5858036298d444a64Joakim Sindholt};
379