update for render pass ABI break

main
cosmonaut 2022-02-24 21:32:44 -08:00
parent 94f463002d
commit a828f510af
5 changed files with 351 additions and 352 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

@ -1 +1 @@
Subproject commit cb25e6feff2d9ac3f399b3a43cd11d374f90f127 Subproject commit b8b10140a95457a00d658e84d4b67b926f467b15

BIN
moonlibs/lib64/libRefresh.so.0 (Stored with Git LFS)

Binary file not shown.

View File

@ -43,7 +43,7 @@ namespace MoonWorksComputeSpriteBatch
{ {
ShaderModule = computeShaderModule, ShaderModule = computeShaderModule,
EntryPointName = "main", EntryPointName = "main",
UniformBufferSize = (uint) Marshal.SizeOf<SpriteBatchUniforms>() UniformBufferSize = (uint)Marshal.SizeOf<SpriteBatchUniforms>()
}; };
ComputePipeline = new ComputePipeline(graphicsDevice, computeShaderState, 2, 0); ComputePipeline = new ComputePipeline(graphicsDevice, computeShaderState, 2, 0);
@ -128,12 +128,11 @@ namespace MoonWorksComputeSpriteBatch
public void Flush( public void Flush(
CommandBuffer commandBuffer, CommandBuffer commandBuffer,
RenderPass renderPass, ColorAttachmentInfo colorAttachmentInfo,
Framebuffer framebuffer,
Rect renderArea,
GraphicsPipeline graphicsPipeline, GraphicsPipeline graphicsPipeline,
CameraUniforms cameraUniforms CameraUniforms cameraUniforms
) { )
{
if (VertexCount == 0) if (VertexCount == 0)
{ {
return; return;
@ -150,7 +149,7 @@ namespace MoonWorksComputeSpriteBatch
}); });
commandBuffer.DispatchCompute(System.Math.Max(1, VertexCount / 256), 1, 1, offset); commandBuffer.DispatchCompute(System.Math.Max(1, VertexCount / 256), 1, 1, offset);
commandBuffer.BeginRenderPass(renderPass, framebuffer, renderArea, Vector4.Zero); commandBuffer.BeginRenderPass(colorAttachmentInfo);
commandBuffer.BindGraphicsPipeline(graphicsPipeline); commandBuffer.BindGraphicsPipeline(graphicsPipeline);
commandBuffer.BindVertexBuffers(VertexBuffer); commandBuffer.BindVertexBuffers(VertexBuffer);
commandBuffer.BindIndexBuffer(IndexBuffer, IndexElementSize.Sixteen); commandBuffer.BindIndexBuffer(IndexBuffer, IndexElementSize.Sixteen);

View File

