Fetch layer and mip level for FBO attachments

This commit is contained in:
baldurk
2015-07-13 00:05:42 +02:00
parent 3304830086
commit 4a401460d3
4 changed files with 31 additions and 3 deletions
+2
View File
@@ -282,6 +282,8 @@ struct GLPipelineState
FBO() : Obj(), Depth(), Stencil() {}
ResourceId Obj;
rdctype::array<ResourceId> Color;
rdctype::array<uint32_t> Layer;
rdctype::array<uint32_t> Mip;
ResourceId Depth;
ResourceId Stencil;
+7 -3
View File
@@ -550,7 +550,7 @@ void Serialiser::Serialise(const char *name, GLPipelineState::Rasterizer &el)
Serialise("", el.Scissors);
Serialise("", el.m_State);
SIZE_CHECK(GLPipelineState::FrameBuffer, 128);
SIZE_CHECK(GLPipelineState::Rasterizer, 104);
}
template<>
@@ -625,6 +625,8 @@ void Serialiser::Serialise(const char *name, GLPipelineState::FrameBuffer &el)
Serialise("", el.m_DrawFBO.Obj);
Serialise("", el.m_DrawFBO.Color);
Serialise("", el.m_ReadFBO.Layer);
Serialise("", el.m_ReadFBO.Mip);
Serialise("", el.m_DrawFBO.Depth);
Serialise("", el.m_DrawFBO.Stencil);
Serialise("", el.m_DrawFBO.DrawBuffers);
@@ -632,6 +634,8 @@ void Serialiser::Serialise(const char *name, GLPipelineState::FrameBuffer &el)
Serialise("", el.m_ReadFBO.Obj);
Serialise("", el.m_ReadFBO.Color);
Serialise("", el.m_ReadFBO.Layer);
Serialise("", el.m_ReadFBO.Mip);
Serialise("", el.m_ReadFBO.Depth);
Serialise("", el.m_ReadFBO.Stencil);
Serialise("", el.m_ReadFBO.DrawBuffers);
@@ -639,7 +643,7 @@ void Serialiser::Serialise(const char *name, GLPipelineState::FrameBuffer &el)
Serialise("", el.m_Blending);
SIZE_CHECK(GLPipelineState::FrameBuffer, 128);
SIZE_CHECK(GLPipelineState::FrameBuffer, 160);
}
template<>
@@ -673,7 +677,7 @@ void Serialiser::Serialise(const char *name, GLPipelineState &el)
Serialise("", el.m_Hints);
SIZE_CHECK(GLPipelineState, 952);
SIZE_CHECK(GLPipelineState, 984);
}
#pragma endregion OpenGL pipeline state
+18
View File
@@ -1662,9 +1662,18 @@ void GLReplay::SavePipelineState()
pipe.m_FB.m_DrawFBO.Obj = rm->GetOriginalID(rm->GetID(FramebufferRes(ctx, curDrawFBO)));
create_array_uninit(pipe.m_FB.m_DrawFBO.Color, numCols);
create_array_uninit(pipe.m_FB.m_DrawFBO.Layer, numCols);
create_array_uninit(pipe.m_FB.m_DrawFBO.Mip, numCols);
for(GLint i=0; i < numCols; i++)
{
pipe.m_FB.m_DrawFBO.Color[i] = rm->GetOriginalID(rm->GetID(rbCol[i] ? RenderbufferRes(ctx, curCol[i]) : TextureRes(ctx, curCol[i])));
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, (GLint*)&pipe.m_FB.m_DrawFBO.Mip[i]);
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, (GLint*)&pipe.m_FB.m_DrawFBO.Layer[i]);
if(pipe.m_FB.m_DrawFBO.Layer[i] == 0)
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, (GLint*)&pipe.m_FB.m_DrawFBO.Layer[i]);
}
pipe.m_FB.m_DrawFBO.Depth = rm->GetOriginalID(rm->GetID(rbDepth ? RenderbufferRes(ctx, curDepth) : TextureRes(ctx, curDepth)));
pipe.m_FB.m_DrawFBO.Stencil = rm->GetOriginalID(rm->GetID(rbStencil ? RenderbufferRes(ctx, curStencil) : TextureRes(ctx, curStencil)));
@@ -1700,9 +1709,18 @@ void GLReplay::SavePipelineState()
pipe.m_FB.m_ReadFBO.Obj = rm->GetOriginalID(rm->GetID(FramebufferRes(ctx, curReadFBO)));
create_array_uninit(pipe.m_FB.m_ReadFBO.Color, numCols);
create_array_uninit(pipe.m_FB.m_ReadFBO.Layer, numCols);
create_array_uninit(pipe.m_FB.m_ReadFBO.Mip, numCols);
for(GLint i=0; i < numCols; i++)
{
pipe.m_FB.m_ReadFBO.Color[i] = rm->GetOriginalID(rm->GetID(rbCol[i] ? RenderbufferRes(ctx, curCol[i]) : TextureRes(ctx, curCol[i])));
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, (GLint*)&pipe.m_FB.m_ReadFBO.Mip[i]);
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, (GLint*)&pipe.m_FB.m_ReadFBO.Layer[i]);
if(pipe.m_FB.m_ReadFBO.Layer[i] == 0)
gl.glGetFramebufferAttachmentParameteriv(eGL_DRAW_FRAMEBUFFER, eGL_DEPTH_ATTACHMENT, eGL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, (GLint*)&pipe.m_FB.m_ReadFBO.Layer[i]);
}
pipe.m_FB.m_ReadFBO.Depth = rm->GetOriginalID(rm->GetID(rbDepth ? RenderbufferRes(ctx, curDepth) : TextureRes(ctx, curDepth)));
pipe.m_FB.m_ReadFBO.Stencil = rm->GetOriginalID(rm->GetID(rbStencil ? RenderbufferRes(ctx, curStencil) : TextureRes(ctx, curStencil)));
+4
View File
@@ -320,6 +320,10 @@ namespace renderdoc
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public ResourceId[] Color;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public UInt32[] Layer;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public UInt32[] Mip;
public ResourceId Depth;
public ResourceId Stencil;