summaryrefslogtreecommitdiff
path: root/tools/graphics-app-framework
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-01-14 15:48:54 -0800
committerGitHub <noreply@github.com>2021-01-14 15:48:54 -0800
commitf834f25794cfb746079e92d58c7410b767c57208 (patch)
tree583a86d4cb2e446c2c06f9d786996d10647baf84 /tools/graphics-app-framework
parentac76997690a39605b2b8fbd63de9cbbbc2af2a73 (diff)
COM-ify all slang-gfx interfaces. (#1656)
* COM-ify all slang-gfx interfaces.
Diffstat (limited to 'tools/graphics-app-framework')
-rw-r--r--tools/graphics-app-framework/gui.cpp66
-rw-r--r--tools/graphics-app-framework/gui.h11
-rw-r--r--tools/graphics-app-framework/model.cpp22
-rw-r--r--tools/graphics-app-framework/model.h6
-rw-r--r--tools/graphics-app-framework/window.h13
-rw-r--r--tools/graphics-app-framework/windows/win-window.cpp6
6 files changed, 71 insertions, 53 deletions
diff --git a/tools/graphics-app-framework/gui.cpp b/tools/graphics-app-framework/gui.cpp
index 3d6039f27..777614d58 100644
--- a/tools/graphics-app-framework/gui.cpp
+++ b/tools/graphics-app-framework/gui.cpp
@@ -133,13 +133,13 @@ GUI::GUI(Window* window, IRenderer* inRenderer)
spDestroyCompileRequest(slangRequest);
spDestroySession(slangSession);
- gfx::ShaderProgram::KernelDesc kernelDescs[] =
+ gfx::IShaderProgram::KernelDesc kernelDescs[] =
{
{ gfx::StageType::Vertex, vertexCode, vertexCodeEnd },
{ gfx::StageType::Fragment, fragmentCode, fragmentCodeEnd },
};
- gfx::ShaderProgram::Desc programDesc;
+ gfx::IShaderProgram::Desc programDesc;
programDesc.pipelineType = gfx::PipelineType::Graphics;
programDesc.kernels = &kernelDescs[0];
programDesc.kernelCount = 2;
@@ -160,21 +160,21 @@ GUI::GUI(Window* window, IRenderer* inRenderer)
//
- List<DescriptorSetLayout::SlotRangeDesc> descriptorSetRanges;
- descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer));
- descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::SampledImage));
- descriptorSetRanges.add(DescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::Sampler));
+ Slang::List<IDescriptorSetLayout::SlotRangeDesc> descriptorSetRanges;
+ descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::UniformBuffer));
+ descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::SampledImage));
+ descriptorSetRanges.add(IDescriptorSetLayout::SlotRangeDesc(DescriptorSlotType::Sampler));
- DescriptorSetLayout::Desc descriptorSetLayoutDesc;
+ IDescriptorSetLayout::Desc descriptorSetLayoutDesc;
descriptorSetLayoutDesc.slotRangeCount = descriptorSetRanges.getCount();
descriptorSetLayoutDesc.slotRanges = descriptorSetRanges.getBuffer();
descriptorSetLayout = renderer->createDescriptorSetLayout(descriptorSetLayoutDesc);
- List<PipelineLayout::DescriptorSetDesc> pipelineDescriptorSets;
- pipelineDescriptorSets.add(PipelineLayout::DescriptorSetDesc(descriptorSetLayout));
+ Slang::List<IPipelineLayout::DescriptorSetDesc> pipelineDescriptorSets;
+ pipelineDescriptorSets.add(IPipelineLayout::DescriptorSetDesc(descriptorSetLayout));
- PipelineLayout::Desc pipelineLayoutDesc;
+ IPipelineLayout::Desc pipelineLayoutDesc;
pipelineLayoutDesc.descriptorSetCount = pipelineDescriptorSets.getCount();
pipelineLayoutDesc.descriptorSets = pipelineDescriptorSets.getBuffer();
pipelineLayoutDesc.renderTargetCount = 1;
@@ -209,31 +209,31 @@ GUI::GUI(Window* window, IRenderer* inRenderer)
io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
{
- gfx::TextureResource::Desc desc;
- desc.init2D(Resource::Type::Texture2D, Format::RGBA_Unorm_UInt8, width, height, 1);
- desc.setDefaults(Resource::Usage::PixelShaderResource);
+ gfx::ITextureResource::Desc desc;
+ desc.init2D(IResource::Type::Texture2D, Format::RGBA_Unorm_UInt8, width, height, 1);
+ desc.setDefaults(IResource::Usage::PixelShaderResource);
ptrdiff_t mipRowStrides[] = { ptrdiff_t(width * 4 * sizeof(unsigned char)) };
void* subResourceData[] = { pixels };
- TextureResource::Data initData;
+ ITextureResource::Data initData;
initData.mipRowStrides = mipRowStrides;
initData.numMips = 1;
initData.numSubResources = 1;
initData.subResources = subResourceData;
- auto texture = renderer->createTextureResource(Resource::Usage::PixelShaderResource, desc, &initData);
+ auto texture = renderer->createTextureResource(IResource::Usage::PixelShaderResource, desc, &initData);
- gfx::ResourceView::Desc viewDesc;
+ gfx::IResourceView::Desc viewDesc;
viewDesc.format = desc.format;
- viewDesc.type = ResourceView::Type::ShaderResource;
+ viewDesc.type = IResourceView::Type::ShaderResource;
auto textureView = renderer->createTextureView(texture, viewDesc);
io.Fonts->TexID = (void*) textureView.detach();
}
{
- SamplerState::Desc desc;
+ ISamplerState::Desc desc;
samplerState = renderer->createSamplerState(desc);
}
}
@@ -263,20 +263,20 @@ void GUI::endFrame()
// Allocate transient vertex/index buffers to hold the data for this frame.
- gfx::BufferResource::Desc vertexBufferDesc;
+ gfx::IBufferResource::Desc vertexBufferDesc;
vertexBufferDesc.init(vertexCount * sizeof(ImDrawVert));
- vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer);
- vertexBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write;
+ vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer);
+ vertexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write;
auto vertexBuffer = renderer->createBufferResource(
- Resource::Usage::VertexBuffer,
+ IResource::Usage::VertexBuffer,
vertexBufferDesc);
- gfx::BufferResource::Desc indexBufferDesc;
+ gfx::IBufferResource::Desc indexBufferDesc;
indexBufferDesc.init(indexCount * sizeof(ImDrawIdx));
- indexBufferDesc.setDefaults(Resource::Usage::IndexBuffer);
- indexBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write;
+ indexBufferDesc.setDefaults(IResource::Usage::IndexBuffer);
+ indexBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write;
auto indexBuffer = renderer->createBufferResource(
- Resource::Usage::IndexBuffer,
+ IResource::Usage::IndexBuffer,
indexBufferDesc);
{
@@ -297,12 +297,12 @@ void GUI::endFrame()
}
// Allocate a transient constant buffer for projection matrix
- gfx::BufferResource::Desc constantBufferDesc;
+ gfx::IBufferResource::Desc constantBufferDesc;
constantBufferDesc.init(sizeof(glm::mat4x4));
- constantBufferDesc.setDefaults(Resource::Usage::ConstantBuffer);
- constantBufferDesc.cpuAccessFlags = Resource::AccessFlag::Write;
+ constantBufferDesc.setDefaults(IResource::Usage::ConstantBuffer);
+ constantBufferDesc.cpuAccessFlags = IResource::AccessFlag::Write;
auto constantBuffer = renderer->createBufferResource(
- Resource::Usage::ConstantBuffer,
+ IResource::Usage::ConstantBuffer,
constantBufferDesc);
{
@@ -371,7 +371,7 @@ void GUI::endFrame()
auto descriptorSet = renderer->createDescriptorSet(descriptorSetLayout);
descriptorSet->setConstantBuffer(0, 0, constantBuffer);
descriptorSet->setResource(1, 0,
- (gfx::ResourceView*) command->TextureId);
+ (gfx::IResourceView*) command->TextureId);
descriptorSet->setSampler(2, 0,
samplerState);
@@ -394,8 +394,8 @@ GUI::~GUI()
auto& io = ImGui::GetIO();
{
- RefPtr<ResourceView> textureView;
- textureView.attach((ResourceView*) io.Fonts->TexID);
+ ComPtr<IResourceView> textureView;
+ textureView.attach((IResourceView*) io.Fonts->TexID);
textureView = nullptr;
}
diff --git a/tools/graphics-app-framework/gui.h b/tools/graphics-app-framework/gui.h
index fa6fda1d1..4fd1ca150 100644
--- a/tools/graphics-app-framework/gui.h
+++ b/tools/graphics-app-framework/gui.h
@@ -6,10 +6,11 @@
#include "window.h"
#include "slang-com-ptr.h"
#include "external/imgui/imgui.h"
+#include "source/core/slang-basic.h"
namespace gfx {
-struct GUI : RefObject
+struct GUI : Slang::RefObject
{
GUI(Window* window, IRenderer* renderer);
~GUI();
@@ -19,10 +20,10 @@ struct GUI : RefObject
private:
Slang::ComPtr<IRenderer> renderer;
- RefPtr<PipelineState> pipelineState;
- RefPtr<DescriptorSetLayout> descriptorSetLayout;
- RefPtr<PipelineLayout> pipelineLayout;
- RefPtr<SamplerState> samplerState;
+ Slang::ComPtr<IPipelineState> pipelineState;
+ Slang::ComPtr<IDescriptorSetLayout> descriptorSetLayout;
+ Slang::ComPtr<IPipelineLayout> pipelineLayout;
+ Slang::ComPtr<ISamplerState> samplerState;
};
} // gfx
diff --git a/tools/graphics-app-framework/model.cpp b/tools/graphics-app-framework/model.cpp
index 6a61c64e5..6984a6818 100644
--- a/tools/graphics-app-framework/model.cpp
+++ b/tools/graphics-app-framework/model.cpp
@@ -97,7 +97,7 @@ namespace std
namespace gfx
{
-RefPtr<TextureResource> loadTextureImage(
+ComPtr<ITextureResource> loadTextureImage(
IRenderer* renderer,
char const* path)
{
@@ -178,17 +178,17 @@ RefPtr<TextureResource> loadTextureImage(
int mipCount = (int) mipRowStrides.size();
- TextureResource::Desc desc;
- desc.init2D(Resource::Type::Texture2D, format, extentX, extentY, mipCount);
+ ITextureResource::Desc desc;
+ desc.init2D(IResource::Type::Texture2D, format, extentX, extentY, mipCount);
- TextureResource::Data initData;
+ ITextureResource::Data initData;
initData.numSubResources = mipCount;
initData.numMips = mipCount;
initData.subResources = &subresourceInitData[0];
initData.mipRowStrides = &mipRowStrides[0];
auto texture = renderer->createTextureResource(
- Resource::Usage::PixelShaderResource,
+ IResource::Usage::PixelShaderResource,
desc,
&initData);
@@ -538,22 +538,22 @@ Result ModelLoader::load(
modelData.meshCount = int(meshes.size());
modelData.meshes = meshes.data();
- BufferResource::Desc vertexBufferDesc;
+ IBufferResource::Desc vertexBufferDesc;
vertexBufferDesc.init(modelData.vertexCount * sizeof(Vertex));
- vertexBufferDesc.setDefaults(Resource::Usage::VertexBuffer);
+ vertexBufferDesc.setDefaults(IResource::Usage::VertexBuffer);
modelData.vertexBuffer = renderer->createBufferResource(
- Resource::Usage::VertexBuffer,
+ IResource::Usage::VertexBuffer,
vertexBufferDesc,
flatVertices.data());
if(!modelData.vertexBuffer) return SLANG_FAIL;
- BufferResource::Desc indexBufferDesc;
+ IBufferResource::Desc indexBufferDesc;
indexBufferDesc.init(modelData.indexCount * sizeof(Index));
- vertexBufferDesc.setDefaults(Resource::Usage::IndexBuffer);
+ vertexBufferDesc.setDefaults(IResource::Usage::IndexBuffer);
modelData.indexBuffer = renderer->createBufferResource(
- Resource::Usage::IndexBuffer,
+ IResource::Usage::IndexBuffer,
indexBufferDesc,
flatIndices.data());
if(!modelData.indexBuffer) return SLANG_FAIL;
diff --git a/tools/graphics-app-framework/model.h b/tools/graphics-app-framework/model.h
index 446f57943..44c8f0aab 100644
--- a/tools/graphics-app-framework/model.h
+++ b/tools/graphics-app-framework/model.h
@@ -17,7 +17,7 @@ struct ModelLoader
glm::vec3 specularColor;
float specularity;
- RefPtr<TextureResource> diffuseMap;
+ ComPtr<ITextureResource> diffuseMap;
};
struct Vertex
@@ -39,8 +39,8 @@ struct ModelLoader
struct ModelData
{
- RefPtr<BufferResource> vertexBuffer;
- RefPtr<BufferResource> indexBuffer;
+ ComPtr<IBufferResource> vertexBuffer;
+ ComPtr<IBufferResource> indexBuffer;
PrimitiveTopology primitiveTopology;
int vertexCount;
int indexCount;
diff --git a/tools/graphics-app-framework/window.h b/tools/graphics-app-framework/window.h
index e6f886f42..2e216aacf 100644
--- a/tools/graphics-app-framework/window.h
+++ b/tools/graphics-app-framework/window.h
@@ -57,6 +57,7 @@ struct WindowDesc
};
Window* createWindow(WindowDesc const& desc);
+void destroyWindow(Window* window);
void showWindow(Window* window);
void* getPlatformWindowHandle(Window* window);
@@ -104,13 +105,23 @@ int runWindowsApplication(
void* instance,
int showCommand);
+#ifdef _MSC_VER
+#ifdef _DEBUG
+# define GFX_DUMP_LEAK _CrtDumpMemoryLeaks();
+#endif
+#endif
+#ifndef GFX_DUMP_LEAK
+#define GFX_DUMP_LEAK
+#endif
#define GFX_UI_MAIN(APPLICATION_ENTRY) \
int __stdcall WinMain( \
void* instance, \
void* /* prevInstance */, \
void* /* commandLine */, \
int showCommand) { \
- return gfx::runWindowsApplication(&(APPLICATION_ENTRY), instance, showCommand); \
+ auto result = gfx::runWindowsApplication(&(APPLICATION_ENTRY), instance, showCommand); \
+ GFX_DUMP_LEAK \
+ return result; \
}
#else
diff --git a/tools/graphics-app-framework/windows/win-window.cpp b/tools/graphics-app-framework/windows/win-window.cpp
index 45315a27a..7433603cb 100644
--- a/tools/graphics-app-framework/windows/win-window.cpp
+++ b/tools/graphics-app-framework/windows/win-window.cpp
@@ -293,6 +293,12 @@ Window* createWindow(WindowDesc const& desc)
return window;
}
+void destroyWindow(Window* window)
+{
+ DestroyWindow(window->handle);
+ delete window;
+}
+
void showWindow(Window* window)
{
ShowWindow(window->handle, SW_SHOW);