mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
Pass through ShaderResourceType per-texture for better type naming
This commit is contained in:
@@ -95,6 +95,7 @@ struct FetchTexture
|
||||
bool32 customName;
|
||||
ResourceFormat format;
|
||||
uint32_t dimension;
|
||||
ShaderResourceType resType;
|
||||
uint32_t width, height, depth;
|
||||
ResourceId ID;
|
||||
bool32 cubemap;
|
||||
|
||||
@@ -72,6 +72,7 @@ struct GLPipelineState
|
||||
{
|
||||
ResourceId Resource;
|
||||
uint32_t FirstSlice;
|
||||
ShaderResourceType ResType;
|
||||
};
|
||||
rdctype::array<Texture> Textures;
|
||||
|
||||
|
||||
@@ -87,6 +87,8 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id)
|
||||
tex.mips = tex.numSubresources;
|
||||
tex.arraysize = desc.ArraySize;
|
||||
|
||||
tex.resType = tex.arraysize > 1 ? eResType_Texture1DArray : eResType_Texture1D;
|
||||
|
||||
tex.msQual = 0; tex.msSamp = 1;
|
||||
|
||||
tex.numSubresources *= desc.ArraySize;
|
||||
@@ -165,6 +167,12 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id)
|
||||
|
||||
tex.msQual = desc.SampleDesc.Quality; tex.msSamp = desc.SampleDesc.Count;
|
||||
|
||||
tex.resType = tex.arraysize > 1 ? eResType_Texture2DArray : eResType_Texture2D;
|
||||
if(tex.cubemap)
|
||||
tex.resType = tex.arraysize > 1 ? eResType_TextureCubeArray : eResType_TextureCube;
|
||||
if(tex.msSamp > 1)
|
||||
tex.resType = tex.arraysize > 1 ? eResType_Texture2DMSArray : eResType_Texture2DMS;
|
||||
|
||||
tex.numSubresources *= desc.ArraySize;
|
||||
|
||||
tex.customName = true;
|
||||
@@ -229,6 +237,8 @@ FetchTexture D3D11Replay::GetTexture(ResourceId id)
|
||||
|
||||
tex.numSubresources = desc.MipLevels;
|
||||
|
||||
tex.resType = eResType_Texture3D;
|
||||
|
||||
tex.creationFlags = 0;
|
||||
if(desc.BindFlags & D3D11_BIND_SHADER_RESOURCE)
|
||||
tex.creationFlags |= eTextureCreate_SRV;
|
||||
|
||||
@@ -360,6 +360,7 @@ void GLReplay::CacheTexture(ResourceId id)
|
||||
tex.customName = false;
|
||||
tex.format = ResourceFormat();
|
||||
tex.dimension = 1;
|
||||
tex.resType = eResType_None;
|
||||
tex.width = tex.height = tex.depth = 1;
|
||||
tex.cubemap = false;
|
||||
tex.mips = 1;
|
||||
@@ -377,6 +378,7 @@ void GLReplay::CacheTexture(ResourceId id)
|
||||
if(res.resource.Namespace == eResRenderbuffer || res.curType == eGL_RENDERBUFFER)
|
||||
{
|
||||
tex.dimension = 2;
|
||||
tex.resType = eResType_Texture2D;
|
||||
tex.width = res.width;
|
||||
tex.height = res.height;
|
||||
tex.depth = 1;
|
||||
@@ -458,7 +460,48 @@ void GLReplay::CacheTexture(ResourceId id)
|
||||
tex.msSamp = 1;
|
||||
tex.width = tex.height = tex.depth = tex.arraysize = 1;
|
||||
tex.cubemap = false;
|
||||
|
||||
switch(target)
|
||||
{
|
||||
case eGL_TEXTURE_BUFFER:
|
||||
tex.resType = eResType_Buffer;
|
||||
break;
|
||||
case eGL_TEXTURE_1D:
|
||||
tex.resType = eResType_Texture1D;
|
||||
break;
|
||||
case eGL_TEXTURE_2D:
|
||||
tex.resType = eResType_Texture2D;
|
||||
break;
|
||||
case eGL_TEXTURE_3D:
|
||||
tex.resType = eResType_Texture3D;
|
||||
break;
|
||||
case eGL_TEXTURE_1D_ARRAY:
|
||||
tex.resType = eResType_Texture1DArray;
|
||||
break;
|
||||
case eGL_TEXTURE_2D_ARRAY:
|
||||
tex.resType = eResType_Texture2DArray;
|
||||
break;
|
||||
case eGL_TEXTURE_RECTANGLE:
|
||||
tex.resType = eResType_TextureRect;
|
||||
break;
|
||||
case eGL_TEXTURE_2D_MULTISAMPLE:
|
||||
tex.resType = eResType_Texture2DMS;
|
||||
break;
|
||||
case eGL_TEXTURE_2D_MULTISAMPLE_ARRAY:
|
||||
tex.resType = eResType_Texture2DMSArray;
|
||||
break;
|
||||
case eGL_TEXTURE_CUBE_MAP:
|
||||
tex.resType = eResType_TextureCube;
|
||||
break;
|
||||
case eGL_TEXTURE_CUBE_MAP_ARRAY:
|
||||
tex.resType = eResType_TextureCubeArray;
|
||||
break;
|
||||
|
||||
default:
|
||||
tex.resType = eResType_None;
|
||||
RDCERR("Unexpected texture enum %s", ToStr::Get(target).c_str());
|
||||
}
|
||||
|
||||
switch(target)
|
||||
{
|
||||
case eGL_TEXTURE_1D:
|
||||
@@ -1120,6 +1163,7 @@ void GLReplay::SavePipelineState()
|
||||
{
|
||||
GLenum binding = eGL_NONE;
|
||||
GLenum target = eGL_NONE;
|
||||
ShaderResourceType resType = eResType_None;
|
||||
|
||||
bool shadow = false;
|
||||
|
||||
@@ -1180,6 +1224,8 @@ void GLReplay::SavePipelineState()
|
||||
if(target != eGL_NONE)
|
||||
t = TextureBinding(target);
|
||||
|
||||
resType = refls[s]->Resources[r].resType;
|
||||
|
||||
if(binding == eGL_NONE)
|
||||
{
|
||||
binding = t;
|
||||
@@ -1212,6 +1258,7 @@ void GLReplay::SavePipelineState()
|
||||
|
||||
pipe.Textures[unit].Resource = rm->GetOriginalID(rm->GetID(TextureRes(ctx, tex)));
|
||||
pipe.Textures[unit].FirstSlice = (uint32_t)firstSlice;
|
||||
pipe.Textures[unit].ResType = resType;
|
||||
|
||||
GLuint samp;
|
||||
gl.glGetIntegerv(eGL_SAMPLER_BINDING, (GLint *)&samp);
|
||||
|
||||
@@ -248,6 +248,7 @@ namespace renderdoc
|
||||
[CustomMarshalAs(CustomUnmanagedType.CustomClass)]
|
||||
public ResourceFormat format;
|
||||
public UInt32 dimension;
|
||||
public ShaderResourceType resType;
|
||||
public UInt32 width, height, depth;
|
||||
public ResourceId ID;
|
||||
public bool cubemap;
|
||||
|
||||
@@ -94,8 +94,8 @@ namespace renderdoc
|
||||
public class Texture
|
||||
{
|
||||
public ResourceId Resource;
|
||||
|
||||
public UInt32 FirstSlice;
|
||||
public ShaderResourceType ResType;
|
||||
};
|
||||
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
|
||||
public Texture[] Textures;
|
||||
|
||||
@@ -261,9 +261,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if(texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -889,9 +887,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -1129,9 +1125,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -1208,9 +1202,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -1296,9 +1288,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -2401,9 +2391,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tex = texs[t];
|
||||
}
|
||||
|
||||
@@ -263,9 +263,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
@@ -957,9 +955,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
|
||||
@@ -1019,9 +1015,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
a = texs[t].arraysize;
|
||||
format = texs[t].format.ToString();
|
||||
name = texs[t].name;
|
||||
typename = string.Format("Texture{0}D", texs[t].dimension);
|
||||
if (texs[t].cubemap)
|
||||
typename = "TexCube";
|
||||
typename = texs[t].resType.ToString();
|
||||
|
||||
tag = texs[t];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user