formatting

This commit is contained in:
jacob 2025-12-10 11:48:42 -06:00
parent 4727e5786b
commit 3da749ef51
6 changed files with 48 additions and 47 deletions

View File

@ -70,9 +70,10 @@
#define FLOOD_DEBUG 0 #define FLOOD_DEBUG 0
#define GPU_DEBUG 1 #define GPU_DEBUG 1
#define GPU_SHADER_PRINT 1
#define GPU_DEBUG_VALIDATION 1 #define GPU_DEBUG_VALIDATION 1
#define GPU_SHADER_PRINT 1
/* If enabled, bitbuffs will insert/verify magic numbers & length for each read & write */ /* If enabled, bitbuffs will insert/verify magic numbers & length for each read & write */
#define BITBUFF_DEBUG 0 #define BITBUFF_DEBUG 0
#define BITBUFF_TEST IsRtcEnabled #define BITBUFF_TEST IsRtcEnabled

View File

@ -291,7 +291,7 @@ void G_Bootstrap(void)
{ {
/* Create debug print buffers */ /* Create debug print buffers */
if (GPU_DEBUG) if (GPU_SHADER_PRINT)
{ {
u64 print_buffer_size = Mebi(64); u64 print_buffer_size = Mebi(64);
for (G_QueueKind kind = 0; kind < G_NumQueues; ++kind) for (G_QueueKind kind = 0; kind < G_NumQueues; ++kind)
@ -299,6 +299,7 @@ void G_Bootstrap(void)
G_D12_Queue *queue = G_D12_QueueFromKind(kind); G_D12_Queue *queue = G_D12_QueueFromKind(kind);
if (kind != G_QueueKind_AsyncCopy) if (kind != G_QueueKind_AsyncCopy)
{ {
/* TODO: Don't create this in host memory. Just double buffer & do an async copy. */
G_ArenaHandle gpu_perm = G_PermArena(); G_ArenaHandle gpu_perm = G_PermArena();
queue->debug_print_buffer = G_PushBuffer( queue->debug_print_buffer = G_PushBuffer(
gpu_perm, gpu_perm,

View File

@ -40,8 +40,7 @@ Struct(G_SamplerStateRef) { u32 v; };
*/ */
#define G_NumGeneralPurposeConstants (8) /* Constants available for any usage */ #define G_NumGeneralPurposeConstants (8) /* Constants available for any usage */
#define G_NumReservedConstants (1) /* Constants reserved for usage by the GPU layer */ #define G_NumReservedConstants (1) /* Constants reserved for usage by the GPU layer */
#define G_NumBackendReservedConstants (1) /* Constants reserved for usage by the GPU backend layer */ #define G_NumConstants (G_NumGeneralPurposeConstants + G_NumReservedConstants)
#define G_NumConstants (G_NumGeneralPurposeConstants + G_NumReservedConstants + G_NumBackendReservedConstants)
#if IsLanguageC #if IsLanguageC
#define G_ForceDeclConstant(type, name, slot) \ #define G_ForceDeclConstant(type, name, slot) \
@ -60,24 +59,24 @@ Struct(G_SamplerStateRef) { u32 v; };
//~ Resource dereference //~ Resource dereference
#if IsLanguageG #if IsLanguageG
/* TODO: Non-uniform resource access is assumed as the default behavior. We /* TODO: Non-uniform resource access currently is assumed as the default
* may want to add explicit "uniform" variants for optimization on AMD devices * behavior. We may want to add explicit "uniform" variants for
* in the future. */ * optimization on amd in the future. */
template<typename T> StructuredBuffer<T> G_StructuredBufferFromRef(G_StructuredBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> StructuredBuffer<T> G_Dereference(G_StructuredBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> RWStructuredBuffer<T> G_RWStructuredBufferFromRef(G_RWStructuredBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> RWStructuredBuffer<T> G_Dereference(G_RWStructuredBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
ByteAddressBuffer G_ByteAddressBufferFromRef(G_ByteAddressBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } ByteAddressBuffer G_Dereference(G_ByteAddressBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
RWByteAddressBuffer G_RWByteAddressBufferFromRef(G_RWByteAddressBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } RWByteAddressBuffer G_Dereference(G_RWByteAddressBufferRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> Texture1D<T> G_Texture1DFromRef(G_Texture1DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> Texture1D<T> G_Dereference(G_Texture1DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> Texture3D<T> G_Texture3DFromRef(G_Texture3DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> Texture2D<T> G_Dereference(G_Texture2DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> RWTexture1D<T> G_RWTexture1DFromRef(G_RWTexture1DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> Texture3D<T> G_Dereference(G_Texture3DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> Texture2D<T> G_Texture2DFromRef(G_Texture2DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> RWTexture1D<T> G_Dereference(G_RWTexture1DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> RWTexture2D<T> G_RWTexture2DFromRef(G_RWTexture2DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> RWTexture2D<T> G_Dereference(G_RWTexture2DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
template<typename T> RWTexture3D<T> G_RWTexture3DFromRef(G_RWTexture3DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; } template<typename T> RWTexture3D<T> G_Dereference(G_RWTexture3DRef r) { return ResourceDescriptorHeap[NonUniformResourceIndex(r.v)]; }
SamplerState G_SamplerStateFromRef(G_SamplerStateRef r) { return SamplerDescriptorHeap[NonUniformResourceIndex(r.v)]; } SamplerState G_Dereference(G_SamplerStateRef r) { return SamplerDescriptorHeap[NonUniformResourceIndex(r.v)]; }
#endif #endif
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -115,20 +114,20 @@ G_ForceDeclConstant(G_RWByteAddressBufferRef, G_ShaderConst_DebugBufferRef, 8)
{ {
u32 data_u32[256]; u32 data_u32[256];
u32 byte_pos; u32 byte_pos;
}; };
void G_PushByteToDebug(inout G_DebugBuffer buff, u32 byte) void G_PushDebugChar(inout G_DebugBuffer buff, u32 c)
{ {
/* TODO: Overflow check */
u32 u32_arr_pos = buff.byte_pos / 4; u32 u32_arr_pos = buff.byte_pos / 4;
u32 idx_in_u32 = buff.byte_pos & 0x03; u32 idx_in_u32 = buff.byte_pos & 0x03;
buff.data_u32[u32_arr_pos] |= (byte & 0xFF) << (idx_in_u32 * 8); buff.data_u32[u32_arr_pos] |= (c & 0xFF) << (idx_in_u32 * 8);
buff.byte_pos += 1; buff.byte_pos += 1;
} }
void G_CommitDebugBuffer(G_DebugBuffer buff) void G_CommitDebugBuffer(G_DebugBuffer buff)
{ {
RWByteAddressBuffer rw = G_RWByteAddressBufferFromRef(G_ShaderConst_DebugBufferRef); RWByteAddressBuffer rw = G_Dereference(G_ShaderConst_DebugBufferRef);
u32 u32s_count = (buff.byte_pos + 3) / 4; u32 u32s_count = (buff.byte_pos + 3) / 4;
u32 alloc_size = u32s_count * 4; u32 alloc_size = u32s_count * 4;
@ -152,7 +151,7 @@ G_ForceDeclConstant(G_RWByteAddressBufferRef, G_ShaderConst_DebugBufferRef, 8)
u32 __pos = 0; \ u32 __pos = 0; \
while (U32FromChar(fmt[__pos]) != 0) \ while (U32FromChar(fmt[__pos]) != 0) \
{ \ { \
G_PushByteToDebug(__dbg, U32FromChar(fmt[__pos])); \ G_PushDebugChar(__dbg, U32FromChar(fmt[__pos])); \
++__pos; \ ++__pos; \
} \ } \
G_CommitDebugBuffer(__dbg); \ G_CommitDebugBuffer(__dbg); \

View File

@ -3,8 +3,8 @@
ComputeShader2D(V_BackdropCS, 8, 8) ComputeShader2D(V_BackdropCS, 8, 8)
{ {
V_DParams params = G_StructuredBufferFromRef<V_DParams>(V_ShaderConst_Params)[0]; V_DParams params = G_Dereference<V_DParams>(V_ShaderConst_Params)[0];
RWTexture2D<Vec4> target = G_RWTexture2DFromRef<Vec4>(params.target_rw); RWTexture2D<Vec4> target = G_Dereference<Vec4>(params.target_rw);
Vec2U32 target_pos = SV_DispatchThreadID; Vec2U32 target_pos = SV_DispatchThreadID;
Vec2I32 target_size = params.target_size; Vec2I32 target_size = params.target_size;
@ -23,9 +23,9 @@ ComputeShader2D(V_BackdropCS, 8, 8)
VertexShader(V_DQuadVS, V_DQuadPSInput) VertexShader(V_DQuadVS, V_DQuadPSInput)
{ {
V_DParams params = G_StructuredBufferFromRef<V_DParams>(V_ShaderConst_Params)[0]; V_DParams params = G_Dereference<V_DParams>(V_ShaderConst_Params)[0];
StructuredBuffer<V_DQuad> quads = G_StructuredBufferFromRef<V_DQuad>(params.quads); StructuredBuffer<V_DQuad> quads = G_Dereference<V_DQuad>(params.quads);
RWTexture2D<Vec4> target = G_RWTexture2DFromRef<Vec4>(params.target_rw); RWTexture2D<Vec4> target = G_Dereference<Vec4>(params.target_rw);
V_DQuad quad = quads[SV_InstanceID]; V_DQuad quad = quads[SV_InstanceID];
@ -45,8 +45,8 @@ VertexShader(V_DQuadVS, V_DQuadPSInput)
PixelShader(V_DQuadPS, V_DQuadPSOutput, V_DQuadPSInput input) PixelShader(V_DQuadPS, V_DQuadPSOutput, V_DQuadPSInput input)
{ {
V_DParams params = G_StructuredBufferFromRef<V_DParams>(V_ShaderConst_Params)[0]; V_DParams params = G_Dereference<V_DParams>(V_ShaderConst_Params)[0];
StructuredBuffer<V_DQuad> quads = G_StructuredBufferFromRef<V_DQuad>(params.quads); StructuredBuffer<V_DQuad> quads = G_Dereference<V_DQuad>(params.quads);
V_DQuad quad = quads[input.quad_idx]; V_DQuad quad = quads[input.quad_idx];
Vec4 final_color = 0; Vec4 final_color = 0;
@ -64,9 +64,9 @@ PixelShader(V_DQuadPS, V_DQuadPSOutput, V_DQuadPSInput input)
VertexShader(V_DVertVS, V_DVertPSInput) VertexShader(V_DVertVS, V_DVertPSInput)
{ {
V_DParams params = G_StructuredBufferFromRef<V_DParams>(V_ShaderConst_Params)[0]; V_DParams params = G_Dereference<V_DParams>(V_ShaderConst_Params)[0];
StructuredBuffer<V_DVert> verts = G_StructuredBufferFromRef<V_DVert>(params.shape_verts); StructuredBuffer<V_DVert> verts = G_Dereference<V_DVert>(params.shape_verts);
RWTexture2D<Vec4> target = G_RWTexture2DFromRef<Vec4>(params.target_rw); RWTexture2D<Vec4> target = G_Dereference<Vec4>(params.target_rw);
V_DVert vert = verts[SV_VertexID]; V_DVert vert = verts[SV_VertexID];

View File

@ -8,9 +8,9 @@ Struct(TestStruct)
ComputeShader2D(PT_TestCS, 8, 8) ComputeShader2D(PT_TestCS, 8, 8)
{ {
StructuredBuffer<TestStruct> sb = G_StructuredBufferFromRef<TestStruct>(PT_ShaderConst_TestBuff); StructuredBuffer<TestStruct> sb = G_Dereference<TestStruct>(PT_ShaderConst_TestBuff);
RWTexture2D<Vec4> target_tex = G_RWTexture2DFromRef<Vec4>(PT_ShaderConst_TestTarget); RWTexture2D<Vec4> target_tex = G_Dereference<Vec4>(PT_ShaderConst_TestTarget);
Vec2U32 target_tex_size = countof(target_tex); Vec2U32 target_tex_size = countof(target_tex);
Vec2I32 id = SV_DispatchThreadID; Vec2I32 id = SV_DispatchThreadID;
@ -51,9 +51,9 @@ VertexShader(PT_BlitVS, PT_BlitPSInput)
PixelShader(PT_BlitPS, PT_BlitPSOutput, PT_BlitPSInput input) PixelShader(PT_BlitPS, PT_BlitPSOutput, PT_BlitPSInput input)
{ {
SamplerState sampler = G_SamplerStateFromRef(PT_ShaderConst_BlitSampler); SamplerState sampler = G_Dereference(PT_ShaderConst_BlitSampler);
Texture2D<Vec4> tex = G_Texture2DFromRef<Vec4>(PT_ShaderConst_BlitSrc); Texture2D<Vec4> tex = G_Dereference<Vec4>(PT_ShaderConst_BlitSrc);
Texture3D<u32> noise = G_Texture3DFromRef<u32>(PT_ShaderConst_NoiseTex); Texture3D<u32> noise = G_Dereference<u32>(PT_ShaderConst_NoiseTex);
Vec2 uv = input.src_uv; Vec2 uv = input.src_uv;
Vec4 tex_col = tex.Sample(sampler, uv); Vec4 tex_col = tex.Sample(sampler, uv);

View File

@ -6,8 +6,8 @@
VertexShader(UI_DRectVS, UI_DRectPSInput) VertexShader(UI_DRectVS, UI_DRectPSInput)
{ {
UI_DParams params = G_StructuredBufferFromRef<UI_DParams>(UI_ShaderConst_Params)[0]; UI_DParams params = G_Dereference<UI_DParams>(UI_ShaderConst_Params)[0];
StructuredBuffer<UI_DRect> rects = G_StructuredBufferFromRef<UI_DRect>(params.rects); StructuredBuffer<UI_DRect> rects = G_Dereference<UI_DRect>(params.rects);
UI_DRect rect = rects[SV_InstanceID]; UI_DRect rect = rects[SV_InstanceID];
Vec2 rect_uv = RectUvFromVertexId(SV_VertexID); Vec2 rect_uv = RectUvFromVertexId(SV_VertexID);
@ -31,9 +31,9 @@ VertexShader(UI_DRectVS, UI_DRectPSInput)
PixelShader(UI_DRectPS, UI_DRectPSOutput, UI_DRectPSInput input) PixelShader(UI_DRectPS, UI_DRectPSOutput, UI_DRectPSInput input)
{ {
UI_DParams params = G_StructuredBufferFromRef<UI_DParams>(UI_ShaderConst_Params)[0]; UI_DParams params = G_Dereference<UI_DParams>(UI_ShaderConst_Params)[0];
StructuredBuffer<UI_DRect> rects = G_StructuredBufferFromRef<UI_DRect>(params.rects); StructuredBuffer<UI_DRect> rects = G_Dereference<UI_DRect>(params.rects);
SamplerState sampler = G_SamplerStateFromRef(params.sampler); SamplerState sampler = G_Dereference(params.sampler);
UI_DRect rect = rects[input.rect_idx]; UI_DRect rect = rects[input.rect_idx];
@ -93,7 +93,7 @@ PixelShader(UI_DRectPS, UI_DRectPSOutput, UI_DRectPSInput input)
} }
else if (!G_IsRefNil(rect.tex)) else if (!G_IsRefNil(rect.tex))
{ {
Texture2D<Vec4> tex = G_Texture2DFromRef<Vec4>(rect.tex); Texture2D<Vec4> tex = G_Dereference<Vec4>(rect.tex);
background_color = tex.Sample(sampler, input.tex_uv); background_color = tex.Sample(sampler, input.tex_uv);
} }
else else
@ -138,9 +138,9 @@ VertexShader(UI_BlitVS, UI_BlitPSInput)
PixelShader(UI_BlitPS, UI_BlitPSOutput, UI_BlitPSInput input) PixelShader(UI_BlitPS, UI_BlitPSOutput, UI_BlitPSInput input)
{ {
UI_DParams params = G_StructuredBufferFromRef<UI_DParams>(UI_ShaderConst_Params)[0]; UI_DParams params = G_Dereference<UI_DParams>(UI_ShaderConst_Params)[0];
Texture2D<Vec4> tex = G_Texture2DFromRef<Vec4>(params.target_ro); Texture2D<Vec4> tex = G_Dereference<Vec4>(params.target_ro);
SamplerState sampler = G_SamplerStateFromRef(params.sampler); SamplerState sampler = G_Dereference(params.sampler);
Vec2 uv = input.src_uv; Vec2 uv = input.src_uv;
Vec4 result = tex.Sample(sampler, uv); Vec4 result = tex.Sample(sampler, uv);