| 458 | } |
| 459 | |
| 460 | void WrappedOpenGL::CopyDepthArrayToTex2DMS(GLuint destMS, GLuint srcArray, GLint width, |
| 461 | GLint height, GLint arraySize, GLint samples, |
| 462 | GLenum intFormat, uint32_t selectedSlice) |
| 463 | { |
| 464 | GLMarkerRegion renderoverlay("CopyDepthArrayToTex2DMS"); |
| 465 | |
| 466 | bool singleSliceMode = (selectedSlice != ~0U); |
| 467 | |
| 468 | WrappedOpenGL &drv = *this; |
| 469 | |
| 470 | const ArrayMSPrograms &arrms = GetArrayMS(); |
| 471 | |
| 472 | GLRenderState rs; |
| 473 | rs.FetchState(this); |
| 474 | |
| 475 | GLuint vao = 0; |
| 476 | drv.glGenVertexArrays(1, &vao); |
| 477 | drv.glBindVertexArray(vao); |
| 478 | |
| 479 | GLuint texs[3]; |
| 480 | drv.glGenTextures(3, texs); |
| 481 | drv.glTextureView(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, destMS, intFormat, 0, 1, 0, arraySize); |
| 482 | drv.glTextureView(texs[1], eGL_TEXTURE_2D_ARRAY, srcArray, intFormat, 0, 1, 0, arraySize * samples); |
| 483 | drv.glTextureView(texs[2], eGL_TEXTURE_2D_ARRAY, srcArray, intFormat, 0, 1, 0, arraySize * samples); |
| 484 | drv.glTextureParameteriEXT(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, eGL_TEXTURE_BASE_LEVEL, 0); |
| 485 | drv.glTextureParameteriEXT(texs[0], eGL_TEXTURE_2D_MULTISAMPLE_ARRAY, eGL_TEXTURE_MAX_LEVEL, 0); |
| 486 | |
| 487 | GLuint fbo = 0; |
| 488 | drv.glGenFramebuffers(1, &fbo); |
| 489 | drv.glBindFramebuffer(eGL_FRAMEBUFFER, fbo); |
| 490 | drv.glDrawBuffers(0, NULL); |
| 491 | |
| 492 | drv.glUseProgram(arrms.DepthArray2MS); |
| 493 | drv.glViewport(0, 0, width, height); |
| 494 | |
| 495 | drv.glDisable(eGL_CULL_FACE); |
| 496 | drv.glDisable(eGL_BLEND); |
| 497 | drv.glDisable(eGL_SCISSOR_TEST); |
| 498 | if(!IsGLES) |
| 499 | drv.glPolygonMode(eGL_FRONT_AND_BACK, eGL_FILL); |
| 500 | drv.glEnable(eGL_DEPTH_TEST); |
| 501 | drv.glEnable(eGL_STENCIL_TEST); |
| 502 | drv.glDepthFunc(eGL_ALWAYS); |
| 503 | drv.glDepthMask(GL_TRUE); |
| 504 | drv.glEnable(eGL_SAMPLE_SHADING); |
| 505 | drv.glEnable(eGL_SAMPLE_MASK); |
| 506 | drv.glStencilOp(eGL_REPLACE, eGL_REPLACE, eGL_REPLACE); |
| 507 | drv.glStencilMask(0xff); |
| 508 | |
| 509 | uint32_t numStencil = 1; |
| 510 | GLenum attach = eGL_DEPTH_ATTACHMENT; |
| 511 | |
| 512 | switch(GetBaseFormat(intFormat)) |
| 513 | { |
| 514 | case eGL_DEPTH_STENCIL: |
| 515 | numStencil = 256; |
| 516 | attach = eGL_DEPTH_STENCIL_ATTACHMENT; |
| 517 | break; |
nothing calls this directly
no test coverage detected