diff --git a/src/base/base.h b/src/base/base.h index ae9c7544..5c2146b1 100644 --- a/src/base/base.h +++ b/src/base/base.h @@ -369,20 +369,6 @@ void __asan_unpoison_memory_region(void const volatile *add, size_t); #define ColorOrange Rgb32(0xFF, 0xA5, 0x00) #define ColorPurple Rgb32(0xFF, 0x00, 0XFF) -//////////////////////////////// -//~ Gpu helpers - -#if LanguageIsGpu -//- Resource heap index -# define GpuResourceFromUrid(urid) ResourceDescriptorHeap[(urid)] -# define GpuResourceFromNurid(nurid) ResourceDescriptorHeap[NonUniformResourceIndex((nurid))] -# define GpuSamplerFromUrid(urid) SamplerDescriptorHeap[(urid)] -# define GpuSamplerFromNurid(nurid) SamplerDescriptorHeap[NonUniformResourceIndex((nurid))] - -//- Semantic declaration -# define Semantic(t, n) t n : n -#endif - //////////////////////////////// //~ Intrinsic headers @@ -695,6 +681,7 @@ Struct(Resource) #if LanguageIsC + Struct(VertexShader) { Resource resource; }; Struct(PixelShader) { Resource resource; }; Struct(ComputeShader) { Resource resource; }; @@ -703,8 +690,31 @@ Struct(ComputeShader) { Resource resource; }; # define PSDecl(name) extern PixelShader name; # define CSDecl(name) extern ComputeShader name; +//- Resource descriptor index types +Struct(StructuredBufferRid) { u32 v; }; +Struct(RWStructuredBufferRid) { u32 v; }; +Struct(Texture1DRid) { u32 v; }; +Struct(Texture2DRid) { u32 v; }; +Struct(Texture3DRid) { u32 v; }; +Struct(RWTexture1DRid) { u32 v; }; +Struct(RWTexture2DRid) { u32 v; }; +Struct(RWTexture3DRid) { u32 v; }; +Struct(SamplerStateRid) { u32 v; }; + #elif LanguageIsGpu +//- Resource descriptor index types +typedef uint StructuredBufferRid; +typedef uint RWStructuredBufferRid; +typedef uint Texture1DRid; +typedef uint Texture2DRid; +typedef uint Texture3DRid; +typedef uint RWTexture1DRid; +typedef uint RWTexture2DRid; +typedef uint RWTexture3DRid; +typedef uint SamplerStateRid; + +//- Shader declaration # define VSDecl(name) # define PSDecl(name) # define CSDecl(name) @@ -713,6 +723,15 @@ Struct(ComputeShader) { Resource resource; }; # define PSDef(name, ...) name(__VA_ARGS__) # define CSDef(name, ...) name(__VA_ARGS__) +//- Semantic declaration +# define Semantic(t, n) t n : n + +//- Descriptor heap index +# define UniformResourceFromRid(rid) ResourceDescriptorHeap[rid] +# define UniformSamplerFromRid(rid) SamplerDescriptorHeap[rid] +# define NonUniformResourceFromRid(rid) ResourceDescriptorHeap[NonUniformResourceIndex(rid)] +# define NonUniformSamplerFromRid(rid) SamplerDescriptorHeap[NonUniformResourceIndex(rid)] + #endif //////////////////////////////// diff --git a/src/config.h b/src/config.h index ad4e4af4..42c7ace3 100644 --- a/src/config.h +++ b/src/config.h @@ -69,7 +69,7 @@ #define FLOOD_DEBUG 0 -#define GPU_DEBUG 1 +#define GPU_DEBUG 0 /* If virtual fibers are enabled, each fiber will get its own OS thread, * and fiber suspend/resume will be emulated using OS thread primitives. @@ -96,4 +96,4 @@ #define VSYNC !RtcIsEnabled #define AUDIO_ENABLED 0 -#define FPS_LIMIT 300 +#define FPS_LIMIT 0 diff --git a/src/gpu/gpu.h b/src/gpu/gpu.h index d2f82f68..7ee39c7e 100644 --- a/src/gpu/gpu.h +++ b/src/gpu/gpu.h @@ -380,13 +380,23 @@ GPU_Scissor GPU_ScissorFromRect(Rect rect); GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc); void GPU_ReleaseResource(GPU_Resource *resource, GPU_ReleaseFlag flags); -u32 GPU_GetReadableId(GPU_Resource *resource); -u32 GPU_GetWritableId(GPU_Resource *resource); -u32 GPU_GetSamplerId(GPU_Resource *resource); Vec2I32 GPU_GetTextureSize2D(GPU_Resource *resource); Vec3I32 GPU_GetTextureSize3D(GPU_Resource *resource); u64 GPU_GetFootprintSize(GPU_Resource *resource); +//////////////////////////////// +//~ @hookdecl Resource index operations + +StructuredBufferRid GPU_StructuredBufferRidFromResource(GPU_Resource *resource); +RWStructuredBufferRid GPU_RWStructuredBufferRidFromResource(GPU_Resource *resource); +Texture1DRid GPU_Texture1DRidFromResource(GPU_Resource *resource); +Texture2DRid GPU_Texture2DRidFromResource(GPU_Resource *resource); +Texture3DRid GPU_Texture3DRidFromResource(GPU_Resource *resource); +RWTexture1DRid GPU_RWTexture1DRidFromResource(GPU_Resource *resource); +RWTexture2DRid GPU_RWTexture2DRidFromResource(GPU_Resource *resource); +RWTexture3DRid GPU_RWTexture3DRidFromResource(GPU_Resource *resource); +SamplerStateRid GPU_SamplerStateRidFromResource(GPU_Resource *resource); + //////////////////////////////// //~ @hookdecl Command list operations diff --git a/src/gpu/gpu_dx12/gpu_dx12.c b/src/gpu/gpu_dx12/gpu_dx12.c index 17b0ccac..89e42a53 100644 --- a/src/gpu/gpu_dx12/gpu_dx12.c +++ b/src/gpu/gpu_dx12/gpu_dx12.c @@ -147,7 +147,7 @@ void GPU_D12_InitDevice(void) ID3D12Debug_EnableDebugLayer(debug_controller0); /* FIXME: Enable this */ - // ID3D12Debug1_SetEnableGPUBasedValidation(debug_controller1, 1); + ID3D12Debug1_SetEnableGPUBasedValidation(debug_controller1, 1); ID3D12Debug_Release(debug_controller1); ID3D12Debug_Release(debug_controller0); @@ -568,6 +568,7 @@ GPU_D12_Descriptor *GPU_D12_AcquireDescriptor(GPU_D12_DescriptorHeap *heap) Unlock(&lock); } ZeroStruct(d); + d->valid = 1; d->heap = heap; d->handle = handle; d->index = index; @@ -954,7 +955,7 @@ void GPU_Startup(void) } //////////////////////////////// -//~ @hookdecl Fence hooks +//~ @hookdef Fence hooks Fence *GPU_FenceFromQueue(GPU_QueueKind queue_kind) { @@ -1150,12 +1151,17 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) } } + r->srv_descriptor = &GPU_D12_NilDescriptor; + r->uav_descriptor = &GPU_D12_NilDescriptor; + r->rtv_descriptor = &GPU_D12_NilDescriptor; + r->sampler_descriptor = &GPU_D12_NilDescriptor; + /* Create texture srv descriptor */ if (desc.kind == GPU_ResourceKind_Texture1D || desc.kind == GPU_ResourceKind_Texture2D || desc.kind == GPU_ResourceKind_Texture3D) { - if (!r->srv_descriptor) + if (!r->srv_descriptor->valid) { r->srv_descriptor = GPU_D12_AcquireDescriptor(g->cbv_srv_uav_heap); } @@ -1167,7 +1173,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) && desc.buffer.heap_kind != GPU_HeapKind_Download && desc.buffer.count > 0) { - if (!r->srv_descriptor) + if (!r->srv_descriptor->valid) { r->srv_descriptor = GPU_D12_AcquireDescriptor(g->cbv_srv_uav_heap); } @@ -1185,7 +1191,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) /* Create uav descriptor */ if (desc.flags & GPU_ResourceFlag_Writable) { - if (!r->uav_descriptor) + if (!r->uav_descriptor->valid) { r->uav_descriptor = GPU_D12_AcquireDescriptor(g->cbv_srv_uav_heap); } @@ -1195,7 +1201,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) /* Create rtv descriptor */ if (desc.flags & GPU_ResourceFlag_Renderable) { - if (!r->rtv_descriptor) + if (!r->rtv_descriptor->valid) { r->rtv_descriptor = GPU_D12_AcquireDescriptor(g->rtv_heap); } @@ -1205,7 +1211,7 @@ GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) /* Create sampler descriptor */ if (desc.kind == GPU_ResourceKind_Sampler) { - if (!r->sampler_descriptor) + if (!r->sampler_descriptor->valid) { r->sampler_descriptor = GPU_D12_AcquireDescriptor(g->sampler_heap); } @@ -1246,25 +1252,21 @@ void GPU_ReleaseResource(GPU_Resource *gpu_resource, GPU_ReleaseFlag flags) GPU_D12_SharedState *g = &GPU_D12_shared_state; GPU_D12_Resource *r = (GPU_D12_Resource *)gpu_resource; - if (r->srv_descriptor) + if (r->srv_descriptor->valid) { GPU_D12_ReleaseDescriptor(r->srv_descriptor); - r->srv_descriptor = 0; } - if (r->uav_descriptor) + if (r->uav_descriptor->valid) { GPU_D12_ReleaseDescriptor(r->uav_descriptor); - r->uav_descriptor = 0; } - if (r->rtv_descriptor) + if (r->rtv_descriptor->valid) { GPU_D12_ReleaseDescriptor(r->rtv_descriptor); - r->rtv_descriptor = 0; } - if (r->sampler_descriptor) + if (r->sampler_descriptor->valid) { GPU_D12_ReleaseDescriptor(r->sampler_descriptor); - r->sampler_descriptor = 0; } if (flags & GPU_ReleaseFlag_Reuse) @@ -1324,39 +1326,6 @@ void GPU_ReleaseResource(GPU_Resource *gpu_resource, GPU_ReleaseFlag flags) } -u32 GPU_GetReadableId(GPU_Resource *gpu_resource) -{ - u32 result = U32Max; - GPU_D12_Resource *r = (GPU_D12_Resource *)gpu_resource; - if (r && r->srv_descriptor) - { - result = r->srv_descriptor->index; - } - return result; -} - -u32 GPU_GetWritableId(GPU_Resource *gpu_resource) -{ - u32 result = U32Max; - GPU_D12_Resource *r = (GPU_D12_Resource *)gpu_resource; - if (r && r->uav_descriptor) - { - result = r->uav_descriptor->index; - } - return result; -} - -u32 GPU_GetSamplerId(GPU_Resource *gpu_resource) -{ - u32 result = U32Max; - GPU_D12_Resource *r = (GPU_D12_Resource *)gpu_resource; - if (r && r->sampler_descriptor) - { - result = r->sampler_descriptor->index; - } - return result; -} - Vec2I32 GPU_GetTextureSize2D(GPU_Resource *gpu_resource) { GPU_D12_Resource *resource = (GPU_D12_Resource *)gpu_resource; @@ -1382,6 +1351,19 @@ u64 GPU_GetFootprintSize(GPU_Resource *gpu_resource) return footprint_size; } +//////////////////////////////// +//~ @hookdef Resource index hooks + +StructuredBufferRid GPU_StructuredBufferRidFromResource(GPU_Resource *resource) { return (StructuredBufferRid) { ((GPU_D12_Resource *)resource)->srv_descriptor->index }; } +RWStructuredBufferRid GPU_RWStructuredBufferRidFromResource(GPU_Resource *resource) { return (RWStructuredBufferRid) { ((GPU_D12_Resource *)resource)->uav_descriptor->index }; } +Texture1DRid GPU_Texture1DRidFromResource(GPU_Resource *resource) { return (Texture1DRid) { ((GPU_D12_Resource *)resource)->srv_descriptor->index }; } +Texture2DRid GPU_Texture2DRidFromResource(GPU_Resource *resource) { return (Texture2DRid) { ((GPU_D12_Resource *)resource)->srv_descriptor->index }; } +Texture3DRid GPU_Texture3DRidFromResource(GPU_Resource *resource) { return (Texture3DRid) { ((GPU_D12_Resource *)resource)->srv_descriptor->index }; } +RWTexture1DRid GPU_RWTexture1DRidFromResource(GPU_Resource *resource) { return (RWTexture1DRid) { ((GPU_D12_Resource *)resource)->uav_descriptor->index }; } +RWTexture2DRid GPU_RWTexture2DRidFromResource(GPU_Resource *resource) { return (RWTexture2DRid) { ((GPU_D12_Resource *)resource)->uav_descriptor->index }; } +RWTexture3DRid GPU_RWTexture3DRidFromResource(GPU_Resource *resource) { return (RWTexture3DRid) { ((GPU_D12_Resource *)resource)->uav_descriptor->index }; } +SamplerStateRid GPU_SamplerStateRidFromResource(GPU_Resource *resource) { return (SamplerStateRid) { ((GPU_D12_Resource *)resource)->sampler_descriptor->index }; } + //////////////////////////////// //~ @hookdef Command list hooks diff --git a/src/gpu/gpu_dx12/gpu_dx12.h b/src/gpu/gpu_dx12/gpu_dx12.h index af1ca705..b083e5bd 100644 --- a/src/gpu/gpu_dx12/gpu_dx12.h +++ b/src/gpu/gpu_dx12/gpu_dx12.h @@ -61,8 +61,11 @@ Struct(GPU_D12_Descriptor) GPU_D12_Descriptor *next_free; struct GPU_D12_DescriptorHeap *heap; + b32 valid; u32 index; D3D12_CPU_DESCRIPTOR_HANDLE handle; +} extern Readonly GPU_D12_NilDescriptor = { + .index = U32Max }; Struct(GPU_D12_DescriptorHeap) diff --git a/src/meta/meta.c b/src/meta/meta.c index 41cf5615..f27bf08b 100644 --- a/src/meta/meta.c +++ b/src/meta/meta.c @@ -952,8 +952,10 @@ JobDef(Build, _, __) //- Dxc { - PushStringToList(arena, &cp.flags_dxc, Lit("-O0")); +#if GPU_DEBUG + PushStringToList(arena, &cp.flags_dxc, Lit("-Od")); PushStringToList(arena, &cp.flags_dxc, Lit("-Zi -Qembed_debug")); +#endif // PushStringToList(arena, &cp.flags_dxc, Lit("-fno-caret-diagnostics")); } } diff --git a/src/platform/platform_win32/platform_win32.c b/src/platform/platform_win32/platform_win32.c index 7028bfa8..2e0786d1 100644 --- a/src/platform/platform_win32/platform_win32.c +++ b/src/platform/platform_win32/platform_win32.c @@ -1838,7 +1838,7 @@ String P_GetClipboardText(Arena *arena) } //////////////////////////////// -//~ @hookdecl Timer hooks +//~ @hookdef Timer hooks Fence *P_GetTimerFence() { diff --git a/src/pp/pp.c b/src/pp/pp.c index 3f9ad4b3..a639e904 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -1249,7 +1249,7 @@ void UpdateUser(P_Window *window) MaterialInstance *mat = PushStruct(g->material_instances_arena, MaterialInstance); *mat = DefaultMaterialInstance; mat->xf = sprite_xform; - mat->tex_nurid = GPU_GetReadableId(texture->gpu_texture); + mat->tex = GPU_Texture2DRidFromResource(texture->gpu_texture); mat->tint_srgb = tint; mat->uv0 = frame.clip.p0; mat->uv1 = frame.clip.p1; @@ -1284,7 +1284,7 @@ void UpdateUser(P_Window *window) MaterialInstance *mat = PushStruct(g->material_instances_arena, MaterialInstance); *mat = DefaultMaterialInstance; mat->xf = tile_xf; - mat->tex_nurid = GPU_GetReadableId(tile_texture->gpu_texture); + mat->tex = GPU_Texture2DRidFromResource(tile_texture->gpu_texture); mat->is_light = 1; mat->light_emittance_srgb = VEC3(0, 0, 0); } @@ -2311,10 +2311,10 @@ void UpdateUser(P_Window *window) GPU_Scissor scissor = GPU_ScissorFromRect(render_viewport); MaterialSig sig = ZI; - sig.tex_sampler_urid = GPU_GetSamplerId(g->pt_sampler); sig.projection = world_to_render_vp_matrix; - sig.instances_urid = GPU_GetReadableId(material_instance_buffer); - sig.grids_urid = GPU_GetReadableId(grids_buffer); + sig.sampler = GPU_SamplerStateRidFromResource(g->pt_sampler); + sig.instances = GPU_StructuredBufferRidFromResource(material_instance_buffer); + sig.grids = GPU_StructuredBufferRidFromResource(grids_buffer); GPU_Rasterize(cl, &sig, MaterialVS, MaterialPS, @@ -2353,9 +2353,9 @@ void UpdateUser(P_Window *window) FloodSig sig = ZI; sig.step_len = step_length; - sig.emittance_tex_urid = GPU_GetReadableId(g->emittance); - sig.read_flood_tex_urid = GPU_GetWritableId(g->emittance_flood_read); - sig.target_flood_tex_urid = GPU_GetWritableId(g->emittance_flood_target); + sig.emittance = GPU_Texture2DRidFromResource(g->emittance); + sig.read = GPU_RWTexture2DRidFromResource(g->emittance_flood_read); + sig.target = GPU_RWTexture2DRidFromResource(g->emittance_flood_target); sig.tex_width = g->render_size.x; sig.tex_height = g->render_size.y; GPU_Compute(cl, &sig, FloodCS, (g->render_size.x + 7) / 8, (g->render_size.y + 7) / 8, 1); @@ -2411,12 +2411,12 @@ void UpdateUser(P_Window *window) (u32)(RandU64FromState(&g->frame_rand) & 0xFFFFFFFF)); sig.frame_index = g->frame_index; sig.camera_offset = g->world_to_render_xf.og; - sig.albedo_tex_urid = GPU_GetReadableId(g->albedo); - sig.emittance_tex_urid = GPU_GetReadableId(g->emittance); - sig.noise_tex_urid = GPU_GetReadableId(g->gpu_noise); - sig.emittance_flood_tex_urid = GPU_GetWritableId(g->emittance_flood_read); - sig.read_tex_urid = GPU_GetWritableId(g->shade_read); - sig.target_tex_urid = GPU_GetWritableId(g->shade_target); + sig.noise = GPU_Texture3DRidFromResource(g->gpu_noise); + sig.albedo = GPU_Texture2DRidFromResource(g->albedo); + sig.emittance = GPU_Texture2DRidFromResource(g->emittance); + sig.emittance_flood = GPU_Texture2DRidFromResource(g->emittance_flood_read); + sig.read = GPU_Texture2DRidFromResource(g->shade_read); + sig.target = GPU_RWTexture2DRidFromResource(g->shade_target); sig.noise_tex_width = noise_size.x; sig.noise_tex_height = noise_size.y; sig.noise_tex_depth = noise_size.z; @@ -2446,12 +2446,12 @@ void UpdateUser(P_Window *window) GPU_Scissor scissor = GPU_ScissorFromRect(ui_viewport); UiBlitSig sig = ZI; - sig.tex_sampler_urid = GPU_GetSamplerId(g->pt_sampler); + sig.sampler = GPU_SamplerStateRidFromResource(g->pt_sampler); + sig.src = GPU_Texture2DRidFromResource(g->shade_read); sig.projection = blit_vp_matrix; sig.flags = UiBlitFlag_ToneMap | UiBlitFlag_GammaCorrect; sig.exposure = 2.0; sig.gamma = (f32)2.2; - sig.tex_urid = GPU_GetWritableId(g->shade_read); GPU_Rasterize(cl, &sig, UiBlitVS, UiBlitPS, @@ -2471,10 +2471,10 @@ void UpdateUser(P_Window *window) GPU_Viewport viewport = GPU_ViewportFromRect(ui_viewport); GPU_Scissor scissor = GPU_ScissorFromRect(ui_viewport); - UiRectSig sig = ZI; - sig.projection = ui_vp_matrix; - sig.tex_sampler_urid = GPU_GetSamplerId(g->pt_sampler); - sig.instances_urid = GPU_GetReadableId(ui_rect_instance_buffer); + UiRectSig sig = ZI; + sig.projection = ui_vp_matrix; + sig.sampler = GPU_SamplerStateRidFromResource(g->pt_sampler); + sig.instances = GPU_StructuredBufferRidFromResource(ui_rect_instance_buffer); GPU_Rasterize(cl, &sig, UiRectVS, UiRectPS, @@ -2496,7 +2496,7 @@ void UpdateUser(P_Window *window) UiShapeSig sig = ZI; sig.projection = ui_vp_matrix; - sig.verts_urid = GPU_GetReadableId(ui_shape_verts_buffer); + sig.verts = GPU_StructuredBufferRidFromResource(ui_shape_verts_buffer); GPU_Rasterize(cl, &sig, UiShapeVS, UiShapePS, @@ -2564,11 +2564,13 @@ JobDef(UpdateUserOrSleep, UNUSED sig, UNUSED id) __profn("Swapchain wait"); GPU_YieldOnSwapchain(g->swapchain); } +#if FPS_LIMIT > 0 { __profn("Frame limiter wait"); P_SleepFrame(time_ns, 1000000000 / FPS_LIMIT); time_ns = TimeNs(); } +#endif } UpdateUser(window); } diff --git a/src/pp/pp_draw.gpu b/src/pp/pp_draw.gpu index daa1cb74..fa6841e5 100644 --- a/src/pp/pp_draw.gpu +++ b/src/pp/pp_draw.gpu @@ -11,7 +11,7 @@ ConstantBuffer ui_shape_sig : register (b0); Struct(MaterialPS_Input) { Semantic(Vec4, sv_position); - Semantic(nointerpolation u32, tex_nurid); + Semantic(nointerpolation Texture2DRid, tex); Semantic(nointerpolation u32, grid_id); Semantic(Vec2, uv); Semantic(Vec4, tint_lin); @@ -26,7 +26,7 @@ Struct(MaterialPS_Output) //- Vertex shader -MaterialPS_Input VSDef(MaterialVS, Semantic(u32, SV_InstanceID), Semantic(u32, SV_VertexID)) +MaterialPS_Input VSDef(MaterialVS, Semantic(u32, sv_instanceid), Semantic(u32, sv_vertexid)) { ConstantBuffer sig = mat_sig; static const Vec2 unit_quad_verts[4] = { @@ -35,16 +35,16 @@ MaterialPS_Input VSDef(MaterialVS, Semantic(u32, SV_InstanceID), Semantic(u32, S Vec2(0.5f, 0.5f), Vec2(-0.5f, 0.5f) }; - StructuredBuffer instances = GpuResourceFromUrid(sig.instances_urid); - Vec2 vert = unit_quad_verts[SV_VertexID]; - MaterialInstance instance = instances[SV_InstanceID]; + StructuredBuffer instances = UniformResourceFromRid(sig.instances); + Vec2 vert = unit_quad_verts[sv_vertexid]; + MaterialInstance instance = instances[sv_instanceid]; Vec2 world_pos = mul(instance.xf, Vec3(vert, 1)).xy; MaterialPS_Input output; output.sv_position = mul(sig.projection, Vec4(world_pos, 0, 1)); - output.tex_nurid = instance.tex_nurid; + output.tex = instance.tex; output.grid_id = instance.grid_id; output.uv = instance.uv0 + ((vert + 0.5) * (instance.uv1 - instance.uv0)); output.tint_lin = LinearFromSrgbU32(instance.tint_srgb); @@ -62,17 +62,18 @@ MaterialPS_Output PSDef(MaterialPS, MaterialPS_Input input) Vec4 albedo = input.tint_lin; /* Texture */ - if (input.tex_nurid < 0xFFFFFFFF) + if (input.tex < 0xFFFFFFFF) { - SamplerState sampler = GpuSamplerFromUrid(sig.tex_sampler_urid); - Texture2D tex = GpuResourceFromNurid(input.tex_nurid); + SamplerState sampler = UniformSamplerFromRid(sig.sampler); + Texture2D tex = NonUniformResourceFromRid(input.tex); albedo *= tex.Sample(sampler, input.uv); } /* Grid */ if (input.grid_id < 0xFFFFFFFF) { - StructuredBuffer grids = GpuResourceFromUrid(sig.grids_urid); + // StructuredBuffer grids = UniformResourceFromRid(sig.grids); + StructuredBuffer grids = ResourceDescriptorHeap[sig.grids]; MaterialGrid grid = grids[input.grid_id]; Vec2 grid_pos = input.sv_position.xy + grid.offset; f32 half_thickness = grid.line_thickness / 2; @@ -127,17 +128,17 @@ MaterialPS_Output PSDef(MaterialPS, MaterialPS_Input input) //- Compute shader [numthreads(8, 8, 1)] -void CSDef(FloodCS, Semantic(Vec3U32, SV_DispatchThreadID)) +void CSDef(FloodCS, Semantic(Vec3U32, sv_dispatchthreadid)) { ConstantBuffer sig = flood_sig; - Vec2U32 id = SV_DispatchThreadID.xy; + Vec2U32 id = sv_dispatchthreadid.xy; Vec2U32 tex_size = Vec2U32(sig.tex_width, sig.tex_height); if (id.x < tex_size.x && id.y < tex_size.y) { - Texture2D emittance_tex = GpuResourceFromUrid(sig.emittance_tex_urid); - RWTexture2D read_flood_tex = GpuResourceFromUrid(sig.read_flood_tex_urid); - RWTexture2D target_flood_tex = GpuResourceFromUrid(sig.target_flood_tex_urid); + Texture2D emittance_tex = UniformResourceFromRid(sig.emittance); + RWTexture2D read_flood_tex = UniformResourceFromRid(sig.read); + RWTexture2D target_flood_tex = UniformResourceFromRid(sig.target); i32 step_len = sig.step_len; if (step_len == -1) { @@ -196,7 +197,7 @@ void CSDef(FloodCS, Semantic(Vec3U32, SV_DispatchThreadID)) f32 RandAngle(Vec2U32 pos, u32 ray_index) { ConstantBuffer sig = shade_sig; - Texture3D noise_tex = GpuResourceFromUrid(sig.noise_tex_urid); + Texture3D noise_tex = UniformResourceFromRid(sig.noise); Vec3I32 noise_coord = Vec3U32(1, 1, 1); noise_coord += Vec3I32(pos.xy, ray_index); @@ -210,8 +211,8 @@ f32 RandAngle(Vec2U32 pos, u32 ray_index) Vec3 ColorFromDir(Vec2U32 ray_start, Vec2 ray_dir) { ConstantBuffer sig = shade_sig; - Texture2D flood_tex = GpuResourceFromUrid(sig.emittance_flood_tex_urid); - Texture2D emittance_tex = GpuResourceFromUrid(sig.emittance_tex_urid); + Texture2D flood_tex = UniformResourceFromRid(sig.emittance_flood); + Texture2D emittance_tex = UniformResourceFromRid(sig.emittance); Vec3 result = Vec3(0, 0, 0); Vec2 at_f32 = ray_start; @@ -261,16 +262,16 @@ Vec3 ColorFromPos(Vec2U32 pos) //- Compute shader [numthreads(8, 8, 1)] -void CSDef(ShadeCS, Semantic(Vec3U32, SV_DispatchThreadID)) +void CSDef(ShadeCS, Semantic(Vec3U32, sv_dispatchthreadid)) { ConstantBuffer sig = shade_sig; - Vec2U32 id = SV_DispatchThreadID.xy; + Vec2U32 id = sv_dispatchthreadid.xy; if (id.x < sig.tex_width && id.y < sig.tex_height) { - Texture2D albedo_tex = GpuResourceFromUrid(sig.albedo_tex_urid); - Texture2D read_tex = GpuResourceFromUrid(sig.read_tex_urid); - RWTexture2D target_tex = GpuResourceFromUrid(sig.target_tex_urid); + Texture2D albedo_tex = UniformResourceFromRid(sig.albedo); + Texture2D read_tex = UniformResourceFromRid(sig.read); + RWTexture2D target_tex = UniformResourceFromRid(sig.target); Vec4 color = Vec4(1, 1, 1, 1); /* Apply albedo */ @@ -318,7 +319,7 @@ Vec3 ToneMap(Vec3 v) //- Vertex shader -UiBlitPS_Input VSDef(UiBlitVS, Semantic(u32, SV_VertexID)) +UiBlitPS_Input VSDef(UiBlitVS, Semantic(u32, sv_vertexid)) { ConstantBuffer sig = ui_blit_sig; static const Vec2 unit_quad_verts[4] = { @@ -327,7 +328,7 @@ UiBlitPS_Input VSDef(UiBlitVS, Semantic(u32, SV_VertexID)) Vec2(0.5f, 0.5f), Vec2(-0.5f, 0.5f) }; - Vec2 vert = unit_quad_verts[SV_VertexID]; + Vec2 vert = unit_quad_verts[sv_vertexid]; UiBlitPS_Input output; output.sv_position = mul(sig.projection, Vec4(vert, 0, 1)); @@ -340,10 +341,10 @@ UiBlitPS_Input VSDef(UiBlitVS, Semantic(u32, SV_VertexID)) UiBlitPS_Output PSDef(UiBlitPS, UiBlitPS_Input input) { ConstantBuffer sig = ui_blit_sig; - SamplerState sampler = GpuSamplerFromUrid(sig.tex_sampler_urid); + SamplerState sampler = UniformSamplerFromRid(sig.sampler); UiBlitPS_Output output; - Texture2D tex = GpuResourceFromUrid(sig.tex_urid); + Texture2D tex = UniformResourceFromRid(sig.src); Vec4 color = tex.Sample(sampler, input.uv); /* Apply tone map */ @@ -370,7 +371,7 @@ UiBlitPS_Output PSDef(UiBlitPS, UiBlitPS_Input input) Struct(UiRectPS_Input) { Semantic(Vec4, sv_position); - Semantic(nointerpolation u32, tex_nurid); + Semantic(nointerpolation Texture2DRid, tex); Semantic(Vec2, uv); Semantic(Vec4, tint_srgb); }; @@ -382,7 +383,7 @@ Struct(UiRectPS_Output) //- Vertex shader -UiRectPS_Input VSDef(UiRectVS, Semantic(u32, SV_InstanceID), Semantic(u32, SV_VertexID)) +UiRectPS_Input VSDef(UiRectVS, Semantic(u32, sv_instanceid), Semantic(u32, sv_vertexid)) { ConstantBuffer sig = ui_rect_sig; static const Vec2 unit_quad_verts[4] = { @@ -392,14 +393,14 @@ UiRectPS_Input VSDef(UiRectVS, Semantic(u32, SV_InstanceID), Semantic(u32, SV_Ve Vec2(-0.5f, 0.5f) }; - StructuredBuffer instances = GpuResourceFromUrid(sig.instances_urid); - UiRectInstance instance = instances[SV_InstanceID]; - Vec2 vert = unit_quad_verts[SV_VertexID]; + StructuredBuffer instances = UniformResourceFromRid(sig.instances); + UiRectInstance instance = instances[sv_instanceid]; + Vec2 vert = unit_quad_verts[sv_vertexid]; Vec2 world_pos = mul(instance.xf, Vec3(vert, 1)).xy; UiRectPS_Input output; output.sv_position = mul(sig.projection, Vec4(world_pos, 0, 1)); - output.tex_nurid = instance.tex_nurid; + output.tex = instance.tex; output.uv = instance.uv0 + ((vert + 0.5) * (instance.uv1 - instance.uv0)); output.tint_srgb = Vec4NormFromU32(instance.tint_srgb); return output; @@ -414,10 +415,10 @@ UiRectPS_Output PSDef(UiRectPS, UiRectPS_Input input) Vec4 color = input.tint_srgb; /* Texture */ - if (input.tex_nurid < 0xFFFFFFFF) + if (input.tex < 0xFFFFFFFF) { - Texture2D tex = GpuResourceFromNurid(input.tex_nurid); - SamplerState sampler = GpuSamplerFromUrid(sig.tex_sampler_urid); + Texture2D tex = NonUniformResourceFromRid(input.tex); + SamplerState sampler = UniformSamplerFromRid(sig.sampler); color *= tex.Sample(sampler, input.uv); } @@ -441,11 +442,11 @@ Struct(UiShapePS_Output) //- Vertex shader -UiShapePS_Input VSDef(UiShapeVS, Semantic(u32, SV_VertexID)) +UiShapePS_Input VSDef(UiShapeVS, Semantic(u32, sv_vertexid)) { ConstantBuffer sig = ui_shape_sig; - StructuredBuffer verts = GpuResourceFromUrid(sig.verts_urid); - UiShapeVert vert = verts[SV_VertexID]; + StructuredBuffer verts = UniformResourceFromRid(sig.verts); + UiShapeVert vert = verts[sv_vertexid]; UiShapePS_Input output; output.sv_position = mul(sig.projection, Vec4(vert.pos.xy, 0, 1)); output.color_srgb = Vec4NormFromU32(vert.color_srgb); diff --git a/src/pp/pp_draw.h b/src/pp/pp_draw.h index fdfa2d42..8a1fdf5e 100644 --- a/src/pp/pp_draw.h +++ b/src/pp/pp_draw.h @@ -6,9 +6,9 @@ Struct(MaterialSig) /* ----------------------------------------------------- */ Mat4x4 projection; /* 16 consts */ /* ----------------------------------------------------- */ - u32 tex_sampler_urid; /* 01 consts */ - u32 instances_urid; /* 01 consts */ - u32 grids_urid; /* 01 consts */ + SamplerStateRid sampler; /* 01 consts */ + StructuredBufferRid instances; /* 01 consts */ + StructuredBufferRid grids; /* 01 consts */ u32 _pad0; /* 01 consts (padding) */ /* ----------------------------------------------------- */ }; @@ -16,7 +16,7 @@ AssertRootConst(MaterialSig, 20); Struct(MaterialInstance) { - u32 tex_nurid; + Texture2DRid tex; u32 grid_id; Xform xf; Vec2 uv0; @@ -26,7 +26,7 @@ Struct(MaterialInstance) Vec3 light_emittance_srgb; }; #define DefaultMaterialInstance (MaterialInstance) { \ - .tex_nurid = U32Max, \ + .tex = { U32Max }, \ .grid_id = U32Max, \ .xf = XformIdentity, \ .uv1 = VEC2(1, 1), \ @@ -58,9 +58,9 @@ Struct(FloodSig) { /* ----------------------------------------------------- */ i32 step_len; /* 01 consts */ - u32 emittance_tex_urid; /* 01 consts */ - u32 read_flood_tex_urid; /* 01 consts */ - u32 target_flood_tex_urid; /* 01 consts */ + Texture2DRid emittance; /* 01 consts */ + RWTexture2DRid read; /* 01 consts */ + RWTexture2DRid target; /* 01 consts */ /* ----------------------------------------------------- */ u32 tex_width; /* 01 consts */ u32 tex_height; /* 01 consts */ @@ -88,14 +88,14 @@ Struct(ShadeSig) /* ----------------------------------------------------- */ Vec2 camera_offset; /* 02 consts */ u32 frame_index; /* 01 consts */ - u32 albedo_tex_urid; /* 01 consts */ + Texture2DRid albedo; /* 01 consts */ /* ----------------------------------------------------- */ - u32 emittance_tex_urid; /* 01 consts */ - u32 emittance_flood_tex_urid; /* 01 consts */ - u32 read_tex_urid; /* 01 consts */ - u32 target_tex_urid; /* 01 consts */ + Texture2DRid emittance; /* 01 consts */ + Texture2DRid emittance_flood; /* 01 consts */ + Texture2DRid read; /* 01 consts */ + RWTexture2DRid target; /* 01 consts */ /* ----------------------------------------------------- */ - u32 noise_tex_urid; /* 01 consts */ + Texture3DRid noise; /* 01 consts */ u32 noise_tex_width; /* 01 consts */ u32 noise_tex_height; /* 01 consts */ u32 noise_tex_depth; /* 01 consts */ @@ -116,11 +116,11 @@ Struct(UiBlitSig) Mat4x4 projection; /* 16 consts */ /* ----------------------------------------------------- */ u32 flags; /* 01 consts */ - u32 tex_urid; /* 01 consts */ + Texture2DRid src; /* 01 consts */ f32 exposure; /* 01 consts */ f32 gamma; /* 01 consts */ /* ----------------------------------------------------- */ - u32 tex_sampler_urid; /* 01 consts */ + SamplerStateRid sampler; /* 01 consts */ u32 _pad0; /* 01 consts (padding) */ u32 _pad1; /* 01 consts (padding) */ u32 _pad2; /* 01 consts (padding) */ @@ -137,8 +137,8 @@ Struct(UiRectSig) /* ----------------------------------------------------- */ Mat4x4 projection; /* 16 consts */ /* ----------------------------------------------------- */ - u32 instances_urid; /* 01 consts */ - u32 tex_sampler_urid; /* 01 consts */ + StructuredBufferRid instances; /* 01 consts */ + SamplerStateRid sampler; /* 01 consts */ u32 _pad0; /* 01 consts (padding) */ u32 _pad1; /* 01 consts (padding) */ /* ----------------------------------------------------- */ @@ -147,7 +147,7 @@ AssertRootConst(UiRectSig, 20); Struct(UiRectInstance) { - u32 tex_nurid; + Texture2DRid tex; Xform xf; Vec2 uv0; Vec2 uv1; @@ -162,7 +162,7 @@ Struct(UiShapeSig) /* ----------------------------------------------------- */ Mat4x4 projection; /* 16 consts */ /* ----------------------------------------------------- */ - u32 verts_urid; /* 01 consts */ + StructuredBufferRid verts; /* 01 consts */ u32 _pad0; /* 01 consts (padding) */ u32 _pad1; /* 01 consts (padding) */ u32 _pad2; /* 01 consts (padding) */