@ -11,10 +11,7 @@ namespace MoonWorksComputeSpriteBatch
{ {
public class TestGame : Game public class TestGame : Game
{ {
private RenderPass mainRenderPass;
private RenderTarget mainColorTarget; private RenderTarget mainColorTarget;
private Framebuffer mainFramebuffer;
private Rect mainRenderArea;
private GraphicsPipeline spritePipeline; private GraphicsPipeline spritePipeline;
@ -39,16 +36,6 @@ namespace MoonWorksComputeSpriteBatch
var vertexShaderModule = new ShaderModule(GraphicsDevice, Path.Combine(Environment.CurrentDirectory, "Content", "sprite.vert.spv")); var vertexShaderModule = new ShaderModule(GraphicsDevice, Path.Combine(Environment.CurrentDirectory, "Content", "sprite.vert.spv"));
var fragmentShaderModule = new ShaderModule(GraphicsDevice, Path.Combine(Environment.CurrentDirectory, "Content", "sprite.frag.spv")); var fragmentShaderModule = new ShaderModule(GraphicsDevice, Path.Combine(Environment.CurrentDirectory, "Content", "sprite.frag.spv"));
ColorTargetDescription colorTargetDescription = new ColorTargetDescription
{
Format = TextureFormat.R8G8B8A8,
MultisampleCount = SampleCount.One,
LoadOp = LoadOp.Clear,
StoreOp = StoreOp.Store
};
mainRenderPass = new RenderPass(GraphicsDevice, colorTargetDescription);
mainColorTarget = RenderTarget.CreateBackedRenderTarget( mainColorTarget = RenderTarget.CreateBackedRenderTarget(
GraphicsDevice, GraphicsDevice,
windowWidth, windowWidth,
@ -57,23 +44,6 @@ namespace MoonWorksComputeSpriteBatch
false false
); );
mainFramebuffer = new Framebuffer(
GraphicsDevice,
windowWidth,
windowHeight,
mainRenderPass,
null,
mainColorTarget
);
mainRenderArea = new Rect
{
X = 0,
Y = 0,
W = (int) windowWidth,
H = (int) windowHeight
};
/* Pipeline */ /* Pipeline */
ColorTargetBlendState[] colorTargetBlendStates = new ColorTargetBlendState[1] ColorTargetBlendState[] colorTargetBlendStates = new ColorTargetBlendState[1]
@ -95,7 +65,7 @@ namespace MoonWorksComputeSpriteBatch
{ {
ShaderModule = vertexShaderModule, ShaderModule = vertexShaderModule,
EntryPointName = "main", EntryPointName = "main",
UniformBufferSize = (uint) Marshal.SizeOf<CameraUniforms>() UniformBufferSize = (uint)Marshal.SizeOf<CameraUniforms>()
}; };
ShaderStageState fragmentShaderState = new ShaderStageState ShaderStageState fragmentShaderState = new ShaderStageState
@ -186,6 +156,23 @@ namespace MoonWorksComputeSpriteBatch
Scissors = scissors Scissors = scissors
}; };
var colorAttachmentDescriptions = new ColorAttachmentDescription[1]
{
new ColorAttachmentDescription
{
format = TextureFormat.R8G8B8A8,
sampleCount = SampleCount.One
}
};
GraphicsPipelineAttachmentInfo graphicsPipelineAttachmentInfo = new GraphicsPipelineAttachmentInfo
{
colorAttachmentDescriptions = colorAttachmentDescriptions,
colorAttachmentCount = 1,
hasDepthStencilAttachment = false,
depthStencilFormat = 0
};
var graphicsPipelineCreateInfo = new GraphicsPipelineCreateInfo var graphicsPipelineCreateInfo = new GraphicsPipelineCreateInfo
{ {
ColorBlendState = colorBlendState, ColorBlendState = colorBlendState,
@ -198,7 +185,7 @@ namespace MoonWorksComputeSpriteBatch
PrimitiveType = PrimitiveType.TriangleList, PrimitiveType = PrimitiveType.TriangleList,
VertexInputState = vertexInputState, VertexInputState = vertexInputState,
ViewportState = viewportState, ViewportState = viewportState,
RenderPass = mainRenderPass AttachmentInfo = graphicsPipelineAttachmentInfo
}; };
spritePipeline = new GraphicsPipeline(GraphicsDevice, graphicsPipelineCreateInfo); spritePipeline = new GraphicsPipeline(GraphicsDevice, graphicsPipelineCreateInfo);
@ -218,8 +205,8 @@ namespace MoonWorksComputeSpriteBatch
{ {
for (var i = 0; i < SPRITECOUNT; i += 1) for (var i = 0; i < SPRITECOUNT; i += 1)
{ {
positions[i].X = (float) (random.NextDouble() * windowWidth) - 64; positions[i].X = (float)(random.NextDouble() * windowWidth) - 64;
positions[i].Y = (float) (random.NextDouble() * windowHeight) - 64; positions[i].Y = (float)(random.NextDouble() * windowHeight) - 64;
} }
} }
@ -237,10 +224,23 @@ namespace MoonWorksComputeSpriteBatch
spriteBatch.Add(new Sprite(new Rect { X = 0, Y = 0, W = 0, H = 0 }, 128, 128), transform, color); spriteBatch.Add(new Sprite(new Rect { X = 0, Y = 0, W = 0, H = 0 }, 128, 128), transform, color);
} }
spriteBatch.Flush(commandBuffer, mainRenderPass, mainFramebuffer, mainRenderArea, spritePipeline, new CameraUniforms { viewProjectionMatrix = viewProjection }); var colorAttachmentInfo = new ColorAttachmentInfo
{
renderTarget = mainColorTarget,
clearColor = Color.Black,
loadOp = LoadOp.Clear,
storeOp = StoreOp.DontCare
};
spriteBatch.Flush(commandBuffer, colorAttachmentInfo, spritePipeline, new CameraUniforms { viewProjectionMatrix = viewProjection });
commandBuffer.QueuePresent(mainColorTarget.TextureSlice, Filter.Nearest, Window); commandBuffer.QueuePresent(mainColorTarget.TextureSlice, Filter.Nearest, Window);
GraphicsDevice.Submit(commandBuffer); GraphicsDevice.Submit(commandBuffer);
} }
protected override void OnDestroy()
{
}
} }
} }