Convert some more shaders

This commit is contained in:
baldurk
2016-07-21 23:44:37 +02:00
parent 96d98fa5d7
commit 2fe0ffe9fc
2 changed files with 59 additions and 63 deletions
+57 -62
View File
@@ -25,7 +25,7 @@
#include <float.h>
#include <algorithm>
#include "data/glsl/debuguniforms.h"
#include "common/common.h"
#include "data/glsl_shaders.h"
#include "maths/camera.h"
#include "maths/formatpacking.h"
@@ -35,6 +35,9 @@
#include "gl_replay.h"
#include "gl_resources.h"
#define OPENGL 1
#include "data/spv/debuguniforms.h"
GLuint GLReplay::CreateCShaderProgram(const char *csSrc)
{
if(m_pDriver == NULL)
@@ -280,44 +283,33 @@ void GLReplay::InitDebugData()
break;
}
string blitvsSource =
"#version 420 core\n#define VERTEX_ID gl_VertexID" + GetEmbeddedResource(spv_blit_vert);
DebugData.quadoverdraw420 = !support450;
GenerateGLSLShader(vs, eShaderGLSL, "", GetEmbeddedResource(spv_blit_vert), 420);
if(support450)
{
DebugData.quadoverdraw420 = false;
string defines = "";
string glsl = "#version 450 core\n\n";
glsl += "#define RENDERDOC_QuadOverdrawPS\n\n";
glsl += GetEmbeddedResource(glsl_quadoverdraw_frag);
DebugData.quadoverdrawFSProg = CreateShaderProgram(NULL, glsl.c_str());
if(!support450)
{
// dFdx fine functions not available before GLSL 450. Use normal dFdx, which might be coarse,
// so won't show quad overdraw properly
defines += "#define dFdxFine dFdx\n\n";
defines += "#define dFdyFine dFdy\n\n";
}
glsl = "#version 420 core\n\n";
glsl += "#define RENDERDOC_QOResolvePS\n\n";
glsl += GetEmbeddedResource(glsl_quadoverdraw_frag);
DebugData.quadoverdrawResolveProg = CreateShaderProgram(blitvsSource.c_str(), glsl.c_str());
}
else
{
DebugData.quadoverdraw420 = true;
GenerateGLSLShader(fs, eShaderGLSL, defines, GetEmbeddedResource(spv_quadwrite_frag),
support450 ? 450 : 420);
string glsl = "#version 420 core\n\n";
glsl += "#define RENDERDOC_QuadOverdrawPS\n\n";
glsl += "#define dFdxFine dFdx\n\n"; // dFdx fine functions not available before GLSL 450
glsl += "#define dFdyFine dFdy\n\n"; // use normal dFdx, which might be coarse, so won't show
// quad overdraw properly
glsl += GetEmbeddedResource(glsl_quadoverdraw_frag);
DebugData.quadoverdrawFSProg = CreateShaderProgram(NULL, glsl.c_str());
DebugData.quadoverdrawResolveProg = CreateShaderProgram(empty, fs);
glsl = "#version 420 core\n\n";
glsl += "#define RENDERDOC_QOResolvePS\n\n";
glsl += GetEmbeddedResource(glsl_quadoverdraw_frag);
DebugData.quadoverdrawResolveProg = CreateShaderProgram(blitvsSource.c_str(), glsl.c_str());
GenerateGLSLShader(fs, eShaderGLSL, "", GetEmbeddedResource(spv_quadresolve_frag), 420);
DebugData.quadoverdrawResolveProg = CreateShaderProgram(vs, fs);
}
string checkerfs = GetEmbeddedResource(glsl_checkerboard_frag);
DebugData.checkerProg = CreateShaderProgram(blitvsSource.c_str(), checkerfs.c_str());
GenerateGLSLShader(fs, eShaderGLSL, "", GetEmbeddedResource(spv_checkerboard_frag), 420);
DebugData.checkerProg = CreateShaderProgram(vs, fs);
string genericvsSource = GetEmbeddedResource(glsl_generic_vert);
string genericfsSource = GetEmbeddedResource(glsl_generic_frag);
@@ -377,9 +369,9 @@ void GLReplay::InitDebugData()
{
gl.glBindBuffer(eGL_UNIFORM_BUFFER, DebugData.UBOs[i]);
gl.glNamedBufferDataEXT(DebugData.UBOs[i], 512, NULL, eGL_DYNAMIC_DRAW);
RDCCOMPILE_ASSERT(sizeof(texdisplay) < 512, "texdisplay UBO too large");
RDCCOMPILE_ASSERT(sizeof(FontUniforms) < 512, "texdisplay UBO too large");
RDCCOMPILE_ASSERT(sizeof(HistogramCBufferData) < 512, "texdisplay UBO too large");
RDCCOMPILE_ASSERT(sizeof(TexDisplayUBOData) < 512, "texdisplay UBO too large");
RDCCOMPILE_ASSERT(sizeof(FontUBOData) < 512, "texdisplay UBO too large");
RDCCOMPILE_ASSERT(sizeof(HistogramUBOData) < 512, "texdisplay UBO too large");
}
DebugData.overlayTexWidth = DebugData.overlayTexHeight = 0;
@@ -574,11 +566,10 @@ void GLReplay::InitDebugData()
gl.glVertexAttribPointer(0, 4, eGL_FLOAT, GL_FALSE, sizeof(Vec4f), NULL);
gl.glEnableVertexAttribArray(0);
DebugData.replayQuadProg = CreateShaderProgram(blitvsSource.c_str(), genericfsSource.c_str());
GenerateGLSLShader(vs, eShaderGLSL, "", GetEmbeddedResource(spv_blit_vert), 420);
GenerateGLSLShader(fs, eShaderGLSL, "", GetEmbeddedResource(spv_outline_frag), 420);
string outlinefsSource = GetEmbeddedResource(glsl_outline_frag);
DebugData.outlineQuadProg = CreateShaderProgram(blitvsSource.c_str(), outlinefsSource.c_str());
DebugData.outlineQuadProg = CreateShaderProgram(vs, fs);
MakeCurrentReplayContext(&m_ReplayCtx);
@@ -699,7 +690,6 @@ void GLReplay::DeleteDebugData()
gl.glDeleteBuffers(1, &DebugData.axisFrustumBuffer);
gl.glDeleteBuffers(1, &DebugData.triHighlightBuffer);
gl.glDeleteProgram(DebugData.replayQuadProg);
gl.glDeleteProgram(DebugData.outlineQuadProg);
}
@@ -772,9 +762,9 @@ bool GLReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip, uin
MakeCurrentReplayContext(m_DebugCtx);
gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]);
HistogramCBufferData *cdata = (HistogramCBufferData *)gl.glMapBufferRange(
eGL_UNIFORM_BUFFER, 0, sizeof(HistogramCBufferData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
HistogramUBOData *cdata =
(HistogramUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(HistogramUBOData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
cdata->HistogramTextureResolution.x = (float)RDCMAX(details.width >> mip, 1U);
cdata->HistogramTextureResolution.y = (float)RDCMAX(details.height >> mip, 1U);
@@ -943,9 +933,9 @@ bool GLReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t mip,
MakeCurrentReplayContext(m_DebugCtx);
gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]);
HistogramCBufferData *cdata = (HistogramCBufferData *)gl.glMapBufferRange(
eGL_UNIFORM_BUFFER, 0, sizeof(HistogramCBufferData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
HistogramUBOData *cdata =
(HistogramUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(HistogramUBOData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
cdata->HistogramTextureResolution.x = (float)RDCMAX(details.width >> mip, 1U);
cdata->HistogramTextureResolution.y = (float)RDCMAX(details.height >> mip, 1U);
@@ -1568,8 +1558,9 @@ bool GLReplay::RenderTextureInternal(TextureDisplay cfg, bool blendAlpha)
gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]);
texdisplay *ubo = (texdisplay *)gl.glMapBufferRange(
eGL_UNIFORM_BUFFER, 0, sizeof(texdisplay), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
TexDisplayUBOData *ubo =
(TexDisplayUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(TexDisplayUBOData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
float x = cfg.offx;
float y = cfg.offy;
@@ -1623,7 +1614,7 @@ bool GLReplay::RenderTextureInternal(TextureDisplay cfg, bool blendAlpha)
ubo->RangeMinimum = cfg.rangemin;
ubo->InverseRangeSize = 1.0f / (cfg.rangemax - cfg.rangemin);
ubo->MipLevel = (float)cfg.mip;
ubo->MipLevel = (int)cfg.mip;
if(texDetails.curType != eGL_TEXTURE_3D)
ubo->Slice = (float)cfg.sliceFace;
else
@@ -1939,20 +1930,18 @@ ResourceId GLReplay::RenderOverlay(ResourceId texid, FormatComponentType typeHin
gl.glViewportIndexedf(0, rs.Viewports[0].x, rs.Viewports[0].y, rs.Viewports[0].width,
rs.Viewports[0].height);
GLint innerLoc = gl.glGetUniformLocation(DebugData.outlineQuadProg, "RENDERDOC_Inner_Color");
GLint borderLoc = gl.glGetUniformLocation(DebugData.outlineQuadProg, "RENDERDOC_Border_Color");
GLint rectLoc = gl.glGetUniformLocation(DebugData.outlineQuadProg, "RENDERDOC_ViewRect");
GLint scissorLoc = gl.glGetUniformLocation(DebugData.outlineQuadProg, "RENDERDOC_Scissor");
gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]);
OutlineUBOData *cdata =
(OutlineUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(OutlineUBOData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
float innerConsts[] = {0.2f, 0.2f, 0.9f, 0.7f};
gl.glUniform4fv(innerLoc, 1, innerConsts);
cdata->Inner_Color = Vec4f(0.2f, 0.2f, 0.9f, 0.7f);
cdata->Border_Color = Vec4f(0.1f, 0.1f, 0.1f, 1.0f);
cdata->ViewRect =
Vec4f(rs.Viewports[0].x, rs.Viewports[0].y, rs.Viewports[0].width, rs.Viewports[0].height);
cdata->Scissor = 0;
float borderConsts[] = {0.1f, 0.1f, 0.1f, 1.0f};
gl.glUniform4fv(borderLoc, 1, borderConsts);
gl.glUniform4fv(rectLoc, 1, (float *)rs.Viewports);
gl.glUniform1ui(scissorLoc, 0);
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
gl.glDrawArrays(eGL_TRIANGLE_STRIP, 0, 4);
@@ -1963,9 +1952,15 @@ ResourceId GLReplay::RenderOverlay(ResourceId texid, FormatComponentType typeHin
gl.glViewportIndexedf(0, scissor.x, scissor.y, scissor.z, scissor.w);
gl.glUniform4fv(rectLoc, 1, (float *)&scissor);
cdata = (OutlineUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(OutlineUBOData),
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
gl.glUniform1ui(scissorLoc, 1);
cdata->Inner_Color = Vec4f(0.2f, 0.2f, 0.9f, 0.7f);
cdata->Border_Color = Vec4f(0.1f, 0.1f, 0.1f, 1.0f);
cdata->ViewRect = scissor;
cdata->Scissor = 1;
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
gl.glDrawArrays(eGL_TRIANGLE_STRIP, 0, 4);
}
+2 -1
View File
@@ -266,7 +266,6 @@ private:
GLuint histogramProgram[64]; // RESTYPE indexed (see debuguniforms.h, 1d/2d/3d etc |
// uint/sint) src tex -> histogram result buf program
GLuint replayQuadProg;
GLuint outlineQuadProg;
// program that does a blit of texture from input to output,
@@ -295,6 +294,8 @@ private:
GLuint pointNoMipSampler;
GLuint linearSampler;
GLuint genericUBO;
GLuint checkerProg;
GLuint genericProg;