All the GPU stuff
This commit is contained in:
parent
f6792de6c5
commit
5188f80567
@ -27,7 +27,17 @@ class GpuController extends AbstractController
|
||||
#[Route('/', name: 'gpu_index', methods: ['GET'])]
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->itemListView('gpus');
|
||||
$acquiredItems = $this->entityManager->getRepository(self::ENTITY)->findBy([
|
||||
'acquired' => TRUE,
|
||||
], []);
|
||||
$newItems = $this->entityManager->getRepository(self::ENTITY)->findBy([
|
||||
'acquired' => FALSE,
|
||||
], []);
|
||||
|
||||
return $this->render('gpu/index.html.twig', [
|
||||
'not_acquired' => $newItems,
|
||||
'acquired' => $acquiredItems,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/new', name: 'gpu_new', methods: ['GET', 'POST'])]
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Table(name: 'brand', schema: 'collection')]
|
||||
@ -16,9 +18,21 @@ class Brand
|
||||
#[ORM\SequenceGenerator(sequenceName: 'brand_id_seq', allocationSize: 1, initialValue: 1)]
|
||||
private int $id;
|
||||
|
||||
#[ORM\ManyToMany(targetEntity: BrandCategory::class)]
|
||||
#[ORM\JoinTable(name: 'collection.brand_category_link')]
|
||||
#[ORM\JoinColumn(name: 'brand_id', referencedColumnName: 'id')]
|
||||
#[ORM\InverseJoinColumn(name: 'brand_category', referencedColumnName: 'category_name')]
|
||||
#[ORM\OrderBy(['name' => 'asc'])]
|
||||
private $categories;
|
||||
|
||||
#[ORM\Column(name: 'name', unique: TRUE, nullable: FALSE)]
|
||||
private string $name;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->categories = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->name;
|
||||
@ -40,4 +54,28 @@ class Brand
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, BrandCategory>
|
||||
*/
|
||||
public function getCategories(): Collection
|
||||
{
|
||||
return $this->categories;
|
||||
}
|
||||
|
||||
public function addCategory(BrandCategory $category): self
|
||||
{
|
||||
if (!$this->categories->contains($category)) {
|
||||
$this->categories->add($category);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeCategory(BrandCategory $category): self
|
||||
{
|
||||
$this->categories->removeElement($category);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
31
src/Entity/BrandCategory.php
Normal file
31
src/Entity/BrandCategory.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Table(name: 'brand_category', schema: 'collection')]
|
||||
#[ORM\Entity]
|
||||
class BrandCategory {
|
||||
#[ORM\Id]
|
||||
#[ORM\Column(name: 'category_name')]
|
||||
#[ORM\OrderBy(['name' => 'asc'])]
|
||||
private string $name;
|
||||
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function setName(string $name): self
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Stringable;
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Table(name: 'gpu', schema: 'collection')]
|
||||
@ -18,15 +19,15 @@ class Gpu
|
||||
#[ORM\ManyToOne(targetEntity: 'Brand')]
|
||||
#[ORM\OrderBy(['name' => 'asc'])]
|
||||
#[ORM\JoinColumn(name: 'gpu_brand_id', referencedColumnName: 'id', nullable: FALSE)]
|
||||
private readonly Brand $gpuBrand;
|
||||
private Brand $gpuBrand;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: 'GpuCore')]
|
||||
#[ORM\OrderBy(['brand' => 'asc', 'name' => 'asc'])]
|
||||
#[ORM\JoinColumn(name: 'gpu_core_id', referencedColumnName: 'id', nullable: TRUE)]
|
||||
private readonly GpuCore $gpuCore;
|
||||
private GpuCore $gpuCore;
|
||||
|
||||
#[ORM\Column(name: 'reference_model_name', nullable: FALSE)]
|
||||
private readonly string $modelName;
|
||||
private string $modelName;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: 'Brand')]
|
||||
#[ORM\OrderBy(['name' => 'asc'])]
|
||||
@ -37,10 +38,10 @@ class Gpu
|
||||
private ?string $alternateModelName = '';
|
||||
|
||||
#[ORM\Column(name: 'card_key', nullable: TRUE)]
|
||||
private readonly ?string $cardKey;
|
||||
private ?string $cardKey;
|
||||
|
||||
#[ORM\Column(name: 'bus_interface')]
|
||||
private readonly ?string $busInterface;
|
||||
#[ORM\Column(name: 'bus_interface', nullable: TRUE)]
|
||||
private ?string $busInterface;
|
||||
|
||||
#[ORM\Column(name: 'slot_width')]
|
||||
private int $slotWidth = 1;
|
||||
@ -57,56 +58,56 @@ class Gpu
|
||||
#[ORM\Column(name: 'tdp', nullable: TRUE)]
|
||||
private readonly ?int $tdp;
|
||||
|
||||
#[ORM\Column(name: 'base_clock')]
|
||||
private readonly ?int $baseClock;
|
||||
#[ORM\Column(name: 'base_clock', nullable: TRUE)]
|
||||
private ?int $baseClock;
|
||||
|
||||
#[ORM\Column(name: 'boost_clock')]
|
||||
private readonly ?int $boostClock;
|
||||
#[ORM\Column(name: 'boost_clock', nullable: TRUE)]
|
||||
private ?int $boostClock;
|
||||
|
||||
#[ORM\Column(name: 'memory_clock')]
|
||||
private readonly ?int $memoryClock;
|
||||
#[ORM\Column(name: 'memory_clock', nullable: TRUE)]
|
||||
private ?int $memoryClock;
|
||||
|
||||
#[ORM\Column(name: 'memory_size')]
|
||||
private readonly ?int $memorySize;
|
||||
#[ORM\Column(name: 'memory_size', nullable: TRUE)]
|
||||
private ?int $memorySize;
|
||||
|
||||
#[ORM\Column(name: 'memory_bus')]
|
||||
private readonly ?int $memoryBus;
|
||||
#[ORM\Column(name: 'memory_bus', nullable: TRUE)]
|
||||
private ?int $memoryBus;
|
||||
|
||||
#[ORM\Column(name: 'memory_type')]
|
||||
private readonly ?string $memoryType;
|
||||
#[ORM\Column(name: 'memory_type', nullable: TRUE)]
|
||||
private ?string $memoryType;
|
||||
|
||||
#[ORM\Column(name: 'shading_units')]
|
||||
private readonly ?int $shadingUnits;
|
||||
#[ORM\Column(name: 'shading_units', nullable: TRUE)]
|
||||
private ?int $shadingUnits;
|
||||
|
||||
#[ORM\Column(name: 'tmus')]
|
||||
private readonly ?int $tmus;
|
||||
#[ORM\Column(name: 'tmus', nullable: TRUE)]
|
||||
private ?int $tmus;
|
||||
|
||||
#[ORM\Column(name: 'rops')]
|
||||
private readonly ?int $rops;
|
||||
#[ORM\Column(name: 'rops', nullable: TRUE)]
|
||||
private ?int $rops;
|
||||
|
||||
#[ORM\Column(name: 'compute_units')]
|
||||
private readonly ?int $computeUnits;
|
||||
#[ORM\Column(name: 'compute_units', nullable: TRUE)]
|
||||
private ?int $computeUnits;
|
||||
|
||||
#[ORM\Column(name: 'l1_cache')]
|
||||
private readonly ?string $l1cache;
|
||||
#[ORM\Column(name: 'l1_cache', nullable: TRUE)]
|
||||
private ?string $l1cache;
|
||||
|
||||
#[ORM\Column(name: 'l2_cache')]
|
||||
private readonly ?string $l2cache;
|
||||
#[ORM\Column(name: 'l2_cache', nullable: TRUE)]
|
||||
private ?string $l2cache;
|
||||
|
||||
#[ORM\Column(name: 'direct_x_support')]
|
||||
private readonly ?string $directXSupport;
|
||||
#[ORM\Column(name: 'direct_x_support', nullable: TRUE)]
|
||||
private ?string $directXSupport;
|
||||
|
||||
#[ORM\Column(name: 'opengl_support')]
|
||||
private readonly ?string $openGLSupport;
|
||||
#[ORM\Column(name: 'opengl_support', nullable: TRUE)]
|
||||
private ?string $openGLSupport;
|
||||
|
||||
#[ORM\Column(name: 'opencl_support')]
|
||||
private readonly ?string $openCLSupport;
|
||||
#[ORM\Column(name: 'opencl_support', nullable: TRUE)]
|
||||
private ?string $openCLSupport;
|
||||
|
||||
#[ORM\Column(name: 'vulkan_support')]
|
||||
private readonly ?string $vulkanSupport;
|
||||
#[ORM\Column(name: 'vulkan_support', nullable: TRUE)]
|
||||
private ?string $vulkanSupport;
|
||||
|
||||
#[ORM\Column(name: 'shader_model')]
|
||||
private readonly ?string $shaderModel;
|
||||
#[ORM\Column(name: 'shader_model', nullable: TRUE)]
|
||||
private ?string $shaderModel;
|
||||
|
||||
#[ORM\Column(name: 'link')]
|
||||
private readonly string $link;
|
||||
|
@ -44,7 +44,11 @@ class GpuCore implements Stringable
|
||||
|
||||
public function __toString(): string
|
||||
{
|
||||
return "{$this->brand} {$this->name} ({$this->variant}/{$this->generationName})";
|
||||
$name = ( ! empty($this->variant))
|
||||
? "{$this->name} ({$this->variant})"
|
||||
: $this->name;
|
||||
|
||||
return "{$name} - [{$this->brand}] $this->generationName";
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
|
@ -4,6 +4,9 @@ namespace App\Form;
|
||||
|
||||
use App\Entity\Brand;
|
||||
use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
|
||||
use App\Entity\BrandCategory;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class BrandType extends AbstractType
|
||||
@ -11,7 +14,8 @@ class BrandType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('name');
|
||||
->add('name')
|
||||
->add('categories');
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
|
@ -28,30 +28,32 @@ class GpuType extends AbstractType
|
||||
'class' => Brand::class,
|
||||
'query_builder' => $brandQueryBuilder,
|
||||
'empty_data' => NULL,
|
||||
'placeholder' => 'Unknown',
|
||||
'required' => false,
|
||||
])
|
||||
->add('alternateModelName')
|
||||
->add('cardKey')
|
||||
->add('busInterface')
|
||||
->add('slotWidth')
|
||||
->add('molexPower')
|
||||
->add('pcie6power')
|
||||
->add('pcie8power')
|
||||
->add('tdp')
|
||||
->add('baseClock')
|
||||
->add('boostClock')
|
||||
->add('memoryClock')
|
||||
->add('memorySize')
|
||||
->add('memoryBus')
|
||||
->add('molexPower', null, ['label' => 'Molex Power Connectors'])
|
||||
->add('pcie6power', null, ['label' => 'PCIe 6-pin Power Connectors'])
|
||||
->add('pcie8power', null, ['label' => 'PCIe 8-pin Power Connectors'])
|
||||
->add('tdp', null, ['label' => 'TDP (Watts)'])
|
||||
->add('baseClock', null, ['label' => 'GPU Base Clock (MHz)'])
|
||||
->add('boostClock', null, ['label' => 'GPU Boost Clock (MHz)'])
|
||||
->add('memoryClock', null, ['label' => 'Memory Speed (MHz)'])
|
||||
->add('memorySize', null, ['label' => 'Memory Size (MB)'])
|
||||
->add('memoryBus', null, ['label' => 'Memory Bus Size (bits)'])
|
||||
->add('memoryType')
|
||||
->add('shadingUnits')
|
||||
->add('tmus')
|
||||
->add('rops')
|
||||
->add('tmus', null, ['label' => 'TMUs'])
|
||||
->add('rops', null, ['label' => 'ROPs'])
|
||||
->add('computeUnits')
|
||||
->add('l1cache')
|
||||
->add('l2cache')
|
||||
->add('directXSupport')
|
||||
->add('openGLSupport')
|
||||
->add('openCLSupport')
|
||||
->add('l1cache', null, ['label' => 'L1 Cache'])
|
||||
->add('l2cache', null, ['label' => 'L2 Cache'])
|
||||
->add('directXSupport', null, ['label' => 'DirectX Support'])
|
||||
->add('openGLSupport', null, ['label' => 'OpenGL Support'])
|
||||
->add('openCLSupport', null, ['label' => 'OpenCL Support'])
|
||||
->add('vulkanSupport')
|
||||
->add('shaderModel')
|
||||
->add('link')
|
||||
|
28
src/Repository/BrandRepository.php
Normal file
28
src/Repository/BrandRepository.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\Brand;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
class BrandRepository extends ServiceEntityRepository {
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, Brand::class);
|
||||
}
|
||||
|
||||
public function filterByCategory(string $category): Query
|
||||
{
|
||||
$em = $this->getEntityManager();
|
||||
$query = $em->createQuery("
|
||||
SELECT b FROM App\Entity\Brand b
|
||||
INNER JOIN b.categories c WHERE c.name = ?1
|
||||
ORDER BY b.name ASC
|
||||
");
|
||||
$query->setParameter(1, $category);
|
||||
|
||||
return $query->execute();
|
||||
}
|
||||
}
|
@ -16,9 +16,10 @@
|
||||
<table class="hover scroll sortable stack">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Actions</th>
|
||||
<th> </th>
|
||||
<th>Id</th>
|
||||
<th>Name</th>
|
||||
<th>Categories</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -36,6 +37,13 @@
|
||||
</td>
|
||||
<td>{{ brand.id }}</td>
|
||||
<td>{{ brand.name }}</td>
|
||||
<td>
|
||||
<ul>
|
||||
{% for category in brand.categories %}
|
||||
<li>{{ category }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
|
@ -19,7 +19,8 @@
|
||||
<hr/>
|
||||
|
||||
|
||||
<form method="post" action="{{ path('brand_delete', {'id': brand.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<form method="post" action="{{ path('brand_delete', {'id': brand.id}) }}"
|
||||
onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ brand.id) }}">
|
||||
<button type="submit" class="alert button expanded">Delete</button>
|
||||
</form>
|
||||
@ -36,6 +37,16 @@
|
||||
<th>Name</th>
|
||||
<td>{{ brand.name }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Categories</th>
|
||||
<td>
|
||||
<ul>
|
||||
{% for category in brand.categories %}
|
||||
<li>{{ category }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
@ -1,4 +0,0 @@
|
||||
<form method="post" action="{{ path('gpu_delete', {'id': gpu.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ gpu.id) }}">
|
||||
<button class="btn">Delete</button>
|
||||
</form>
|
@ -1,4 +0,0 @@
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
<button type="submit" class="success button expanded">{{ button_label|default('Save') }}</button>
|
||||
{{ form_end(form) }}
|
@ -13,8 +13,83 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="large primary callout">
|
||||
<div>
|
||||
{{ form_start(edit_form) }}
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Names / Brands</legend>
|
||||
|
||||
{{ form_row(edit_form.gpuBrand) }}
|
||||
{{ form_row(edit_form.modelName) }}
|
||||
{{ form_row(edit_form.gpuCore) }}
|
||||
|
||||
<hr />
|
||||
|
||||
{{ form_row(edit_form.boardBrand) }}
|
||||
{{ form_row(edit_form.alternateModelName) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Bus / Size</legend>
|
||||
|
||||
{{ form_row(edit_form.cardKey) }}
|
||||
{{ form_row(edit_form.busInterface) }}
|
||||
{{ form_row(edit_form.slotWidth) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Power</legend>
|
||||
|
||||
{{ form_row(edit_form.molexPower) }}
|
||||
{{ form_row(edit_form.pcie6power) }}
|
||||
{{ form_row(edit_form.pcie8power) }}
|
||||
{{ form_row(edit_form.tdp) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Clock Speeds</legend>
|
||||
|
||||
{{ form_row(edit_form.baseClock) }}
|
||||
{{ form_row(edit_form.boostClock) }}
|
||||
{{ form_row(edit_form.memoryClock) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Memory</legend>
|
||||
|
||||
{{ form_row(edit_form.memorySize) }}
|
||||
{{ form_row(edit_form.memoryBus) }}
|
||||
{{ form_row(edit_form.memoryType) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Rendering Hardware</legend>
|
||||
|
||||
{{ form_row(edit_form.shadingUnits) }}
|
||||
{{ form_row(edit_form.tmus) }}
|
||||
{{ form_row(edit_form.rops) }}
|
||||
{{ form_row(edit_form.computeUnits) }}
|
||||
{{ form_row(edit_form.l1cache) }}
|
||||
{{ form_row(edit_form.l2cache) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>API Support</legend>
|
||||
|
||||
{{ form_row(edit_form.directXSupport) }}
|
||||
{{ form_row(edit_form.openGLSupport) }}
|
||||
{{ form_row(edit_form.openCLSupport) }}
|
||||
{{ form_row(edit_form.vulkanSupport) }}
|
||||
{{ form_row(edit_form.shaderModel) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Misc.</legend>
|
||||
|
||||
{{ form_row(edit_form.link) }}
|
||||
{{ form_row(edit_form.count) }}
|
||||
{{ form_row(edit_form.acquired) }}
|
||||
{{ form_row(edit_form.notes) }}
|
||||
</fieldset>
|
||||
{{ form_widget(edit_form) }}
|
||||
<button
|
||||
type="submit"
|
||||
|
@ -13,25 +13,60 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul
|
||||
class="tabs"
|
||||
data-deep-link="true"
|
||||
data-update-history="true"
|
||||
data-deep-link-smudge="true"
|
||||
data-deep-link-smudge-delay="500"
|
||||
data-tabs
|
||||
id="classifications"
|
||||
>
|
||||
<li class="tabs-title is-active" aria-selected="true">
|
||||
<a href="#in_collection">In Collection</a>
|
||||
</li>
|
||||
<li class="tabs-title">
|
||||
<a href="#on_the_way">On the Way</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs-content" data-tabs-content="classifications">
|
||||
<div class="tabs-panel is-active" id="in_collection">
|
||||
<table class="hover scroll sortable stack">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>actions</th>
|
||||
<th> </th>
|
||||
<th>Id</th>
|
||||
<th>Model Name</th>
|
||||
<th>GPU</th>
|
||||
<th>Card Brand</th>
|
||||
<th>Alternate Model Name</th>
|
||||
<th>Power</th>
|
||||
<th>Card Keying</th>
|
||||
<th>TDP</th>
|
||||
<th>Bus Interface</th>
|
||||
<th>Slot Width</th>
|
||||
<th>Power</th>
|
||||
<th>Tdp</th>
|
||||
<th>GPU Clock</th>
|
||||
<th>Memory</th>
|
||||
<th>Shading Units</th>
|
||||
<th>TMUs</th>
|
||||
<th>ROPs</th>
|
||||
<th>Compute Units</th>
|
||||
<th>L1 cache</th>
|
||||
<th>L2 cache</th>
|
||||
<th>DirectX Support</th>
|
||||
<th>OpenGL</th>
|
||||
<th>OpenCL</th>
|
||||
<th>Vulkan</th>
|
||||
<th>Shader Model</th>
|
||||
<th>Link</th>
|
||||
<th>Count</th>
|
||||
<th>Acquired</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for gpu in gpus %}
|
||||
{% for gpu in acquired %}
|
||||
<tr>
|
||||
<td>
|
||||
<ul>
|
||||
@ -52,8 +87,11 @@
|
||||
{{ gpu.gpuCore.name }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ gpu.boardBrand.name }}</td>
|
||||
<td>{% if gpu.boardBrand %}{{ gpu.boardBrand.name }}{% else %}Unknown{% endif %}</td>
|
||||
<td>{{ gpu.alternateModelName }}</td>
|
||||
<td>{{ gpu.cardKey }}</td>
|
||||
<td>{{ gpu.busInterface }}</td>
|
||||
<td>{{ gpu.slotWidth }}</td>
|
||||
<td>
|
||||
{% if gpu.pcie6power > 0 or gpu.pcie8power > 0 %}
|
||||
{% if gpu.pcie6power > 0 %}
|
||||
@ -68,17 +106,144 @@
|
||||
Slot
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ gpu.tdp }}</td>
|
||||
<td>
|
||||
{% if gpu.boostClock %}
|
||||
{{ gpu.baseClock }} -> {{ gpu.boostClock }}
|
||||
{% else %}
|
||||
{{ gpu.baseClock }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ gpu.memorySize }}MiB {{ gpu.memoryClock }}MHz {{ gpu.memoryBus }}bit {{ gpu.memoryType }}</td>
|
||||
<td>{{ gpu.shadingUnits }}</td>
|
||||
<td>{{ gpu.tmus }}</td>
|
||||
<td>{{ gpu.rops }}</td>
|
||||
<td>{{ gpu.computeUnits }}</td>
|
||||
<td>{{ gpu.l1cache }}</td>
|
||||
<td>{{ gpu.l2cache }}</td>
|
||||
<td>{{ gpu.directXSupport }}</td>
|
||||
<td>{{ gpu.openGLSupport }}</td>
|
||||
<td>{{ gpu.openCLSupport }}</td>
|
||||
<td>{{ gpu.vulkanSupport }}</td>
|
||||
<td>{{ gpu.shaderModel }}</td>
|
||||
<td>{{ gpu.link }}</td>
|
||||
<td>{{ gpu.count }}</td>
|
||||
<td>{{ gpu.acquired ? 'Yes' : 'No' }}</td>
|
||||
<td>{{ gpu.notes }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="32">no records found</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="tabs-panel" id="on_the_way">
|
||||
<table class="hover scroll sortable stack">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>Id</th>
|
||||
<th>Model Name</th>
|
||||
<th>GPU</th>
|
||||
<th>Card Brand</th>
|
||||
<th>Alternate Model Name</th>
|
||||
<th>Card Keying</th>
|
||||
<th>Bus Interface</th>
|
||||
<th>Slot Width</th>
|
||||
<th>Power</th>
|
||||
<th>Tdp</th>
|
||||
<th>GPU Clock</th>
|
||||
<th>Memory</th>
|
||||
<th>Shading Units</th>
|
||||
<th>TMUs</th>
|
||||
<th>ROPs</th>
|
||||
<th>Compute Units</th>
|
||||
<th>L1 cache</th>
|
||||
<th>L2 cache</th>
|
||||
<th>DirectX Support</th>
|
||||
<th>OpenGL</th>
|
||||
<th>OpenCL</th>
|
||||
<th>Vulkan</th>
|
||||
<th>Shader Model</th>
|
||||
<th>Link</th>
|
||||
<th>Count</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for gpu in not_acquired %}
|
||||
<tr>
|
||||
<td>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="{{ path('gpu_show', {'id': gpu.id}) }}">View 👁</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('gpu_edit', {'id': gpu.id}) }}">Edit <span class="edit-icon">✎</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>{{ gpu.id }}</td>
|
||||
<td>{{ gpu.gpuBrand.name }} {{ gpu.modelName }}</td>
|
||||
<td>
|
||||
{% if gpu.gpuCore.variant %}
|
||||
{{ gpu.gpuCore.name }} ({{ gpu.gpuCore.variant }})
|
||||
{% else %}
|
||||
{{ gpu.gpuCore.name }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{% if gpu.boardBrand %}{{ gpu.boardBrand.name }}{% else %}Unknown{% endif %}</td>
|
||||
<td>{{ gpu.alternateModelName }}</td>
|
||||
<td>{{ gpu.cardKey }}</td>
|
||||
<td>{{ gpu.tdp }} W</td>
|
||||
<td>{{ gpu.busInterface }}</td>
|
||||
<td>{{ gpu.slotWidth }}</td>
|
||||
<td>
|
||||
{% if gpu.pcie6power > 0 or gpu.pcie8power > 0 %}
|
||||
{% if gpu.pcie6power > 0 %}
|
||||
{{ gpu.pcie6power }} PCIe 6-pin
|
||||
{% endif %}
|
||||
{% if gpu.pcie8power > 0 %}
|
||||
{{ gpu.pcie8power }} PCIe 8-pin
|
||||
{% endif %}
|
||||
{% elseif gpu.molexPower > 0 %}
|
||||
{{ gpu.molexPower }} Molex
|
||||
{% else %}
|
||||
Slot
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ gpu.tdp }}</td>
|
||||
<td>
|
||||
{% if gpu.boostClock %}
|
||||
{{ gpu.baseClock }} -> {{ gpu.boostClock }}
|
||||
{% else %}
|
||||
{{ gpu.baseClock }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ gpu.memorySize }}MiB {{ gpu.memoryClock }}MHz {{ gpu.memoryBus }}bit {{ gpu.memoryType }}</td>
|
||||
<td>{{ gpu.shadingUnits }}</td>
|
||||
<td>{{ gpu.tmus }}</td>
|
||||
<td>{{ gpu.rops }}</td>
|
||||
<td>{{ gpu.computeUnits }}</td>
|
||||
<td>{{ gpu.l1cache }}</td>
|
||||
<td>{{ gpu.l2cache }}</td>
|
||||
<td>{{ gpu.directXSupport }}</td>
|
||||
<td>{{ gpu.openGLSupport }}</td>
|
||||
<td>{{ gpu.openCLSupport }}</td>
|
||||
<td>{{ gpu.vulkanSupport }}</td>
|
||||
<td>{{ gpu.shaderModel }}</td>
|
||||
<td>{{ gpu.link }}</td>
|
||||
<td>{{ gpu.count }}</td>
|
||||
<td>{{ gpu.notes }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="12">no records found</td>
|
||||
<td colspan="32">no records found</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -13,10 +13,86 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="large primary callout">
|
||||
{{ form_start(form) }}
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Names / Brands</legend>
|
||||
|
||||
{{ form_row(form.gpuBrand) }}
|
||||
{{ form_row(form.modelName) }}
|
||||
{{ form_row(form.gpuCore) }}
|
||||
|
||||
<hr />
|
||||
|
||||
{{ form_row(form.boardBrand) }}
|
||||
{{ form_row(form.alternateModelName) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Bus / Size</legend>
|
||||
|
||||
{{ form_row(form.cardKey) }}
|
||||
{{ form_row(form.busInterface) }}
|
||||
{{ form_row(form.slotWidth) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Power</legend>
|
||||
|
||||
{{ form_row(form.molexPower) }}
|
||||
{{ form_row(form.pcie6power) }}
|
||||
{{ form_row(form.pcie8power) }}
|
||||
{{ form_row(form.tdp) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Clock Speeds</legend>
|
||||
|
||||
{{ form_row(form.baseClock) }}
|
||||
{{ form_row(form.boostClock) }}
|
||||
{{ form_row(form.memoryClock) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Memory</legend>
|
||||
|
||||
{{ form_row(form.memorySize) }}
|
||||
{{ form_row(form.memoryBus) }}
|
||||
{{ form_row(form.memoryType) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Rendering Hardware</legend>
|
||||
|
||||
{{ form_row(form.shadingUnits) }}
|
||||
{{ form_row(form.tmus) }}
|
||||
{{ form_row(form.rops) }}
|
||||
{{ form_row(form.computeUnits) }}
|
||||
{{ form_row(form.l1cache) }}
|
||||
{{ form_row(form.l2cache) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>API Support</legend>
|
||||
|
||||
{{ form_row(form.directXSupport) }}
|
||||
{{ form_row(form.openGLSupport) }}
|
||||
{{ form_row(form.openCLSupport) }}
|
||||
{{ form_row(form.vulkanSupport) }}
|
||||
{{ form_row(form.shaderModel) }}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="large primary callout">
|
||||
<legend>Misc.</legend>
|
||||
|
||||
{{ form_row(form.link) }}
|
||||
{{ form_row(form.count) }}
|
||||
{{ form_row(form.acquired) }}
|
||||
{{ form_row(form.notes) }}
|
||||
</fieldset>
|
||||
{{ form_widget(form) }}
|
||||
<button type="submit" class="success button expanded">Add</button>
|
||||
<button
|
||||
type="submit"
|
||||
class="success button expanded"
|
||||
>Add</button>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -15,8 +15,10 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr />
|
||||
|
||||
|
||||
<form method="post" action="{{ path('gpu_delete', {'id': gpu.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ gpu.id) }}">
|
||||
<button type="submit" class="alert button expanded">Delete</button>
|
||||
@ -38,6 +40,18 @@
|
||||
<th>AlternateModelName</th>
|
||||
<td>{{ gpu.alternateModelName }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>CardKey</th>
|
||||
<td>{{ gpu.cardKey }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>BusInterface</th>
|
||||
<td>{{ gpu.busInterface }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>SlotWidth</th>
|
||||
<td>{{ gpu.slotWidth }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MolexPower</th>
|
||||
<td>{{ gpu.molexPower }}</td>
|
||||
@ -50,14 +64,78 @@
|
||||
<th>Pcie8power</th>
|
||||
<td>{{ gpu.pcie8power }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>CardKey</th>
|
||||
<td>{{ gpu.cardKey }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Tdp</th>
|
||||
<td>{{ gpu.tdp }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>BaseClock</th>
|
||||
<td>{{ gpu.baseClock }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>BoostClock</th>
|
||||
<td>{{ gpu.boostClock }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MemoryClock</th>
|
||||
<td>{{ gpu.memoryClock }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MemorySize</th>
|
||||
<td>{{ gpu.memorySize }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MemoryBus</th>
|
||||
<td>{{ gpu.memoryBus }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MemoryType</th>
|
||||
<td>{{ gpu.memoryType }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>ShadingUnits</th>
|
||||
<td>{{ gpu.shadingUnits }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Tmus</th>
|
||||
<td>{{ gpu.tmus }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Rops</th>
|
||||
<td>{{ gpu.rops }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>ComputeUnits</th>
|
||||
<td>{{ gpu.computeUnits }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>L1cache</th>
|
||||
<td>{{ gpu.l1cache }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>L2cache</th>
|
||||
<td>{{ gpu.l2cache }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>DirectXSupport</th>
|
||||
<td>{{ gpu.directXSupport }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>OpenGLSupport</th>
|
||||
<td>{{ gpu.openGLSupport }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>OpenCLSupport</th>
|
||||
<td>{{ gpu.openCLSupport }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>VulkanSupport</th>
|
||||
<td>{{ gpu.vulkanSupport }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>ShaderModel</th>
|
||||
<td>{{ gpu.shaderModel }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Link</th>
|
||||
<td>{{ gpu.link }}</td>
|
||||
@ -66,6 +144,10 @@
|
||||
<th>Count</th>
|
||||
<td>{{ gpu.count }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Acquired</th>
|
||||
<td>{{ gpu.acquired ? 'Yes' : 'No' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Notes</th>
|
||||
<td>{{ gpu.notes }}</td>
|
||||
@ -73,4 +155,5 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
Loading…
Reference in New Issue
Block a user