| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 30 */ | 30 */ |
| 31 | 31 |
| 32 | 32 |
| 33 // This file contains the implementation of the state-related GAPID3D9 | 33 // This file contains the implementation of the state-related GAPID3D9 |
| 34 // functions. | 34 // functions. |
| 35 | 35 |
| 36 #include <algorithm> | 36 #include <algorithm> |
| 37 #include "command_buffer/common/cross/cmd_buffer_format.h" | 37 #include "command_buffer/common/cross/o3d_cmd_format.h" |
| 38 #include "command_buffer/service/win/d3d9/gapi_d3d9.h" | 38 #include "command_buffer/service/win/d3d9/gapi_d3d9.h" |
| 39 | 39 |
| 40 namespace o3d { | 40 namespace o3d { |
| 41 namespace command_buffer { | 41 namespace command_buffer { |
| 42 namespace o3d { |
| 42 | 43 |
| 43 namespace { | 44 namespace { |
| 44 | 45 |
| 45 // Checks that a command_buffer enum matches a D3D enum so that it can be | 46 // Checks that a command_buffer enum matches a D3D enum so that it can be |
| 46 // converted quickly. | 47 // converted quickly. |
| 47 #define CHECK_CB_ENUM_MATCHES_D3D(CB_ENUM, D3D_ENUM) \ | 48 #define CHECK_CB_ENUM_MATCHES_D3D(CB_ENUM, D3D_ENUM) \ |
| 48 COMPILE_ASSERT(command_buffer::CB_ENUM + 1 == D3D_ENUM, \ | 49 COMPILE_ASSERT(CB_ENUM + 1 == D3D_ENUM, \ |
| 49 CB_ENUM ## _plus_1_not_ ## D3D_ENUM) | 50 CB_ENUM ## _plus_1_not_ ## D3D_ENUM) |
| 50 | 51 |
| 51 // Converts values from the PolygonMode enum to corresponding D3D values | 52 // Converts values from the PolygonMode enum to corresponding D3D values |
| 52 inline D3DFILLMODE PolygonModeToD3D(command_buffer::PolygonMode fill_mode) { | 53 inline D3DFILLMODE PolygonModeToD3D(PolygonMode fill_mode) { |
| 53 DCHECK_LT(fill_mode, command_buffer::kNumPolygonMode); | 54 DCHECK_LT(fill_mode, kNumPolygonMode); |
| 54 | 55 |
| 55 // Check that all acceptable values translate to D3D values by adding 1. | 56 // Check that all acceptable values translate to D3D values by adding 1. |
| 56 | 57 |
| 57 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModePoints, D3DFILL_POINT); | 58 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModePoints, D3DFILL_POINT); |
| 58 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeLines, D3DFILL_WIREFRAME); | 59 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeLines, D3DFILL_WIREFRAME); |
| 59 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeFill, D3DFILL_SOLID); | 60 CHECK_CB_ENUM_MATCHES_D3D(kPolygonModeFill, D3DFILL_SOLID); |
| 60 return static_cast<D3DFILLMODE>(fill_mode + 1); | 61 return static_cast<D3DFILLMODE>(fill_mode + 1); |
| 61 } | 62 } |
| 62 | 63 |
| 63 // Converts values from the FaceCullMode enum to corresponding D3D values | 64 // Converts values from the FaceCullMode enum to corresponding D3D values |
| 64 inline D3DCULL FaceCullModeToD3D(command_buffer::FaceCullMode cull_mode) { | 65 inline D3DCULL FaceCullModeToD3D(FaceCullMode cull_mode) { |
| 65 DCHECK_LT(cull_mode, command_buffer::kNumFaceCullMode); | 66 DCHECK_LT(cull_mode, kNumFaceCullMode); |
| 66 | 67 |
| 67 // Check that all acceptable values translate to D3D values by adding 1. | 68 // Check that all acceptable values translate to D3D values by adding 1. |
| 68 CHECK_CB_ENUM_MATCHES_D3D(kCullNone, D3DCULL_NONE); | 69 CHECK_CB_ENUM_MATCHES_D3D(kCullNone, D3DCULL_NONE); |
| 69 CHECK_CB_ENUM_MATCHES_D3D(kCullCW, D3DCULL_CW); | 70 CHECK_CB_ENUM_MATCHES_D3D(kCullCW, D3DCULL_CW); |
| 70 CHECK_CB_ENUM_MATCHES_D3D(kCullCCW, D3DCULL_CCW); | 71 CHECK_CB_ENUM_MATCHES_D3D(kCullCCW, D3DCULL_CCW); |
| 71 return static_cast<D3DCULL>(cull_mode + 1); | 72 return static_cast<D3DCULL>(cull_mode + 1); |
| 72 } | 73 } |
| 73 | 74 |
| 74 // Converts values from the Comparison enum to corresponding D3D values | 75 // Converts values from the Comparison enum to corresponding D3D values |
| 75 inline D3DCMPFUNC ComparisonToD3D(command_buffer::Comparison comp) { | 76 inline D3DCMPFUNC ComparisonToD3D(Comparison comp) { |
| 76 DCHECK_LT(comp, command_buffer::kNumComparison); | 77 DCHECK_LT(comp, kNumComparison); |
| 77 | 78 |
| 78 // Check that all acceptable values translate to D3D values by adding 1. | 79 // Check that all acceptable values translate to D3D values by adding 1. |
| 79 CHECK_CB_ENUM_MATCHES_D3D(kNever, D3DCMP_NEVER); | 80 CHECK_CB_ENUM_MATCHES_D3D(kNever, D3DCMP_NEVER); |
| 80 CHECK_CB_ENUM_MATCHES_D3D(kLess, D3DCMP_LESS); | 81 CHECK_CB_ENUM_MATCHES_D3D(kLess, D3DCMP_LESS); |
| 81 CHECK_CB_ENUM_MATCHES_D3D(kEqual, D3DCMP_EQUAL); | 82 CHECK_CB_ENUM_MATCHES_D3D(kEqual, D3DCMP_EQUAL); |
| 82 CHECK_CB_ENUM_MATCHES_D3D(kLEqual, D3DCMP_LESSEQUAL); | 83 CHECK_CB_ENUM_MATCHES_D3D(kLEqual, D3DCMP_LESSEQUAL); |
| 83 CHECK_CB_ENUM_MATCHES_D3D(kGreater, D3DCMP_GREATER); | 84 CHECK_CB_ENUM_MATCHES_D3D(kGreater, D3DCMP_GREATER); |
| 84 CHECK_CB_ENUM_MATCHES_D3D(kNotEqual, D3DCMP_NOTEQUAL); | 85 CHECK_CB_ENUM_MATCHES_D3D(kNotEqual, D3DCMP_NOTEQUAL); |
| 85 CHECK_CB_ENUM_MATCHES_D3D(kGEqual, D3DCMP_GREATEREQUAL); | 86 CHECK_CB_ENUM_MATCHES_D3D(kGEqual, D3DCMP_GREATEREQUAL); |
| 86 CHECK_CB_ENUM_MATCHES_D3D(kAlways, D3DCMP_ALWAYS); | 87 CHECK_CB_ENUM_MATCHES_D3D(kAlways, D3DCMP_ALWAYS); |
| 87 return static_cast<D3DCMPFUNC>(comp + 1); | 88 return static_cast<D3DCMPFUNC>(comp + 1); |
| 88 } | 89 } |
| 89 | 90 |
| 90 // Converts values from the StencilOp enum to corresponding D3D values | 91 // Converts values from the StencilOp enum to corresponding D3D values |
| 91 inline D3DSTENCILOP StencilOpToD3D(command_buffer::StencilOp stencil_op) { | 92 inline D3DSTENCILOP StencilOpToD3D(StencilOp stencil_op) { |
| 92 DCHECK_LT(stencil_op, command_buffer::kNumStencilOp); | 93 DCHECK_LT(stencil_op, kNumStencilOp); |
| 93 | 94 |
| 94 // Check that all acceptable values translate to D3D values by adding 1. | 95 // Check that all acceptable values translate to D3D values by adding 1. |
| 95 CHECK_CB_ENUM_MATCHES_D3D(kKeep, D3DSTENCILOP_KEEP); | 96 CHECK_CB_ENUM_MATCHES_D3D(kKeep, D3DSTENCILOP_KEEP); |
| 96 CHECK_CB_ENUM_MATCHES_D3D(kZero, D3DSTENCILOP_ZERO); | 97 CHECK_CB_ENUM_MATCHES_D3D(kZero, D3DSTENCILOP_ZERO); |
| 97 CHECK_CB_ENUM_MATCHES_D3D(kReplace, D3DSTENCILOP_REPLACE); | 98 CHECK_CB_ENUM_MATCHES_D3D(kReplace, D3DSTENCILOP_REPLACE); |
| 98 CHECK_CB_ENUM_MATCHES_D3D(kIncNoWrap, D3DSTENCILOP_INCRSAT); | 99 CHECK_CB_ENUM_MATCHES_D3D(kIncNoWrap, D3DSTENCILOP_INCRSAT); |
| 99 CHECK_CB_ENUM_MATCHES_D3D(kDecNoWrap, D3DSTENCILOP_DECRSAT); | 100 CHECK_CB_ENUM_MATCHES_D3D(kDecNoWrap, D3DSTENCILOP_DECRSAT); |
| 100 CHECK_CB_ENUM_MATCHES_D3D(kInvert, D3DSTENCILOP_INVERT); | 101 CHECK_CB_ENUM_MATCHES_D3D(kInvert, D3DSTENCILOP_INVERT); |
| 101 CHECK_CB_ENUM_MATCHES_D3D(kIncWrap, D3DSTENCILOP_INCR); | 102 CHECK_CB_ENUM_MATCHES_D3D(kIncWrap, D3DSTENCILOP_INCR); |
| 102 CHECK_CB_ENUM_MATCHES_D3D(kDecWrap, D3DSTENCILOP_DECR); | 103 CHECK_CB_ENUM_MATCHES_D3D(kDecWrap, D3DSTENCILOP_DECR); |
| 103 return static_cast<D3DSTENCILOP>(stencil_op + 1); | 104 return static_cast<D3DSTENCILOP>(stencil_op + 1); |
| 104 } | 105 } |
| 105 | 106 |
| 106 // Converts values from the BlendEq enum to corresponding D3D values | 107 // Converts values from the BlendEq enum to corresponding D3D values |
| 107 inline D3DBLENDOP BlendEqToD3D(command_buffer::BlendEq blend_eq) { | 108 inline D3DBLENDOP BlendEqToD3D(BlendEq blend_eq) { |
| 108 DCHECK_LT(blend_eq, command_buffer::kNumBlendEq); | 109 DCHECK_LT(blend_eq, kNumBlendEq); |
| 109 // Check that all acceptable values translate to D3D values by adding 1. | 110 // Check that all acceptable values translate to D3D values by adding 1. |
| 110 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqAdd, D3DBLENDOP_ADD); | 111 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqAdd, D3DBLENDOP_ADD); |
| 111 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqSub, D3DBLENDOP_SUBTRACT); | 112 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqSub, D3DBLENDOP_SUBTRACT); |
| 112 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqRevSub, D3DBLENDOP_REVSUBTRACT); | 113 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqRevSub, D3DBLENDOP_REVSUBTRACT); |
| 113 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMin, D3DBLENDOP_MIN); | 114 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMin, D3DBLENDOP_MIN); |
| 114 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMax, D3DBLENDOP_MAX); | 115 CHECK_CB_ENUM_MATCHES_D3D(kBlendEqMax, D3DBLENDOP_MAX); |
| 115 return static_cast<D3DBLENDOP>(blend_eq + 1); | 116 return static_cast<D3DBLENDOP>(blend_eq + 1); |
| 116 } | 117 } |
| 117 | 118 |
| 118 // Converts values from the BlendFunc enum to corresponding D3D values | 119 // Converts values from the BlendFunc enum to corresponding D3D values |
| 119 D3DBLEND BlendFuncToD3D(command_buffer::BlendFunc blend_func) { | 120 D3DBLEND BlendFuncToD3D(BlendFunc blend_func) { |
| 120 // The D3DBLEND enum values don't map 1-to-1 to BlendFunc, so we use a switch | 121 // The D3DBLEND enum values don't map 1-to-1 to BlendFunc, so we use a switch |
| 121 // here. | 122 // here. |
| 122 switch (blend_func) { | 123 switch (blend_func) { |
| 123 case command_buffer::kBlendFuncZero: | 124 case kBlendFuncZero: |
| 124 return D3DBLEND_ZERO; | 125 return D3DBLEND_ZERO; |
| 125 case command_buffer::kBlendFuncOne: | 126 case kBlendFuncOne: |
| 126 return D3DBLEND_ONE; | 127 return D3DBLEND_ONE; |
| 127 case command_buffer::kBlendFuncSrcColor: | 128 case kBlendFuncSrcColor: |
| 128 return D3DBLEND_SRCCOLOR; | 129 return D3DBLEND_SRCCOLOR; |
| 129 case command_buffer::kBlendFuncInvSrcColor: | 130 case kBlendFuncInvSrcColor: |
| 130 return D3DBLEND_INVSRCCOLOR; | 131 return D3DBLEND_INVSRCCOLOR; |
| 131 case command_buffer::kBlendFuncSrcAlpha: | 132 case kBlendFuncSrcAlpha: |
| 132 return D3DBLEND_SRCALPHA; | 133 return D3DBLEND_SRCALPHA; |
| 133 case command_buffer::kBlendFuncInvSrcAlpha: | 134 case kBlendFuncInvSrcAlpha: |
| 134 return D3DBLEND_INVSRCALPHA; | 135 return D3DBLEND_INVSRCALPHA; |
| 135 case command_buffer::kBlendFuncDstAlpha: | 136 case kBlendFuncDstAlpha: |
| 136 return D3DBLEND_DESTALPHA; | 137 return D3DBLEND_DESTALPHA; |
| 137 case command_buffer::kBlendFuncInvDstAlpha: | 138 case kBlendFuncInvDstAlpha: |
| 138 return D3DBLEND_INVDESTALPHA; | 139 return D3DBLEND_INVDESTALPHA; |
| 139 case command_buffer::kBlendFuncDstColor: | 140 case kBlendFuncDstColor: |
| 140 return D3DBLEND_DESTCOLOR; | 141 return D3DBLEND_DESTCOLOR; |
| 141 case command_buffer::kBlendFuncInvDstColor: | 142 case kBlendFuncInvDstColor: |
| 142 return D3DBLEND_INVDESTCOLOR; | 143 return D3DBLEND_INVDESTCOLOR; |
| 143 case command_buffer::kBlendFuncSrcAlphaSaturate: | 144 case kBlendFuncSrcAlphaSaturate: |
| 144 return D3DBLEND_SRCALPHASAT; | 145 return D3DBLEND_SRCALPHASAT; |
| 145 case command_buffer::kBlendFuncBlendColor: | 146 case kBlendFuncBlendColor: |
| 146 return D3DBLEND_BLENDFACTOR; | 147 return D3DBLEND_BLENDFACTOR; |
| 147 case command_buffer::kBlendFuncInvBlendColor: | 148 case kBlendFuncInvBlendColor: |
| 148 return D3DBLEND_INVBLENDFACTOR; | 149 return D3DBLEND_INVBLENDFACTOR; |
| 149 default: | 150 default: |
| 150 DLOG(FATAL) << "Invalid BlendFunc"; | 151 DLOG(FATAL) << "Invalid BlendFunc"; |
| 151 return D3DBLEND_ZERO; | 152 return D3DBLEND_ZERO; |
| 152 } | 153 } |
| 153 } | 154 } |
| 154 | 155 |
| 155 // Decodes stencil test function and operations from the bitfield. | 156 // Decodes stencil test function and operations from the bitfield. |
| 156 void DecodeStencilFuncOps(Uint32 params, | 157 void DecodeStencilFuncOps(Uint32 params, |
| 157 command_buffer::Comparison *func, | 158 Comparison *func, |
| 158 command_buffer::StencilOp *pass, | 159 StencilOp *pass, |
| 159 command_buffer::StencilOp *fail, | 160 StencilOp *fail, |
| 160 command_buffer::StencilOp *zfail) { | 161 StencilOp *zfail) { |
| 161 // Sanity check. The value has already been tested in | 162 // Sanity check. The value has already been tested in |
| 162 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc. | 163 // GAPIDecoder::DecodeSetStencilTest in gapi_decoder.cc. |
| 163 DCHECK_EQ(cmd::SetStencilTest::Unused1::Get(params), 0); | 164 DCHECK_EQ(SetStencilTest::Unused1::Get(params), 0); |
| 164 // Check that the bitmask get cannot generate values outside of the allowed | 165 // Check that the bitmask get cannot generate values outside of the allowed |
| 165 // range. | 166 // range. |
| 166 COMPILE_ASSERT(cmd::SetStencilTest::CWFunc::kMask < | 167 COMPILE_ASSERT(SetStencilTest::CWFunc::kMask < |
| 167 command_buffer::kNumComparison, | 168 kNumComparison, |
| 168 set_stencil_test_CWFunc_may_produce_invalid_values); | 169 set_stencil_test_CWFunc_may_produce_invalid_values); |
| 169 *func = static_cast<command_buffer::Comparison>( | 170 *func = static_cast<Comparison>(SetStencilTest::CWFunc::Get(params)); |
| 170 cmd::SetStencilTest::CWFunc::Get(params)); | |
| 171 | 171 |
| 172 COMPILE_ASSERT(cmd::SetStencilTest::CWPassOp::kMask < | 172 COMPILE_ASSERT(SetStencilTest::CWPassOp::kMask < |
| 173 command_buffer::kNumStencilOp, | 173 kNumStencilOp, |
| 174 set_stencil_test_CWPassOp_may_produce_invalid_values); | 174 set_stencil_test_CWPassOp_may_produce_invalid_values); |
| 175 *pass = static_cast<command_buffer::StencilOp>( | 175 *pass = static_cast<StencilOp>(SetStencilTest::CWPassOp::Get(params)); |
| 176 cmd::SetStencilTest::CWPassOp::Get(params)); | |
| 177 | 176 |
| 178 COMPILE_ASSERT(cmd::SetStencilTest::CWFailOp::kMask < | 177 COMPILE_ASSERT(SetStencilTest::CWFailOp::kMask < |
| 179 command_buffer::kNumStencilOp, | 178 kNumStencilOp, |
| 180 set_stencil_test_CWFailOp_may_produce_invalid_values); | 179 set_stencil_test_CWFailOp_may_produce_invalid_values); |
| 181 *fail = static_cast<command_buffer::StencilOp>( | 180 *fail = static_cast<StencilOp>(SetStencilTest::CWFailOp::Get(params)); |
| 182 cmd::SetStencilTest::CWFailOp::Get(params)); | |
| 183 | 181 |
| 184 COMPILE_ASSERT(cmd::SetStencilTest::CWZFailOp::kMask < | 182 COMPILE_ASSERT(SetStencilTest::CWZFailOp::kMask < |
| 185 command_buffer::kNumStencilOp, | 183 kNumStencilOp, |
| 186 set_stencil_test_CWZFailOp_may_produce_invalid_values); | 184 set_stencil_test_CWZFailOp_may_produce_invalid_values); |
| 187 *zfail = static_cast<command_buffer::StencilOp>( | 185 *zfail = static_cast<StencilOp>(SetStencilTest::CWZFailOp::Get(params)); |
| 188 cmd::SetStencilTest::CWZFailOp::Get(params)); | |
| 189 } | 186 } |
| 190 | 187 |
| 191 } // anonymous namespace | 188 } // anonymous namespace |
| 192 | 189 |
| 193 void GAPID3D9::SetScissor(bool enable, | 190 void GAPID3D9::SetScissor(bool enable, |
| 194 unsigned int x, | 191 unsigned int x, |
| 195 unsigned int y, | 192 unsigned int y, |
| 196 unsigned int width, | 193 unsigned int width, |
| 197 unsigned int height) { | 194 unsigned int height) { |
| 198 HR(d3d_device_->SetRenderState(D3DRS_SCISSORTESTENABLE, | 195 HR(d3d_device_->SetRenderState(D3DRS_SCISSORTESTENABLE, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 StencilOpToD3D(fail))); | 270 StencilOpToD3D(fail))); |
| 274 HR(d3d_device_->SetRenderState(D3DRS_STENCILZFAIL, | 271 HR(d3d_device_->SetRenderState(D3DRS_STENCILZFAIL, |
| 275 StencilOpToD3D(zfail))); | 272 StencilOpToD3D(zfail))); |
| 276 | 273 |
| 277 if (separate_ccw) { | 274 if (separate_ccw) { |
| 278 HR(d3d_device_->SetRenderState(D3DRS_TWOSIDEDSTENCILMODE, TRUE)); | 275 HR(d3d_device_->SetRenderState(D3DRS_TWOSIDEDSTENCILMODE, TRUE)); |
| 279 // Check that the definition of the counter-clockwise func/ops match the | 276 // Check that the definition of the counter-clockwise func/ops match the |
| 280 // clockwise ones, just shifted by 16 bits, so that we can use | 277 // clockwise ones, just shifted by 16 bits, so that we can use |
| 281 // DecodeStencilFuncOps on both of them. | 278 // DecodeStencilFuncOps on both of them. |
| 282 #define CHECK_CCW_MATCHES_CW(FIELD) \ | 279 #define CHECK_CCW_MATCHES_CW(FIELD) \ |
| 283 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kLength == \ | 280 COMPILE_ASSERT(SetStencilTest::CW ## FIELD::kLength == \ |
| 284 cmd::SetStencilTest::CCW ## FIELD::kLength, \ | 281 SetStencilTest::CCW ## FIELD::kLength, \ |
| 285 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \ | 282 CCW ## FIELD ## _length_does_not_match_ ## CW ## FIELD); \ |
| 286 COMPILE_ASSERT(cmd::SetStencilTest::CW ## FIELD::kShift + 16 == \ | 283 COMPILE_ASSERT(SetStencilTest::CW ## FIELD::kShift + 16 == \ |
| 287 cmd::SetStencilTest::CCW ## FIELD::kShift, \ | 284 SetStencilTest::CCW ## FIELD::kShift, \ |
| 288 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD) | 285 CCW ## FIELD ## _shift_does_not_match_ ## CW ## FIELD) |
| 289 CHECK_CCW_MATCHES_CW(Func); | 286 CHECK_CCW_MATCHES_CW(Func); |
| 290 CHECK_CCW_MATCHES_CW(PassOp); | 287 CHECK_CCW_MATCHES_CW(PassOp); |
| 291 CHECK_CCW_MATCHES_CW(FailOp); | 288 CHECK_CCW_MATCHES_CW(FailOp); |
| 292 CHECK_CCW_MATCHES_CW(ZFailOp); | 289 CHECK_CCW_MATCHES_CW(ZFailOp); |
| 293 #undef CHECK_CCW_MATCHES_CW | 290 #undef CHECK_CCW_MATCHES_CW |
| 294 // Extract upper 16 bits. | 291 // Extract upper 16 bits. |
| 295 Uint32 ccw_func_ops = BitField<16, 16>::Get(func_ops); | 292 Uint32 ccw_func_ops = BitField<16, 16>::Get(func_ops); |
| 296 | 293 |
| 297 DecodeStencilFuncOps(ccw_func_ops, &func, &pass, &fail, &zfail); | 294 DecodeStencilFuncOps(ccw_func_ops, &func, &pass, &fail, &zfail); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 BlendFuncToD3D(alpha_dst_func))); | 342 BlendFuncToD3D(alpha_dst_func))); |
| 346 } else { | 343 } else { |
| 347 HR(d3d_device_->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, FALSE)); | 344 HR(d3d_device_->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, FALSE)); |
| 348 } | 345 } |
| 349 } | 346 } |
| 350 | 347 |
| 351 void GAPID3D9::SetBlendingColor(const RGBA &color) { | 348 void GAPID3D9::SetBlendingColor(const RGBA &color) { |
| 352 HR(d3d_device_->SetRenderState(D3DRS_BLENDFACTOR, RGBAToD3DCOLOR(color))); | 349 HR(d3d_device_->SetRenderState(D3DRS_BLENDFACTOR, RGBAToD3DCOLOR(color))); |
| 353 } | 350 } |
| 354 | 351 |
| 352 } // namespace o3d |
| 355 } // namespace command_buffer | 353 } // namespace command_buffer |
| 356 } // namespace o3d | 354 } // namespace o3d |
| OLD | NEW |