Files
bluflame/hgplus/las/framework-dx11-nasm/b288.asm
2026-04-18 22:31:51 +02:00

296 lines
6.5 KiB
NASM

; b288.asm - las/mercury
[BITS 32]
;---
%define WIDTH 1280
%define HEIGHT 720
%ifdef DEBUG
%else
%define FULLSCREEN
%endif
;---
%include "inc/macros.inc"
%include "inc/windows.inc"
%include "inc/dxgi.inc"
%include "inc/d3d11.inc"
;---
struc TEXTURE_2D_SRV_UAV_RTV
.TEX: resd 1
.SRV: resd 1
.UAV: resd 1
.RTV: resd 1
endstruc
;---
DATA_SECTION WFMTEX
_waveFormatEx:
istruc WAVEFORMATEX
at WAVEFORMATEX.wFormatTag, dw WAVE_FORMAT_IEEE_FLOAT
at WAVEFORMATEX.nChannels, dw 2
at WAVEFORMATEX.nSamplesPerSec, dd 44100
at WAVEFORMATEX.nAvgBytesPerSec, dd 44100*4*2
at WAVEFORMATEX.nBlockAlign, dw 4*2
at WAVEFORMATEX.wBitsPerSample, dw 4*8
at WAVEFORMATEX.cbSize, dw 0
iend
DATA_SECTION WHDR
_waveHdr:
istruc WAVEHDR
at WAVEHDR.lpData, dd _sndBuffer
at WAVEHDR.dwBufferLength, dd _sndBufferEnd-_sndBuffer
at WAVEHDR.dwBytesRecorded, dd 0
at WAVEHDR.dwUser, dd 0
at WAVEHDR.dwFlags, dd WHDR_PREPARED
at WAVEHDR.dwLoops, dd 0
at WAVEHDR.lpNext, dd 0
at WAVEHDR.reserved, dd 0
iend
DATA_SECTION TIME
_mmTime:
istruc MMTIME
at MMTIME.wType, dd TIME_SAMPLES
at MMTIME.data, dd 0
iend
DATA_SECTION SC_DESC
_swapChainDesc:
istruc DXGI_SWAP_CHAIN_DESC
at DXGI_SWAP_CHAIN_DESC.Width, dd WIDTH
at DXGI_SWAP_CHAIN_DESC.Height, dd HEIGHT
at DXGI_SWAP_CHAIN_DESC.Numerator, dd 0
at DXGI_SWAP_CHAIN_DESC.Denominator, dd 1
at DXGI_SWAP_CHAIN_DESC.Format, dd DXGI_FORMAT_R16G16B16A16_FLOAT
at DXGI_SWAP_CHAIN_DESC.ScanlineOrdering, dd DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED
at DXGI_SWAP_CHAIN_DESC.Scaling, dd DXGI_MODE_SCALING_UNSPECIFIED
at DXGI_SWAP_CHAIN_DESC.Count, dd 1
at DXGI_SWAP_CHAIN_DESC.Quality, dd 0
at DXGI_SWAP_CHAIN_DESC.BufferUsage, dd DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT
at DXGI_SWAP_CHAIN_DESC.BufferCount, dd 1
at DXGI_SWAP_CHAIN_DESC.OutputWindow, dd 0
%ifdef FULLSCREEN
at DXGI_SWAP_CHAIN_DESC.Windowed, dd 0
%else
at DXGI_SWAP_CHAIN_DESC.Windowed, dd 0xffffffff
%endif
at DXGI_SWAP_CHAIN_DESC.SwapEffect, dd DXGI_SWAP_EFFECT_DISCARD
at DXGI_SWAP_CHAIN_DESC.Flags, dd 0
iend
DATA_SECTION TEX_DESC
_textureDesc:
istruc D3D11_TEXTURE2D_DESC
at D3D11_TEXTURE2D_DESC.Width, dd 0
at D3D11_TEXTURE2D_DESC.Height, dd 0
at D3D11_TEXTURE2D_DESC.MipLevels, dd 0
at D3D11_TEXTURE2D_DESC.ArraySize, dd 1
at D3D11_TEXTURE2D_DESC.Format, dd DXGI_FORMAT_R16G16B16A16_FLOAT
at D3D11_TEXTURE2D_DESC.Count, dd 1
at D3D11_TEXTURE2D_DESC.Quality, dd 0
at D3D11_TEXTURE2D_DESC.Usage, dd D3D11_USAGE_DEFAULT
at D3D11_TEXTURE2D_DESC.BindFlags, dd D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS
at D3D11_TEXTURE2D_DESC.CPUAccessFlags, dd 0
at D3D11_TEXTURE2D_DESC.MiscFlags, dd D3D11_RESOURCE_MISC_GENERATE_MIPS
iend
DATA_SECTION UUID
_uuidTexture2D:
dd 0x6f15aaf2
dw 0xd208
dw 0x4e89
db 0x9a,0xb4,0x48,0x95,0x35,0xd3,0x4f,0x9c
DATA_SECTION SHADER
_src:
incbin "gpu/b288.hlsl"
db 0
_srcEnd:
_entrypoint:
db "cs", 0
_target:
db "cs_5_0", 0
_null:
dd 0
BSS_SECTION SND
_sndBuffer: resd 16384*4
_sndBufferEnd:
_waveHandle: resd 1024
BSS_SECTION D3D
_device: resd 1
_context: resd 1
_swapChain: resd 1
_backBufferTexture: resd 1
_backBufferUAV: resd 1
_computeShader: resd 1
_blob: resd 1
BSS_SECTION RES
_textureSRVUAVRTV: resb TEXTURE_2D_SRV_UAV_RTV_size
TEXT_SECTION SUR
_createSRVUAVRTV: ; target, width, height
pop eax
pop edi
pop dword [_textureDesc + D3D11_TEXTURE2D_DESC.Width]
pop dword [_textureDesc + D3D11_TEXTURE2D_DESC.Height]
push eax
lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.TEX]
push eax
push byte 0
push dword _textureDesc
com _device, ID3D11Device.CreateTexture2D
lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.SRV]
push eax
push byte 0
push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX]
com _device, ID3D11Device.CreateShaderResourceView
lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.UAV]
push eax
push byte 0
push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX]
com _device, ID3D11Device.CreateUnorderedAccessView
lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.RTV]
push eax
push byte 0
push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX]
com _device, ID3D11Device.CreateRenderTargetView
ret
TEXT_SECTION MAINLOOP
global _start
_start:
%ifdef FULLSCREEN
push byte 0
push byte 0
push byte 0
push byte 0
push byte 0
push byte 0
push byte 0
push byte 0
push byte 0
push dword WS_POPUP | WS_VISIBLE | WS_MAXIMIZE
push byte 0
push dword ATOM_STATIC
push byte 0
%else
push byte 0
push byte 0
push byte 0
push byte 0
push dword HEIGHT
push dword WIDTH
push byte 0
push byte 0
push dword WS_POPUP | WS_VISIBLE
push byte 0
push dword ATOM_STATIC
push byte 0
%endif
call _CreateWindowExA@48
mov [_swapChainDesc + DXGI_SWAP_CHAIN_DESC.OutputWindow], eax
%ifdef FULLSCREEN
call _ShowCursor@4
%endif
push dword _context
push byte 0
push dword _device
push dword _swapChain
push dword _swapChainDesc
push byte D3D11_SDK_VERSION
push byte 0
push byte 0
push byte 0
push byte 0
push byte D3D_DRIVER_TYPE_HARDWARE
push byte 0
call _D3D11CreateDeviceAndSwapChain@48
push byte 0
push dword _blob
push byte 0
push dword D3DCOMPILE_OPTIMIZATION_LEVEL3
push dword _target
push dword _entrypoint
push byte 0
push byte 0
push byte 0
push dword _srcEnd-_src
push dword _src
call _D3DCompile@44
push dword _computeShader
push byte 0
com _blob, ID3D10Blob.GetBufferSize
push eax
com _blob, ID3D10Blob.GetBufferPointer
push eax
com _device, ID3D11Device.CreateComputeShader
push dword _backBufferTexture
push dword _uuidTexture2D
push byte 0
com _swapChain, IDXGISwapChain.GetBuffer
push dword _backBufferUAV
push byte 0
push dword [_backBufferTexture]
com _device, ID3D11Device.CreateUnorderedAccessView
push byte 0
push byte 0
push dword [_computeShader]
com _context, ID3D11DeviceContext.CSSetShader
push dword WIDTH
push dword HEIGHT
push dword _textureSRVUAVRTV
call _createSRVUAVRTV
_initSound:
push byte 0
push byte 0
push byte 0
push dword _waveFormatEx
push byte WAVE_MAPPER
push dword _waveHandle
call _waveOutOpen@24
push byte WAVEHDR_size
push dword _waveHdr
push dword [_waveHandle]
call _waveOutWrite@12
_mainloop:
push byte MMTIME_size
push dword _mmTime
push dword [_waveHandle]
call _waveOutGetPosition@12
push byte 0
push dword _backBufferUAV
push byte 1
push byte 0
com _context, ID3D11DeviceContext.CSSetUnorderedAccessViews
push byte 1
push byte 45
push byte 80
com _context, ID3D11DeviceContext.Dispatch
push byte 0
push byte 1
com _swapChain, IDXGISwapChain.Present
push byte VK_ESCAPE
call _GetAsyncKeyState@4
dec eax
js short _mainloop
_end:
push eax
call _ExitProcess@4