mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-24 07:26:34 +00:00
Fix 32-bit compilation, assuming local modifications to vulkan.h
* When the final header is ready we'll roll it into the source directly rather than assuming the SDK is installed anywhere, and apply a local change to get type-safety on 32-bit (which only works on C++). Similar to the GL header's modification for a typed GLenum.
This commit is contained in:
@@ -143,8 +143,9 @@ void Serialiser::Serialise(const char *name, SigParameter &el)
|
||||
Serialise("", el.channelUsedMask);
|
||||
Serialise("", el.compCount);
|
||||
Serialise("", el.stream);
|
||||
Serialise("", el.arrayIndex);
|
||||
|
||||
SIZE_CHECK(SigParameter, 56);
|
||||
SIZE_CHECK(SigParameter, 60);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -754,6 +755,8 @@ template<>
|
||||
void Serialiser::Serialise(const char *name, VulkanPipelineState::ShaderStage &el)
|
||||
{
|
||||
Serialise("", el.Shader);
|
||||
Serialise("", el.entryPoint);
|
||||
|
||||
Serialise("", el.ShaderName);
|
||||
Serialise("", el.customName);
|
||||
Serialise("", el.BindpointMapping);
|
||||
@@ -762,7 +765,7 @@ void Serialiser::Serialise(const char *name, VulkanPipelineState::ShaderStage &e
|
||||
if(m_Mode == READING)
|
||||
el.ShaderDetails = NULL;
|
||||
|
||||
SIZE_CHECK(VulkanPipelineState::ShaderStage, 64);
|
||||
SIZE_CHECK(VulkanPipelineState::ShaderStage, 72);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -882,7 +885,7 @@ void Serialiser::Serialise(const char *name, VulkanPipelineState &el)
|
||||
Serialise("", el.DS);
|
||||
Serialise("", el.Pass);
|
||||
|
||||
SIZE_CHECK(VulkanPipelineState, 792);
|
||||
SIZE_CHECK(VulkanPipelineState, 840);
|
||||
}
|
||||
|
||||
#pragma endregion Vulkan pipeline state
|
||||
|
||||
@@ -67,7 +67,7 @@ bool WrappedID3D11DeviceContext::Serialise_UpdateSubresource1(ID3D11Resource *pD
|
||||
|
||||
if(WrappedID3D11Buffer::IsAlloc(DestResource))
|
||||
{
|
||||
srcLength = record->Length;
|
||||
srcLength = (size_t)record->Length;
|
||||
|
||||
if(HasDestBox)
|
||||
srcLength = RDCMIN((uint32_t)srcLength, pDstBox->right - pDstBox->left);
|
||||
@@ -82,7 +82,7 @@ bool WrappedID3D11DeviceContext::Serialise_UpdateSubresource1(ID3D11Resource *pD
|
||||
|
||||
if(tex1)
|
||||
{
|
||||
srcLength = record->Length;
|
||||
srcLength = (size_t)record->Length;
|
||||
|
||||
if(HasDestBox)
|
||||
srcLength = RDCMIN((uint32_t)srcLength, pDstBox->right - pDstBox->left);
|
||||
|
||||
@@ -1060,7 +1060,7 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res)
|
||||
|
||||
void *barrier = (void *)&srcimBarrier;
|
||||
|
||||
for (int si = 0; si < layout->subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layout->subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layout->subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -1074,7 +1074,7 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res)
|
||||
srcimBarrier.srcAccessMask = 0;
|
||||
srcimBarrier.dstAccessMask = 0;
|
||||
|
||||
for (int si = 0; si < layout->subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layout->subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layout->subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -1112,7 +1112,7 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res)
|
||||
VkDeviceMemory datamem = ToHandle<VkDeviceMemory>(res);
|
||||
VkDeviceSize datasize = record->Length;
|
||||
|
||||
RDCASSERT(datamem);
|
||||
RDCASSERT(datamem != VK_NULL_HANDLE);
|
||||
|
||||
RDCASSERT(record->Length > 0);
|
||||
VkDeviceSize memsize = record->Length;
|
||||
@@ -1797,7 +1797,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
|
||||
void *barrierptr = (void *)&barrier;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
barrier.oldLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrierptr);
|
||||
@@ -1814,7 +1814,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
barrier.dstAccessMask = VK_ACCESS_ALL_READ_BITS;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
barrier.newLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
barrier.dstAccessMask |= MakeAccessMask(barrier.newLayout);
|
||||
@@ -1847,7 +1847,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
|
||||
void *barrierptr = (void *)&barrier;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
barrier.oldLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrierptr);
|
||||
@@ -1864,7 +1864,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
barrier.dstAccessMask = VK_ACCESS_ALL_READ_BITS;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
barrier.newLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrierptr);
|
||||
@@ -1924,7 +1924,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
|
||||
void *barrier = (void *)&dstimBarrier;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
dstimBarrier.oldLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
ObjDisp(cmd)->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -1942,7 +1942,7 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, VulkanResourceManager
|
||||
dstimBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
dstimBarrier.dstAccessMask = VK_ACCESS_ALL_READ_BITS;
|
||||
|
||||
for (int si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < m_ImageLayouts[id].subresourceStates.size(); si++)
|
||||
{
|
||||
dstimBarrier.newLayout = m_ImageLayouts[id].subresourceStates[si].newLayout;
|
||||
dstimBarrier.dstAccessMask |= MakeAccessMask(dstimBarrier.newLayout);
|
||||
|
||||
@@ -1096,7 +1096,7 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn
|
||||
|
||||
void *barrier = (void *)&srcimBarrier;
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -1128,7 +1128,7 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn
|
||||
vt->CmdEndRenderPass(Unwrap(cmd));
|
||||
}
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layouts.subresourceStates[si].newLayout;
|
||||
srcimBarrier.dstAccessMask = MakeAccessMask(srcimBarrier.newLayout);
|
||||
@@ -3442,7 +3442,7 @@ bool VulkanReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
|
||||
void *barrier = (void *)&srcimBarrier;
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -3471,7 +3471,7 @@ bool VulkanReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
};
|
||||
|
||||
// image layout back to normal
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layouts.subresourceStates[si].newLayout;
|
||||
srcimBarrier.dstAccessMask = MakeAccessMask(srcimBarrier.newLayout);
|
||||
@@ -3641,7 +3641,7 @@ bool VulkanReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t m
|
||||
|
||||
void *barrier = (void *)&srcimBarrier;
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -3672,7 +3672,7 @@ bool VulkanReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t m
|
||||
};
|
||||
|
||||
// image layout back to normal
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layouts.subresourceStates[si].newLayout;
|
||||
srcimBarrier.dstAccessMask = MakeAccessMask(srcimBarrier.newLayout);
|
||||
@@ -4013,7 +4013,7 @@ byte *VulkanReplay::GetTextureData(ResourceId tex, uint32_t arrayIdx, uint32_t m
|
||||
|
||||
void *barrier = (void *)&srcimBarrier;
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -4035,7 +4035,7 @@ byte *VulkanReplay::GetTextureData(ResourceId tex, uint32_t arrayIdx, uint32_t m
|
||||
barrier = (void *)&srcimBarrier;
|
||||
|
||||
// image layout back to normal
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -4083,7 +4083,7 @@ byte *VulkanReplay::GetTextureData(ResourceId tex, uint32_t arrayIdx, uint32_t m
|
||||
// before we go resolving
|
||||
srcimBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.oldLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
@@ -4134,7 +4134,7 @@ byte *VulkanReplay::GetTextureData(ResourceId tex, uint32_t arrayIdx, uint32_t m
|
||||
if(tmpImage == VK_NULL_HANDLE)
|
||||
{
|
||||
// image layout back to normal
|
||||
for (int si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
for (size_t si = 0; si < layouts.subresourceStates.size(); si++)
|
||||
{
|
||||
srcimBarrier.newLayout = layouts.subresourceStates[si].newLayout;
|
||||
vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier);
|
||||
|
||||
@@ -90,6 +90,19 @@ struct RealVkRes
|
||||
template<typename T> T *AsPtr() { return (T*)&handle; }
|
||||
};
|
||||
|
||||
// this is defined in a custom modification to vulkan.h, where on 32-bit systems
|
||||
// we gain type safety by using a C++ struct to wrap the uint64_t instead of using
|
||||
// a naked uint64_t typedef
|
||||
#ifdef VK_NON_DISPATCHABLE_WRAPPER_STRUCT
|
||||
|
||||
#define NON_DISP_TO_UINT64(obj) obj.handle
|
||||
|
||||
#else
|
||||
|
||||
#define NON_DISP_TO_UINT64(obj) (uint64_t)obj
|
||||
|
||||
#endif
|
||||
|
||||
// since handles can overlap (ie. handle 1 might be valid for many types
|
||||
// if the ICD is using indexing or state packing instead of true pointers)
|
||||
// when storing wrapper object <-> real object we have to store the type
|
||||
@@ -121,7 +134,7 @@ struct TypedRealHandle
|
||||
|
||||
struct WrappedVkNonDispRes : public WrappedVkRes
|
||||
{
|
||||
template<typename T> WrappedVkNonDispRes(T obj, ResourceId objId) : real(obj), id(objId), record(NULL) {}
|
||||
template<typename T> WrappedVkNonDispRes(T obj, ResourceId objId) : real( NON_DISP_TO_UINT64(obj) ), id(objId), record(NULL) {}
|
||||
|
||||
RealVkRes real;
|
||||
ResourceId id;
|
||||
@@ -391,14 +404,10 @@ template<typename inner> struct UnwrapHelper {};
|
||||
typedef WrappedVkNonDispRes ParentType; \
|
||||
typedef CONCAT(Wrapped, vulkantype) Outer; \
|
||||
static TypedRealHandle ToTypedHandle(vulkantype real) \
|
||||
{ TypedRealHandle h; h.type = (VkResourceType)Outer::TypeEnum; h.real = RealVkRes(real); return h; } \
|
||||
static Outer *FromHandle(vulkantype wrapped) { return (Outer *) (uintptr_t)wrapped; } \
|
||||
{ TypedRealHandle h; h.type = (VkResourceType)Outer::TypeEnum; h.real = RealVkRes( NON_DISP_TO_UINT64(real) ); return h; } \
|
||||
static Outer *FromHandle(vulkantype wrapped) { return (Outer *) (uintptr_t) NON_DISP_TO_UINT64(wrapped); } \
|
||||
};
|
||||
|
||||
// VKTODOHIGH this no longer works on 32-bit since handles are no longer strongly typed.
|
||||
// solution will *probably* be to modify vulkan.h to use a C++ class with appropriate overrides,
|
||||
// constructors and operators to still be a 64-bit element but be strongly typed.
|
||||
|
||||
UNWRAP_HELPER(VkInstance)
|
||||
UNWRAP_HELPER(VkPhysicalDevice)
|
||||
UNWRAP_HELPER(VkDevice)
|
||||
|
||||
@@ -329,7 +329,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(
|
||||
GetResourceManager()->WrapResource(Unwrap(device), cmd);
|
||||
}
|
||||
|
||||
m_PartialReplayData.resultPartialCmdPool = (VkCommandPool)GetResourceManager()->GetWrapper(ToTypedHandle(allocInfo.commandPool));
|
||||
m_PartialReplayData.resultPartialCmdPool = (VkCommandPool)uint64_t(GetResourceManager()->GetWrapper(ToTypedHandle(allocInfo.commandPool)));
|
||||
m_PartialReplayData.resultPartialCmdBuffer = cmd;
|
||||
m_PartialReplayData.partialDevice = device;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user