| 1277 | } |
| 1278 | |
| 1279 | virtual bool QueueCalculateMathOp(rdcspv::GLSLstd450 op, |
| 1280 | const rdcarray<ShaderVariable> ¶ms) override |
| 1281 | { |
| 1282 | CHECK_DEVICE_THREAD(); |
| 1283 | RDCASSERT(params.size() <= 3, params.size()); |
| 1284 | |
| 1285 | RDCASSERTEQUAL(params[0].type, VarType::Float); |
| 1286 | |
| 1287 | GLMarkerRegion markerRegion("QueueCalculateMathOp"); |
| 1288 | |
| 1289 | m_pDriver->GetReplay()->UseReplayContext(); |
| 1290 | |
| 1291 | GLRenderState rs; |
| 1292 | rs.FetchState(m_pDriver); |
| 1293 | |
| 1294 | RDCCOMPILE_ASSERT(SPV_OpSin == (int)rdcspv::GLSLstd450::Sin, "Shader defines are mismatched"); |
| 1295 | RDCCOMPILE_ASSERT(SPV_OpCos == (int)rdcspv::GLSLstd450::Cos, "Shader defines are mismatched"); |
| 1296 | RDCCOMPILE_ASSERT(SPV_OpTan == (int)rdcspv::GLSLstd450::Tan, "Shader defines are mismatched"); |
| 1297 | RDCCOMPILE_ASSERT(SPV_OpAsin == (int)rdcspv::GLSLstd450::Asin, "Shader defines are mismatched"); |
| 1298 | RDCCOMPILE_ASSERT(SPV_OpAcos == (int)rdcspv::GLSLstd450::Acos, "Shader defines are mismatched"); |
| 1299 | RDCCOMPILE_ASSERT(SPV_OpAtan == (int)rdcspv::GLSLstd450::Atan, "Shader defines are mismatched"); |
| 1300 | RDCCOMPILE_ASSERT(SPV_OpSinh == (int)rdcspv::GLSLstd450::Sinh, "Shader defines are mismatched"); |
| 1301 | RDCCOMPILE_ASSERT(SPV_OpCosh == (int)rdcspv::GLSLstd450::Cosh, "Shader defines are mismatched"); |
| 1302 | RDCCOMPILE_ASSERT(SPV_OpTanh == (int)rdcspv::GLSLstd450::Tanh, "Shader defines are mismatched"); |
| 1303 | RDCCOMPILE_ASSERT(SPV_OpAsinh == (int)rdcspv::GLSLstd450::Asinh, |
| 1304 | "Shader defines are mismatched"); |
| 1305 | RDCCOMPILE_ASSERT(SPV_OpAcosh == (int)rdcspv::GLSLstd450::Acosh, |
| 1306 | "Shader defines are mismatched"); |
| 1307 | RDCCOMPILE_ASSERT(SPV_OpAtanh == (int)rdcspv::GLSLstd450::Atanh, |
| 1308 | "Shader defines are mismatched"); |
| 1309 | RDCCOMPILE_ASSERT(SPV_OpExp == (int)rdcspv::GLSLstd450::Exp, "Shader defines are mismatched"); |
| 1310 | RDCCOMPILE_ASSERT(SPV_OpLog == (int)rdcspv::GLSLstd450::Log, "Shader defines are mismatched"); |
| 1311 | RDCCOMPILE_ASSERT(SPV_OpExp2 == (int)rdcspv::GLSLstd450::Exp2, "Shader defines are mismatched"); |
| 1312 | RDCCOMPILE_ASSERT(SPV_OpLog2 == (int)rdcspv::GLSLstd450::Log2, "Shader defines are mismatched"); |
| 1313 | RDCCOMPILE_ASSERT(SPV_OpSqrt == (int)rdcspv::GLSLstd450::Sqrt, "Shader defines are mismatched"); |
| 1314 | RDCCOMPILE_ASSERT(SPV_OpInverseSqrt == (int)rdcspv::GLSLstd450::InverseSqrt, |
| 1315 | "Shader defines are mismatched"); |
| 1316 | RDCCOMPILE_ASSERT(SPV_OpNormalize == (int)rdcspv::GLSLstd450::Normalize, |
| 1317 | "Shader defines are mismatched"); |
| 1318 | RDCCOMPILE_ASSERT(SPV_OpAtan2 == (int)rdcspv::GLSLstd450::Atan2, |
| 1319 | "Shader defines are mismatched"); |
| 1320 | RDCCOMPILE_ASSERT(SPV_OpPow == (int)rdcspv::GLSLstd450::Pow, "Shader defines are mismatched"); |
| 1321 | RDCCOMPILE_ASSERT(SPV_OpFma == (int)rdcspv::GLSLstd450::Fma, "Shader defines are mismatched"); |
| 1322 | RDCCOMPILE_ASSERT(SPV_OpLength == (int)rdcspv::GLSLstd450::Length, |
| 1323 | "Shader defines are mismatched"); |
| 1324 | RDCCOMPILE_ASSERT(SPV_OpDistance == (int)rdcspv::GLSLstd450::Distance, |
| 1325 | "Shader defines are mismatched"); |
| 1326 | RDCCOMPILE_ASSERT(SPV_OpRefract == (int)rdcspv::GLSLstd450::Refract, |
| 1327 | "Shader defines are mismatched"); |
| 1328 | |
| 1329 | GLuint mathProg = m_pDriver->GetReplay()->GetShaderDebugMathProg(); |
| 1330 | |
| 1331 | GL.glUniform1i(GL.glGetUniformLocation(mathProg, "outputs"), 0); |
| 1332 | |
| 1333 | if(m_MathOffset >= m_MathBufferSize || m_MathBuffer == 0) |
| 1334 | { |
| 1335 | m_MathBufferSize = m_MathBufferSize * 2 + 1024 * mathOpResultByteSize; |
| 1336 |
no test coverage detected