MCPcopy Create free account
hub / github.com/baldurk/renderdoc / QueryModifyingEvents

Function QueryModifyingEvents

renderdoc/driver/gl/gl_pixelhistory.cpp:890–1000  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

888}
889
890rdcarray<EventUsage> QueryModifyingEvents(WrappedOpenGL *driver, GLPixelHistoryResources &resources,
891 const rdcarray<EventUsage> &events, int x, int y,
892 int mipLevel, rdcarray<PixelModification> &history)
893{
894 GLMarkerRegion region("QueryModifyingEvents");
895 rdcarray<EventUsage> modEvents;
896 rdcarray<GLuint> occlusionQueries;
897 std::set<uint32_t> ignoredEvents;
898 occlusionQueries.resize(events.size());
899 driver->glGenQueries((GLsizei)occlusionQueries.size(), occlusionQueries.data());
900
901 driver->ReplayLog(0, events[0].eventId, eReplay_WithoutDraw);
902 // execute the occlusion queries
903 for(size_t i = 0; i < events.size(); i++)
904 {
905 uint32_t colIdx = getFramebufferColIndex(driver, resources.target);
906
907 bool ignored = false;
908 int objectType;
909 driver->glGetFramebufferAttachmentParameteriv(
910 eGL_DRAW_FRAMEBUFFER, GLenum(eGL_COLOR_ATTACHMENT0 + colIdx),
911 eGL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &objectType);
912 // Ignore the event if the framebuffer is attached to a different mip level than the one we're
913 // interested in
914 if(objectType == eGL_TEXTURE && events[i].usage != ResourceUsage::Clear &&
915 !isDirectWrite(events[i].usage))
916 {
917 int attachedMipLevel;
918 driver->glGetFramebufferAttachmentParameteriv(
919 eGL_DRAW_FRAMEBUFFER, GLenum(eGL_COLOR_ATTACHMENT0 + colIdx),
920 eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &attachedMipLevel);
921 if(mipLevel != attachedMipLevel)
922 {
923 ignoredEvents.insert(events[i].eventId);
924 ignored = true;
925 }
926 }
927 if(!ignored && !(events[i].usage == ResourceUsage::Clear || isDirectWrite(events[i].usage)))
928 {
929 GLRenderState state;
930 state.FetchState(driver);
931
932 GLint currentProgram = 0;
933 driver->glGetIntegerv(eGL_CURRENT_PROGRAM, &currentProgram);
934
935 if(!IsGLES)
936 driver->glEnable(eGL_DEPTH_CLAMP);
937 if(HasExt[EXT_depth_bounds_test])
938 driver->glDisable(eGL_DEPTH_BOUNDS_TEST_EXT);
939 driver->glDisable(eGL_DEPTH_TEST);
940 driver->glDisable(eGL_STENCIL_TEST);
941 driver->glDisable(eGL_CULL_FACE);
942 driver->glDisable(eGL_SAMPLE_MASK);
943 driver->glEnable(eGL_SCISSOR_TEST);
944 driver->glScissor(x, y, 1, 1);
945 driver->glUseProgram(GetFixedColProgram(driver, driver->GetReplay(), resources, currentProgram));
946
947 driver->SetFetchCounters(true);

Callers 1

PixelHistoryMethod · 0.85

Calls 15

getFramebufferColIndexFunction · 0.85
isDirectWriteFunction · 0.85
GetFixedColProgramFunction · 0.85
FetchStateMethod · 0.80
SetFetchCountersMethod · 0.80
resizeMethod · 0.45
sizeMethod · 0.45
glGenQueriesMethod · 0.45
dataMethod · 0.45
ReplayLogMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected