mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-22 07:21:34 +00:00
Store index format and topology in drawcall, to accommodate GL
* D3D11 just latches the state from the input assembler state into the drawcall when it's being added. GL stores the state per-draw.
This commit is contained in:
@@ -30,7 +30,7 @@ struct D3D11PipelineState
|
||||
|
||||
struct InputAssembler
|
||||
{
|
||||
InputAssembler() : Bytecode(NULL), Topology(eTopology_Unknown) {}
|
||||
InputAssembler() : Bytecode(NULL) {}
|
||||
|
||||
struct LayoutInput
|
||||
{
|
||||
@@ -60,11 +60,8 @@ struct D3D11PipelineState
|
||||
{
|
||||
IndexBuffer() : Buffer(), Offset(0) {}
|
||||
ResourceId Buffer;
|
||||
ResourceFormat Format;
|
||||
uint32_t Offset;
|
||||
} ibuffer;
|
||||
|
||||
PrimitiveTopology Topology;
|
||||
} m_IA;
|
||||
|
||||
struct ShaderStage
|
||||
|
||||
@@ -166,6 +166,8 @@ struct FetchDrawcall
|
||||
indexOffset = 0;
|
||||
vertexOffset = 0;
|
||||
instanceOffset = 0;
|
||||
topology = eTopology_Unknown;
|
||||
indexByteWidth = 0;
|
||||
flags = 0;
|
||||
context = ResourceId();
|
||||
duration = -1.0f;
|
||||
@@ -187,6 +189,9 @@ struct FetchDrawcall
|
||||
uint32_t indexOffset;
|
||||
uint32_t vertexOffset;
|
||||
uint32_t instanceOffset;
|
||||
|
||||
uint32_t indexByteWidth;
|
||||
PrimitiveTopology topology;
|
||||
|
||||
ResourceId context;
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ struct GLPipelineState
|
||||
|
||||
struct VertexInput
|
||||
{
|
||||
VertexInput() : Topology(eTopology_Unknown) {}
|
||||
VertexInput() {}
|
||||
|
||||
struct VertexAttribute
|
||||
{
|
||||
@@ -53,15 +53,7 @@ struct GLPipelineState
|
||||
};
|
||||
rdctype::array<VertexBuffer> vbuffers;
|
||||
|
||||
struct IndexBuffer
|
||||
{
|
||||
IndexBuffer() : Buffer(), Offset(0) {}
|
||||
ResourceId Buffer;
|
||||
ResourceFormat Format;
|
||||
uint32_t Offset;
|
||||
} ibuffer;
|
||||
|
||||
PrimitiveTopology Topology;
|
||||
ResourceId ibuffer;
|
||||
} m_VtxIn;
|
||||
|
||||
struct ShaderStage
|
||||
|
||||
@@ -107,10 +107,8 @@ void Serialiser::Serialise(const char *name, D3D11PipelineState::InputAssembler:
|
||||
template<>
|
||||
void Serialiser::Serialise(const char *name, D3D11PipelineState::InputAssembler &el)
|
||||
{
|
||||
Serialise("", el.Topology);
|
||||
Serialise("", el.ibuffer.Buffer);
|
||||
Serialise("", el.ibuffer.Offset);
|
||||
Serialise("", el.ibuffer.Format);
|
||||
|
||||
Serialise("", el.vbuffers);
|
||||
Serialise("", el.layouts);
|
||||
@@ -290,21 +288,12 @@ void Serialiser::Serialise(const char *name, GLPipelineState::VertexInput::Verte
|
||||
Serialise("", el.Stride);
|
||||
}
|
||||
|
||||
template<>
|
||||
void Serialiser::Serialise(const char *name, GLPipelineState::VertexInput::IndexBuffer &el)
|
||||
{
|
||||
Serialise("", el.Buffer);
|
||||
Serialise("", el.Offset);
|
||||
Serialise("", el.Format);
|
||||
}
|
||||
|
||||
template<>
|
||||
void Serialiser::Serialise(const char *name, GLPipelineState::VertexInput &el)
|
||||
{
|
||||
Serialise("", el.attributes);
|
||||
Serialise("", el.ibuffer);
|
||||
Serialise("", el.vbuffers);
|
||||
Serialise("", el.Topology);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -507,6 +496,9 @@ void Serialiser::Serialise(const char *name, FetchDrawcall &el)
|
||||
Serialise("", el.vertexOffset);
|
||||
Serialise("", el.instanceOffset);
|
||||
|
||||
Serialise("", el.indexByteWidth);
|
||||
Serialise("", el.topology);
|
||||
|
||||
Serialise("", el.context);
|
||||
|
||||
Serialise("", el.duration);
|
||||
|
||||
@@ -1062,6 +1062,14 @@ void WrappedID3D11DeviceContext::AddDrawcall(FetchDrawcall d, bool hasEvents)
|
||||
draw.eventID = m_CurEventID;
|
||||
draw.drawcallID = m_CurDrawcallID;
|
||||
|
||||
draw.indexByteWidth = 0;
|
||||
if(m_CurrentPipelineState->IA.IndexFormat == DXGI_FORMAT_R16_UINT)
|
||||
draw.indexByteWidth = 2;
|
||||
if(m_CurrentPipelineState->IA.IndexFormat == DXGI_FORMAT_R32_UINT)
|
||||
draw.indexByteWidth = 4;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_CurrentPipelineState->IA.Topo);
|
||||
|
||||
for(int i=0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++)
|
||||
{
|
||||
draw.outputs[i] = ResourceId();
|
||||
|
||||
@@ -416,8 +416,6 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
/////////////////////////////////////////////////
|
||||
// Input Assembler
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
ret.m_IA.Topology = MakePrimitiveTopology(rs->IA.Topo);
|
||||
|
||||
D3D11ResourceManager *rm = m_pDevice->GetResourceManager();
|
||||
|
||||
@@ -458,7 +456,6 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
}
|
||||
|
||||
ret.m_IA.ibuffer.Buffer = rm->GetOriginalID(GetIDForResource(rs->IA.IndexBuffer));
|
||||
ret.m_IA.ibuffer.Format = MakeResourceFormat(rs->IA.IndexFormat);
|
||||
ret.m_IA.ibuffer.Offset = rs->IA.IndexOffset;
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
@@ -593,6 +593,31 @@ ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt)
|
||||
return ret;
|
||||
}
|
||||
|
||||
PrimitiveTopology MakePrimitiveTopology(const GLHookSet &gl, GLenum Topo)
|
||||
{
|
||||
switch(Topo)
|
||||
{
|
||||
default: return eTopology_Unknown;
|
||||
case eGL_POINTS: return eTopology_PointList;
|
||||
case eGL_LINE_STRIP: return eTopology_LineStrip;
|
||||
case eGL_LINE_LOOP: return eTopology_LineLoop;
|
||||
case eGL_LINES: return eTopology_LineList;
|
||||
case eGL_LINE_STRIP_ADJACENCY: return eTopology_LineStrip_Adj;
|
||||
case eGL_LINES_ADJACENCY: return eTopology_LineList_Adj;
|
||||
case eGL_TRIANGLE_STRIP: return eTopology_TriangleStrip;
|
||||
case eGL_TRIANGLE_FAN: return eTopology_TriangleFan;
|
||||
case eGL_TRIANGLES: return eTopology_TriangleList;
|
||||
case eGL_TRIANGLE_STRIP_ADJACENCY: return eTopology_TriangleStrip_Adj;
|
||||
case eGL_TRIANGLES_ADJACENCY: return eTopology_TriangleList_Adj;
|
||||
case eGL_PATCHES:
|
||||
{
|
||||
GLint patchCount = 3;
|
||||
gl.glGetIntegerv(eGL_PATCH_VERTICES, &patchCount);
|
||||
return PrimitiveTopology(eTopology_PatchList_1CPs+patchCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<const bool CopyUniforms, const bool SerialiseUniforms>
|
||||
static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint progSrc, GLuint progDst, map<GLint, GLint> *locTranslate, bool writing)
|
||||
{
|
||||
|
||||
@@ -86,6 +86,7 @@ GLenum ShaderEnum(size_t idx);
|
||||
|
||||
ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt);
|
||||
GLenum MakeGLFormat(WrappedOpenGL &gl, GLenum target, ResourceFormat fmt);
|
||||
PrimitiveTopology MakePrimitiveTopology(const GLHookSet &gl, GLenum Topo);
|
||||
|
||||
GLuint GetBoundVertexBuffer(const GLHookSet &gl, GLuint idx);
|
||||
|
||||
|
||||
@@ -674,10 +674,6 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
|
||||
m_ActiveConditional = false;
|
||||
m_ActiveFeedback = false;
|
||||
|
||||
m_LastIndexSize = eGL_NONE;
|
||||
m_LastIndexOffset = 0;
|
||||
m_LastDrawMode = eGL_NONE;
|
||||
|
||||
m_DisplayListRecord = NULL;
|
||||
|
||||
#if defined(RELEASE)
|
||||
|
||||
@@ -166,10 +166,6 @@ class WrappedOpenGL
|
||||
|
||||
list<DrawcallTreeNode *> m_DrawcallStack;
|
||||
|
||||
GLenum m_LastIndexSize;
|
||||
GLuint m_LastIndexOffset;
|
||||
GLenum m_LastDrawMode;
|
||||
|
||||
// buffer used
|
||||
vector<byte> m_ScratchBuf;
|
||||
|
||||
|
||||
@@ -837,35 +837,11 @@ void GLReplay::SavePipelineState()
|
||||
|
||||
// Index buffer
|
||||
|
||||
pipe.m_VtxIn.ibuffer.Offset = m_pDriver->m_LastIndexOffset;
|
||||
|
||||
pipe.m_VtxIn.ibuffer.Format = ResourceFormat();
|
||||
pipe.m_VtxIn.ibuffer.Format.special = false;
|
||||
pipe.m_VtxIn.ibuffer.Format.compCount = 1;
|
||||
pipe.m_VtxIn.ibuffer.Format.compType = eCompType_UInt;
|
||||
switch(m_pDriver->m_LastIndexSize)
|
||||
{
|
||||
default:
|
||||
break;
|
||||
case eGL_UNSIGNED_BYTE:
|
||||
pipe.m_VtxIn.ibuffer.Format.compByteWidth = 1;
|
||||
pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_BYTE";
|
||||
break;
|
||||
case eGL_UNSIGNED_SHORT:
|
||||
pipe.m_VtxIn.ibuffer.Format.compByteWidth = 2;
|
||||
pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_SHORT";
|
||||
break;
|
||||
case eGL_UNSIGNED_INT:
|
||||
pipe.m_VtxIn.ibuffer.Format.compByteWidth = 4;
|
||||
pipe.m_VtxIn.ibuffer.Format.strname = "GL_UNSIGNED_INT";
|
||||
break;
|
||||
}
|
||||
|
||||
void *ctx = m_ReplayCtx.ctx;
|
||||
|
||||
GLuint ibuffer = 0;
|
||||
gl.glGetIntegerv(eGL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&ibuffer);
|
||||
pipe.m_VtxIn.ibuffer.Buffer = rm->GetOriginalID(rm->GetID(BufferRes(ctx, ibuffer)));
|
||||
pipe.m_VtxIn.ibuffer = rm->GetOriginalID(rm->GetID(BufferRes(ctx, ibuffer)));
|
||||
|
||||
// Vertex buffers and attributes
|
||||
GLint numVBufferBindings = 16;
|
||||
@@ -1012,54 +988,6 @@ void GLReplay::SavePipelineState()
|
||||
|
||||
pipe.m_VtxIn.attributes[i].Format = fmt;
|
||||
}
|
||||
|
||||
switch(m_pDriver->m_LastDrawMode)
|
||||
{
|
||||
default:
|
||||
pipe.m_VtxIn.Topology = eTopology_Unknown;
|
||||
break;
|
||||
case eGL_POINTS:
|
||||
pipe.m_VtxIn.Topology = eTopology_PointList;
|
||||
break;
|
||||
case eGL_LINE_STRIP:
|
||||
pipe.m_VtxIn.Topology = eTopology_LineStrip;
|
||||
break;
|
||||
case eGL_LINE_LOOP:
|
||||
pipe.m_VtxIn.Topology = eTopology_LineLoop;
|
||||
break;
|
||||
case eGL_LINES:
|
||||
pipe.m_VtxIn.Topology = eTopology_LineList;
|
||||
break;
|
||||
case eGL_LINE_STRIP_ADJACENCY:
|
||||
pipe.m_VtxIn.Topology = eTopology_LineStrip_Adj;
|
||||
break;
|
||||
case eGL_LINES_ADJACENCY:
|
||||
pipe.m_VtxIn.Topology = eTopology_LineList_Adj;
|
||||
break;
|
||||
case eGL_TRIANGLE_STRIP:
|
||||
pipe.m_VtxIn.Topology = eTopology_TriangleStrip;
|
||||
break;
|
||||
case eGL_TRIANGLE_FAN:
|
||||
pipe.m_VtxIn.Topology = eTopology_TriangleFan;
|
||||
break;
|
||||
case eGL_TRIANGLES:
|
||||
pipe.m_VtxIn.Topology = eTopology_TriangleList;
|
||||
break;
|
||||
case eGL_TRIANGLE_STRIP_ADJACENCY:
|
||||
pipe.m_VtxIn.Topology = eTopology_TriangleStrip_Adj;
|
||||
break;
|
||||
case eGL_TRIANGLES_ADJACENCY:
|
||||
pipe.m_VtxIn.Topology = eTopology_TriangleList_Adj;
|
||||
break;
|
||||
case eGL_PATCHES:
|
||||
{
|
||||
GLint patchCount = 3;
|
||||
gl.glGetIntegerv(eGL_PATCH_VERTICES, &patchCount);
|
||||
pipe.m_VtxIn.Topology = PrimitiveTopology(eTopology_PatchList_1CPs+patchCount);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Shader stages & Textures
|
||||
|
||||
GLint numTexUnits = 8;
|
||||
|
||||
@@ -275,12 +275,12 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedback(GLenum mode, GLuint id)
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -329,12 +329,12 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackInstanced(GLenum mode, GLui
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -383,12 +383,12 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStream(GLenum mode, GLuint
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -438,12 +438,12 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStreamInstanced(GLenum mode
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -494,11 +494,11 @@ bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei cou
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -550,12 +550,12 @@ bool WrappedOpenGL::Serialise_glDrawArraysIndirect(GLenum mode, const void *indi
|
||||
draw.instanceOffset = params.baseInstance;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -606,12 +606,12 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstanced(GLenum mode, GLint first, GL
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_Instanced;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -664,12 +664,12 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstancedBaseInstance(GLenum mode, GLi
|
||||
draw.instanceOffset = BaseInstance;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_Instanced;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -725,14 +725,13 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -787,18 +786,18 @@ bool WrappedOpenGL::Serialise_glDrawElementsIndirect(GLenum mode, GLenum type, c
|
||||
draw.name = name;
|
||||
draw.numIndices = params.count;
|
||||
draw.numInstances = params.instanceCount;
|
||||
draw.indexOffset = params.firstIndex*IdxSize;
|
||||
draw.indexOffset = params.firstIndex;
|
||||
draw.vertexOffset = params.baseVertex;
|
||||
draw.instanceOffset = params.baseInstance;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -856,14 +855,13 @@ bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLu
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -923,14 +921,13 @@ bool WrappedOpenGL::Serialise_glDrawRangeElementsBaseVertex(GLenum mode, GLuint
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -988,14 +985,13 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1053,14 +1049,13 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1120,14 +1115,13 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G
|
||||
draw.instanceOffset = BaseInstance;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1187,14 +1181,13 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLs
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1256,14 +1249,13 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLen
|
||||
draw.instanceOffset = BaseInstance;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1346,6 +1338,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first,
|
||||
draw.name = name;
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back());
|
||||
@@ -1363,6 +1357,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first,
|
||||
ToStr::Get(draw.vertexOffset) + ")";
|
||||
|
||||
draw.flags |= eDraw_Drawcall;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddEvent(MULTI_DRAWARRAYS, desc);
|
||||
AddDrawcall(draw, true);
|
||||
@@ -1377,8 +1373,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first,
|
||||
m_CurEventID += Count+1;
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
SAFE_DELETE_ARRAY(firstArray);
|
||||
SAFE_DELETE_ARRAY(countArray);
|
||||
|
||||
@@ -1487,6 +1481,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co
|
||||
draw.name = name;
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
@@ -1506,6 +1502,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddEvent(MULTI_DRAWELEMENTS, desc);
|
||||
AddDrawcall(draw, true);
|
||||
|
||||
@@ -1519,8 +1517,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co
|
||||
m_CurEventID += Count+1;
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
SAFE_DELETE_ARRAY(countArray);
|
||||
SAFE_DELETE_ARRAY(idxOffsArray);
|
||||
|
||||
@@ -1626,10 +1622,18 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G
|
||||
ToStr::Get(Type) + "," +
|
||||
ToStr::Get(Count) + ")";
|
||||
|
||||
uint32_t IdxSize =
|
||||
Type == eGL_UNSIGNED_BYTE ? 1
|
||||
: Type == eGL_UNSIGNED_SHORT ? 2
|
||||
: /*Type == eGL_UNSIGNED_INT*/ 4;
|
||||
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
@@ -1651,6 +1655,9 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddEvent(MULTI_DRAWELEMENTSBASEVERTEX, desc);
|
||||
AddDrawcall(draw, true);
|
||||
|
||||
@@ -1663,9 +1670,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G
|
||||
{
|
||||
m_CurEventID += Count+1;
|
||||
}
|
||||
|
||||
m_LastIndexSize = Type;
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
SAFE_DELETE_ARRAY(countArray);
|
||||
SAFE_DELETE_ARRAY(baseArray);
|
||||
@@ -1764,6 +1768,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back());
|
||||
@@ -1796,6 +1802,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void
|
||||
ToStr::Get(draw.instanceOffset) + ">)";
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddEvent(MULTI_DRAWARRAYS_INDIRECT, desc);
|
||||
AddDrawcall(draw, true);
|
||||
@@ -1810,8 +1818,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void
|
||||
m_CurEventID += Count+1;
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1893,8 +1899,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
|
||||
|
||||
m_Real.glDrawElementsInstancedBaseVertexBaseInstance(Mode, params.count, Type, (const void *)ptrdiff_t(params.firstIndex*IdxSize),
|
||||
params.instanceCount, params.baseVertex, params.baseInstance);
|
||||
|
||||
m_LastIndexOffset = (GLuint)(params.firstIndex*IdxSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1909,10 +1913,18 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
|
||||
ToStr::Get(Type) + "," +
|
||||
ToStr::Get(Count) + ")";
|
||||
|
||||
uint32_t IdxSize =
|
||||
Type == eGL_UNSIGNED_BYTE ? 1
|
||||
: Type == eGL_UNSIGNED_SHORT ? 2
|
||||
: /*Type == eGL_UNSIGNED_INT*/ 4;
|
||||
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
@@ -1936,7 +1948,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
|
||||
FetchDrawcall draw;
|
||||
draw.numIndices = params.count;
|
||||
draw.numInstances = params.instanceCount;
|
||||
draw.indexOffset = params.firstIndex*IdxSize;
|
||||
draw.indexOffset = params.firstIndex;
|
||||
draw.vertexOffset = params.baseVertex;
|
||||
draw.instanceOffset = params.baseInstance;
|
||||
|
||||
@@ -1947,6 +1959,9 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
|
||||
ToStr::Get(draw.instanceOffset) + ">)";
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddEvent(MULTI_DRAWELEMENTS_INDIRECT, desc);
|
||||
AddDrawcall(draw, true);
|
||||
@@ -1961,9 +1976,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
|
||||
m_CurEventID += Count+1;
|
||||
}
|
||||
|
||||
m_LastIndexSize = Type;
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2068,6 +2080,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back());
|
||||
@@ -2100,6 +2114,8 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi
|
||||
ToStr::Get(draw.instanceOffset) + ">)";
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
|
||||
AddEvent(MULTI_DRAWARRAYS_INDIRECT, desc);
|
||||
AddDrawcall(draw, true);
|
||||
@@ -2114,8 +2130,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi
|
||||
m_CurEventID += realdrawcount+1;
|
||||
}
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2208,8 +2222,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
|
||||
|
||||
m_Real.glDrawElementsInstancedBaseVertexBaseInstance(Mode, params.count, Type, (const void *)ptrdiff_t(params.firstIndex*IdxSize),
|
||||
params.instanceCount, params.baseVertex, params.baseInstance);
|
||||
|
||||
m_LastIndexOffset = (GLuint)(params.firstIndex*IdxSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2225,10 +2237,18 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
|
||||
ToStr::Get(realdrawcount) + ">, " +
|
||||
ToStr::Get(MaxCount) + ")";
|
||||
|
||||
uint32_t IdxSize =
|
||||
Type == eGL_UNSIGNED_BYTE ? 1
|
||||
: Type == eGL_UNSIGNED_SHORT ? 2
|
||||
: /*Type == eGL_UNSIGNED_INT*/ 4;
|
||||
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
|
||||
draw.flags |= eDraw_MultiDraw;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
|
||||
@@ -2252,7 +2272,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
|
||||
FetchDrawcall draw;
|
||||
draw.numIndices = params.count;
|
||||
draw.numInstances = params.instanceCount;
|
||||
draw.indexOffset = params.firstIndex*IdxSize;
|
||||
draw.indexOffset = params.firstIndex;
|
||||
draw.vertexOffset = params.baseVertex;
|
||||
draw.instanceOffset = params.baseInstance;
|
||||
|
||||
@@ -2263,6 +2283,9 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
|
||||
ToStr::Get(draw.instanceOffset) + ")";
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer|eDraw_Instanced|eDraw_Indirect;
|
||||
|
||||
draw.topology = MakePrimitiveTopology(m_Real, Mode);
|
||||
draw.indexByteWidth = IdxSize;
|
||||
|
||||
AddEvent(MULTI_DRAWELEMENTS_INDIRECT, desc);
|
||||
AddDrawcall(draw, true);
|
||||
@@ -2277,9 +2300,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
|
||||
m_CurEventID += realdrawcount+1;
|
||||
}
|
||||
|
||||
m_LastIndexSize = Type;
|
||||
m_LastDrawMode = Mode;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user